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

package org.bouncycastle.cert.cmp;

import org.bouncycastle.asn1.cmp.CertConfirmContent;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.cmp.CertStatus;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.operator.DigestCalculatorProvider;
import java.math.BigInteger;
import org.bouncycastle.cert.X509CertificateHolder;
import java.util.ArrayList;
import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.cmp.CMPCertificate;
import java.util.List;
import org.bouncycastle.operator.DigestAlgorithmIdentifierFinder;

public class CertificateConfirmationContentBuilder
{
    private DigestAlgorithmIdentifierFinder digestAlgFinder;
    private List<CMPCertificate> acceptedCerts;
    private List<AlgorithmIdentifier> acceptedSignatureAlgorithms;
    private List<ASN1Integer> acceptedReqIds;
    
    public CertificateConfirmationContentBuilder() {
        this(new DefaultDigestAlgorithmIdentifierFinder());
    }
    
    public CertificateConfirmationContentBuilder(final DigestAlgorithmIdentifierFinder digestAlgFinder) {
        this.acceptedCerts = new ArrayList<CMPCertificate>();
        this.acceptedSignatureAlgorithms = new ArrayList<AlgorithmIdentifier>();
        this.acceptedReqIds = new ArrayList<ASN1Integer>();
        this.digestAlgFinder = digestAlgFinder;
    }
    
    public CertificateConfirmationContentBuilder addAcceptedCertificate(final X509CertificateHolder x509CertificateHolder, final BigInteger bigInteger) {
        return this.addAcceptedCertificate(x509CertificateHolder, new ASN1Integer(bigInteger));
    }
    
    public CertificateConfirmationContentBuilder addAcceptedCertificate(final X509CertificateHolder x509CertificateHolder, final ASN1Integer asn1Integer) {
        return this.addAcceptedCertificate(new CMPCertificate(x509CertificateHolder.toASN1Structure()), x509CertificateHolder.getSignatureAlgorithm(), asn1Integer);
    }
    
    public CertificateConfirmationContentBuilder addAcceptedCertificate(final CMPCertificate cmpCertificate, final AlgorithmIdentifier algorithmIdentifier, final ASN1Integer asn1Integer) {
        this.acceptedCerts.add(cmpCertificate);
        this.acceptedSignatureAlgorithms.add(algorithmIdentifier);
        this.acceptedReqIds.add(asn1Integer);
        return this;
    }
    
    public CertificateConfirmationContent build(final DigestCalculatorProvider digestCalculatorProvider) throws CMPException {
        final ASN1EncodableVector asn1EncodableVector = new ASN1EncodableVector(this.acceptedCerts.size());
        for (int i = 0; i != this.acceptedCerts.size(); ++i) {
            asn1EncodableVector.add(new CertStatus(CMPUtil.calculateCertHash(this.acceptedCerts.get(i), this.acceptedSignatureAlgorithms.get(i), digestCalculatorProvider, this.digestAlgFinder), this.acceptedReqIds.get(i)));
        }
        return new CertificateConfirmationContent(CertConfirmContent.getInstance(new DERSequence(asn1EncodableVector)), this.digestAlgFinder);
    }
}
