// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.cert.cmp;

import org.bouncycastle.asn1.cmp.PKIBody;
import org.bouncycastle.operator.DigestCalculator;
import org.bouncycastle.operator.OperatorCreationException;
import org.bouncycastle.asn1.cmp.Challenge;
import org.bouncycastle.asn1.cmp.POPODecKeyChallContent;
import org.bouncycastle.operator.DigestCalculatorProvider;
import org.bouncycastle.asn1.ASN1Sequence;

public class POPODecryptionKeyChallengeContent
{
    private final ASN1Sequence content;
    private final DigestCalculatorProvider owfCalcProvider;
    
    POPODecryptionKeyChallengeContent(final POPODecKeyChallContent popoDecKeyChallContent, final DigestCalculatorProvider owfCalcProvider) {
        this.content = ASN1Sequence.getInstance(popoDecKeyChallContent.toASN1Primitive());
        this.owfCalcProvider = owfCalcProvider;
    }
    
    public ChallengeContent[] toChallengeArray() throws CMPException {
        final ChallengeContent[] array = new ChallengeContent[this.content.size()];
        DigestCalculator value = null;
        for (int i = 0; i != array.length; ++i) {
            final Challenge instance = Challenge.getInstance(this.content.getObjectAt(i));
            if (instance.getOwf() != null) {
                try {
                    value = this.owfCalcProvider.get(instance.getOwf());
                }
                catch (final OperatorCreationException ex) {
                    throw new CMPException(ex.getMessage(), ex);
                }
            }
            array[i] = new ChallengeContent(Challenge.getInstance(this.content.getObjectAt(i)), value);
        }
        return array;
    }
    
    public static POPODecryptionKeyChallengeContent fromPKIBody(final PKIBody pkiBody, final DigestCalculatorProvider digestCalculatorProvider) {
        if (pkiBody.getType() != 5) {
            throw new IllegalArgumentException("content of PKIBody wrong type: " + pkiBody.getType());
        }
        return new POPODecryptionKeyChallengeContent(POPODecKeyChallContent.getInstance(pkiBody.getContent()), digestCalculatorProvider);
    }
    
    public POPODecKeyChallContent toASN1Structure() {
        return POPODecKeyChallContent.getInstance(this.content);
    }
}
