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

package org.bouncycastle.asn1.cmp;

import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.DEROctetString;
import java.math.BigInteger;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Util;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Object;

public class CertStatus extends ASN1Object
{
    private final ASN1OctetString certHash;
    private final ASN1Integer certReqId;
    private final PKIStatusInfo statusInfo;
    private final AlgorithmIdentifier hashAlg;
    
    private CertStatus(final ASN1Sequence asn1Sequence) {
        this.certHash = ASN1OctetString.getInstance(asn1Sequence.getObjectAt(0));
        this.certReqId = ASN1Integer.getInstance(asn1Sequence.getObjectAt(1));
        PKIStatusInfo instance = null;
        AlgorithmIdentifier instance2 = null;
        if (asn1Sequence.size() > 2) {
            for (int i = 2; i < asn1Sequence.size(); ++i) {
                final ASN1Primitive asn1Primitive = asn1Sequence.getObjectAt(i).toASN1Primitive();
                if (asn1Primitive instanceof ASN1Sequence) {
                    instance = PKIStatusInfo.getInstance(asn1Primitive);
                }
                if (asn1Primitive instanceof ASN1TaggedObject) {
                    final ASN1TaggedObject asn1TaggedObject = (ASN1TaggedObject)asn1Primitive;
                    if (!asn1TaggedObject.hasContextTag(0)) {
                        throw new IllegalArgumentException("unknown tag " + ASN1Util.getTagText(asn1TaggedObject));
                    }
                    instance2 = AlgorithmIdentifier.getInstance(asn1TaggedObject, true);
                }
            }
        }
        this.statusInfo = instance;
        this.hashAlg = instance2;
    }
    
    public CertStatus(final byte[] array, final BigInteger bigInteger) {
        this(array, new ASN1Integer(bigInteger));
    }
    
    public CertStatus(final byte[] array, final ASN1Integer certReqId) {
        this.certHash = new DEROctetString(array);
        this.certReqId = certReqId;
        this.statusInfo = null;
        this.hashAlg = null;
    }
    
    public CertStatus(final byte[] array, final BigInteger bigInteger, final PKIStatusInfo statusInfo) {
        this.certHash = new DEROctetString(array);
        this.certReqId = new ASN1Integer(bigInteger);
        this.statusInfo = statusInfo;
        this.hashAlg = null;
    }
    
    public CertStatus(final byte[] array, final BigInteger bigInteger, final PKIStatusInfo statusInfo, final AlgorithmIdentifier hashAlg) {
        this.certHash = new DEROctetString(array);
        this.certReqId = new ASN1Integer(bigInteger);
        this.statusInfo = statusInfo;
        this.hashAlg = hashAlg;
    }
    
    public static CertStatus getInstance(final Object o) {
        if (o instanceof CertStatus) {
            return (CertStatus)o;
        }
        if (o != null) {
            return new CertStatus(ASN1Sequence.getInstance(o));
        }
        return null;
    }
    
    public ASN1OctetString getCertHash() {
        return this.certHash;
    }
    
    public ASN1Integer getCertReqId() {
        return this.certReqId;
    }
    
    public PKIStatusInfo getStatusInfo() {
        return this.statusInfo;
    }
    
    public AlgorithmIdentifier getHashAlg() {
        return this.hashAlg;
    }
    
    @Override
    public ASN1Primitive toASN1Primitive() {
        final ASN1EncodableVector asn1EncodableVector = new ASN1EncodableVector(4);
        asn1EncodableVector.add(this.certHash);
        asn1EncodableVector.add(this.certReqId);
        if (this.statusInfo != null) {
            asn1EncodableVector.add(this.statusInfo);
        }
        if (this.hashAlg != null) {
            asn1EncodableVector.add(new DERTaggedObject(true, 0, this.hashAlg));
        }
        return new DERSequence(asn1EncodableVector);
    }
}
