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

package org.bouncycastle.cms.jcajce;

import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder;
import org.bouncycastle.operator.ContentVerifierProvider;
import java.security.PublicKey;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
import org.bouncycastle.operator.OperatorCreationException;
import org.bouncycastle.operator.SignatureAlgorithmIdentifierFinder;
import org.bouncycastle.cms.CMSSignatureAlgorithmNameGenerator;
import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
import org.bouncycastle.cms.DefaultCMSSignatureAlgorithmNameGenerator;
import org.bouncycastle.cms.SignerInformationVerifier;
import org.bouncycastle.cert.X509CertificateHolder;
import java.security.Provider;
import org.bouncycastle.operator.DigestCalculatorProvider;

public class JcaSimpleSignerInfoVerifierBuilder
{
    private Helper helper;
    private DigestCalculatorProvider digestCalculatorProvider;
    
    public JcaSimpleSignerInfoVerifierBuilder() {
        this.helper = new Helper();
        this.digestCalculatorProvider = null;
    }
    
    public JcaSimpleSignerInfoVerifierBuilder setProvider(final Provider provider) {
        this.helper = new ProviderHelper(provider);
        return this;
    }
    
    public JcaSimpleSignerInfoVerifierBuilder setProvider(final String s) {
        this.helper = new NamedHelper(s);
        return this;
    }
    
    public JcaSimpleSignerInfoVerifierBuilder setDigestCalculatorProvider(final DigestCalculatorProvider digestCalculatorProvider) {
        this.digestCalculatorProvider = digestCalculatorProvider;
        return this;
    }
    
    public SignerInformationVerifier build(final X509CertificateHolder x509CertificateHolder) throws OperatorCreationException, CertificateException {
        return new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(), new DefaultSignatureAlgorithmIdentifierFinder(), this.helper.createContentVerifierProvider(x509CertificateHolder), this.getDigestCalculatorProvider());
    }
    
    public SignerInformationVerifier build(final X509Certificate x509Certificate) throws OperatorCreationException {
        return new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(), new DefaultSignatureAlgorithmIdentifierFinder(), this.helper.createContentVerifierProvider(x509Certificate), this.getDigestCalculatorProvider());
    }
    
    public SignerInformationVerifier build(final PublicKey publicKey) throws OperatorCreationException {
        return new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(), new DefaultSignatureAlgorithmIdentifierFinder(), this.helper.createContentVerifierProvider(publicKey), this.getDigestCalculatorProvider());
    }
    
    private DigestCalculatorProvider getDigestCalculatorProvider() throws OperatorCreationException {
        if (this.digestCalculatorProvider != null) {
            return this.digestCalculatorProvider;
        }
        return this.helper.createDigestCalculatorProvider();
    }
    
    private static class Helper
    {
        ContentVerifierProvider createContentVerifierProvider(final PublicKey publicKey) throws OperatorCreationException {
            return new JcaContentVerifierProviderBuilder().build(publicKey);
        }
        
        ContentVerifierProvider createContentVerifierProvider(final X509Certificate x509Certificate) throws OperatorCreationException {
            return new JcaContentVerifierProviderBuilder().build(x509Certificate);
        }
        
        ContentVerifierProvider createContentVerifierProvider(final X509CertificateHolder x509CertificateHolder) throws OperatorCreationException, CertificateException {
            return new JcaContentVerifierProviderBuilder().build(x509CertificateHolder);
        }
        
        DigestCalculatorProvider createDigestCalculatorProvider() throws OperatorCreationException {
            return new JcaDigestCalculatorProviderBuilder().build();
        }
    }
    
    private static class NamedHelper extends Helper
    {
        private final String providerName;
        
        public NamedHelper(final String providerName) {
            this.providerName = providerName;
        }
        
        @Override
        ContentVerifierProvider createContentVerifierProvider(final PublicKey publicKey) throws OperatorCreationException {
            return new JcaContentVerifierProviderBuilder().setProvider(this.providerName).build(publicKey);
        }
        
        @Override
        ContentVerifierProvider createContentVerifierProvider(final X509Certificate x509Certificate) throws OperatorCreationException {
            return new JcaContentVerifierProviderBuilder().setProvider(this.providerName).build(x509Certificate);
        }
        
        @Override
        DigestCalculatorProvider createDigestCalculatorProvider() throws OperatorCreationException {
            return new JcaDigestCalculatorProviderBuilder().setProvider(this.providerName).build();
        }
        
        @Override
        ContentVerifierProvider createContentVerifierProvider(final X509CertificateHolder x509CertificateHolder) throws OperatorCreationException, CertificateException {
            return new JcaContentVerifierProviderBuilder().setProvider(this.providerName).build(x509CertificateHolder);
        }
    }
    
    private static class ProviderHelper extends Helper
    {
        private final Provider provider;
        
        public ProviderHelper(final Provider provider) {
            this.provider = provider;
        }
        
        @Override
        ContentVerifierProvider createContentVerifierProvider(final PublicKey publicKey) throws OperatorCreationException {
            return new JcaContentVerifierProviderBuilder().setProvider(this.provider).build(publicKey);
        }
        
        @Override
        ContentVerifierProvider createContentVerifierProvider(final X509Certificate x509Certificate) throws OperatorCreationException {
            return new JcaContentVerifierProviderBuilder().setProvider(this.provider).build(x509Certificate);
        }
        
        @Override
        DigestCalculatorProvider createDigestCalculatorProvider() throws OperatorCreationException {
            return new JcaDigestCalculatorProviderBuilder().setProvider(this.provider).build();
        }
        
        @Override
        ContentVerifierProvider createContentVerifierProvider(final X509CertificateHolder x509CertificateHolder) throws OperatorCreationException, CertificateException {
            return new JcaContentVerifierProviderBuilder().setProvider(this.provider).build(x509CertificateHolder);
        }
    }
}
