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

package org.bouncycastle.asn1.ocsp;

import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.ASN1Object;

public class CertID extends ASN1Object
{
    AlgorithmIdentifier hashAlgorithm;
    ASN1OctetString issuerNameHash;
    ASN1OctetString issuerKeyHash;
    ASN1Integer serialNumber;
    
    public CertID(final AlgorithmIdentifier hashAlgorithm, final ASN1OctetString issuerNameHash, final ASN1OctetString issuerKeyHash, final ASN1Integer serialNumber) {
        this.hashAlgorithm = hashAlgorithm;
        this.issuerNameHash = issuerNameHash;
        this.issuerKeyHash = issuerKeyHash;
        this.serialNumber = serialNumber;
    }
    
    private CertID(final ASN1Sequence asn1Sequence) {
        this.hashAlgorithm = AlgorithmIdentifier.getInstance(asn1Sequence.getObjectAt(0));
        this.issuerNameHash = (ASN1OctetString)asn1Sequence.getObjectAt(1);
        this.issuerKeyHash = (ASN1OctetString)asn1Sequence.getObjectAt(2);
        this.serialNumber = (ASN1Integer)asn1Sequence.getObjectAt(3);
    }
    
    public static CertID getInstance(final ASN1TaggedObject asn1TaggedObject, final boolean b) {
        return getInstance(ASN1Sequence.getInstance(asn1TaggedObject, b));
    }
    
    public static CertID getInstance(final Object o) {
        if (o instanceof CertID) {
            return (CertID)o;
        }
        if (o != null) {
            return new CertID(ASN1Sequence.getInstance(o));
        }
        return null;
    }
    
    public AlgorithmIdentifier getHashAlgorithm() {
        return this.hashAlgorithm;
    }
    
    public ASN1OctetString getIssuerNameHash() {
        return this.issuerNameHash;
    }
    
    public ASN1OctetString getIssuerKeyHash() {
        return this.issuerKeyHash;
    }
    
    public ASN1Integer getSerialNumber() {
        return this.serialNumber;
    }
    
    @Override
    public boolean equals(final Object o) {
        if (this == o) {
            return true;
        }
        if (o instanceof ASN1Encodable) {
            try {
                final CertID instance = getInstance(o);
                return this.hashAlgorithm.getAlgorithm().equals(instance.hashAlgorithm.getAlgorithm()) && this.isEqual(this.hashAlgorithm.getParameters(), instance.hashAlgorithm.getParameters()) && this.issuerNameHash.equals(instance.issuerNameHash) && this.issuerKeyHash.equals(instance.issuerKeyHash) && this.serialNumber.equals(instance.serialNumber);
            }
            catch (final Exception ex) {
                return false;
            }
        }
        return false;
    }
    
    @Override
    public int hashCode() {
        final ASN1Encodable parameters = this.hashAlgorithm.getParameters();
        return ((parameters == null || DERNull.INSTANCE.equals(parameters)) ? 0 : parameters.hashCode()) + 7 * (this.hashAlgorithm.getAlgorithm().hashCode() + 7 * (this.issuerNameHash.hashCode() + 7 * (this.issuerKeyHash.hashCode() + 7 * this.serialNumber.hashCode())));
    }
    
    private boolean isEqual(final ASN1Encodable asn1Encodable, final ASN1Encodable obj) {
        if (asn1Encodable == obj) {
            return true;
        }
        if (asn1Encodable == null) {
            return DERNull.INSTANCE.equals(obj);
        }
        return (DERNull.INSTANCE.equals(asn1Encodable) && obj == null) || asn1Encodable.equals(obj);
    }
    
    @Override
    public ASN1Primitive toASN1Primitive() {
        final ASN1EncodableVector asn1EncodableVector = new ASN1EncodableVector(4);
        asn1EncodableVector.add(this.hashAlgorithm);
        asn1EncodableVector.add(this.issuerNameHash);
        asn1EncodableVector.add(this.issuerKeyHash);
        asn1EncodableVector.add(this.serialNumber);
        return new DERSequence(asn1EncodableVector);
    }
}
