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

package org.bouncycastle.tsp;

import org.bouncycastle.asn1.tsp.TimeStampReq;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.tsp.MessageImprint;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import java.math.BigInteger;
import java.io.IOException;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Boolean;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.operator.DigestAlgorithmIdentifierFinder;
import org.bouncycastle.asn1.x509.ExtensionsGenerator;
import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder;

public class TimeStampRequestGenerator
{
    private static final DefaultDigestAlgorithmIdentifierFinder DEFAULT_DIGEST_ALG_FINDER;
    private final ExtensionsGenerator extGenerator;
    private final DigestAlgorithmIdentifierFinder digestAlgFinder;
    private ASN1ObjectIdentifier reqPolicy;
    private ASN1Boolean certReq;
    
    public TimeStampRequestGenerator() {
        this(TimeStampRequestGenerator.DEFAULT_DIGEST_ALG_FINDER);
    }
    
    public TimeStampRequestGenerator(final DigestAlgorithmIdentifierFinder digestAlgFinder) {
        this.extGenerator = new ExtensionsGenerator();
        if (digestAlgFinder == null) {
            throw new NullPointerException("'digestAlgFinder' cannot be null");
        }
        this.digestAlgFinder = digestAlgFinder;
    }
    
    public void setReqPolicy(final ASN1ObjectIdentifier reqPolicy) {
        this.reqPolicy = reqPolicy;
    }
    
    @Deprecated
    public void setReqPolicy(final String s) {
        this.setReqPolicy(new ASN1ObjectIdentifier(s));
    }
    
    public void setCertReq(final ASN1Boolean certReq) {
        this.certReq = certReq;
    }
    
    public void setCertReq(final boolean b) {
        this.setCertReq(ASN1Boolean.getInstance(b));
    }
    
    @Deprecated
    public void addExtension(final String s, final boolean b, final ASN1Encodable asn1Encodable) throws IOException {
        this.addExtension(new ASN1ObjectIdentifier(s), b, asn1Encodable);
    }
    
    @Deprecated
    public void addExtension(final String s, final boolean b, final byte[] array) {
        this.addExtension(new ASN1ObjectIdentifier(s), b, array);
    }
    
    public void addExtension(final ASN1ObjectIdentifier asn1ObjectIdentifier, final boolean b, final ASN1Encodable asn1Encodable) throws TSPIOException {
        TSPUtil.addExtension(this.extGenerator, asn1ObjectIdentifier, b, asn1Encodable);
    }
    
    public void addExtension(final ASN1ObjectIdentifier asn1ObjectIdentifier, final boolean b, final byte[] array) {
        this.extGenerator.addExtension(asn1ObjectIdentifier, b, array);
    }
    
    @Deprecated
    public TimeStampRequest generate(final String s, final byte[] array) {
        return this.generate(s, array, null);
    }
    
    @Deprecated
    public TimeStampRequest generate(final String s, final byte[] array, final BigInteger bigInteger) {
        if (s == null) {
            throw new NullPointerException("'digestAlgorithmOID' cannot be null");
        }
        return this.generate(new ASN1ObjectIdentifier(s), array, bigInteger);
    }
    
    public TimeStampRequest generate(final ASN1ObjectIdentifier asn1ObjectIdentifier, final byte[] array) {
        return this.generate(asn1ObjectIdentifier, array, null);
    }
    
    public TimeStampRequest generate(final ASN1ObjectIdentifier asn1ObjectIdentifier, final byte[] array, final BigInteger bigInteger) {
        return this.generate(this.digestAlgFinder.find(asn1ObjectIdentifier), array, bigInteger);
    }
    
    public TimeStampRequest generate(final AlgorithmIdentifier algorithmIdentifier, final byte[] array) {
        return this.generate(algorithmIdentifier, array, null);
    }
    
    public TimeStampRequest generate(final AlgorithmIdentifier algorithmIdentifier, final byte[] array, final BigInteger bigInteger) {
        if (algorithmIdentifier == null) {
            throw new NullPointerException("'digestAlgorithmID' cannot be null");
        }
        return new TimeStampRequest(new TimeStampReq(new MessageImprint(algorithmIdentifier, array), this.reqPolicy, (bigInteger == null) ? null : new ASN1Integer(bigInteger), this.certReq, this.extGenerator.isEmpty() ? null : this.extGenerator.generate()));
    }
    
    static {
        DEFAULT_DIGEST_ALG_FINDER = new DefaultDigestAlgorithmIdentifierFinder();
    }
}
