001package org.apache.commons.ssl.org.bouncycastle.asn1.x509;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
008import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString;
009import org.apache.commons.ssl.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
010import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name;
011
012/**
013 * an X509Certificate structure.
014 * <pre>
015 *  Certificate ::= SEQUENCE {
016 *      tbsCertificate          TBSCertificate,
017 *      signatureAlgorithm      AlgorithmIdentifier,
018 *      signature               BIT STRING
019 *  }
020 * </pre>
021 * @deprecated use org.bouncycastle.asn1.x509.Certificate
022 */
023public class X509CertificateStructure
024    extends ASN1Object
025    implements X509ObjectIdentifiers, PKCSObjectIdentifiers
026{
027    ASN1Sequence  seq;
028    TBSCertificateStructure tbsCert;
029    AlgorithmIdentifier     sigAlgId;
030    DERBitString            sig;
031
032    public static X509CertificateStructure getInstance(
033        ASN1TaggedObject obj,
034        boolean          explicit)
035    {
036        return getInstance(ASN1Sequence.getInstance(obj, explicit));
037    }
038
039    public static X509CertificateStructure getInstance(
040        Object  obj)
041    {
042        if (obj instanceof X509CertificateStructure)
043        {
044            return (X509CertificateStructure)obj;
045        }
046        else if (obj != null)
047        {
048            return new X509CertificateStructure(ASN1Sequence.getInstance(obj));
049        }
050
051        return null;
052    }
053
054    public X509CertificateStructure(
055        ASN1Sequence  seq)
056    {
057        this.seq = seq;
058
059        //
060        // correct x509 certficate
061        //
062        if (seq.size() == 3)
063        {
064            tbsCert = TBSCertificateStructure.getInstance(seq.getObjectAt(0));
065            sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
066
067            sig = DERBitString.getInstance(seq.getObjectAt(2));
068        }
069        else
070        {
071            throw new IllegalArgumentException("sequence wrong size for a certificate");
072        }
073    }
074
075    public TBSCertificateStructure getTBSCertificate()
076    {
077        return tbsCert;
078    }
079
080    public int getVersion()
081    {
082        return tbsCert.getVersion();
083    }
084
085    public ASN1Integer getSerialNumber()
086    {
087        return tbsCert.getSerialNumber();
088    }
089
090    public X500Name getIssuer()
091    {
092        return tbsCert.getIssuer();
093    }
094
095    public Time getStartDate()
096    {
097        return tbsCert.getStartDate();
098    }
099
100    public Time getEndDate()
101    {
102        return tbsCert.getEndDate();
103    }
104
105    public X500Name getSubject()
106    {
107        return tbsCert.getSubject();
108    }
109
110    public SubjectPublicKeyInfo getSubjectPublicKeyInfo()
111    {
112        return tbsCert.getSubjectPublicKeyInfo();
113    }
114
115    public AlgorithmIdentifier getSignatureAlgorithm()
116    {
117        return sigAlgId;
118    }
119
120    public DERBitString getSignature()
121    {
122        return sig;
123    }
124
125    public ASN1Primitive toASN1Primitive()
126    {
127        return seq;
128    }
129}