1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer;
44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence;
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERBitString;
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name;
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/**
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * an X509Certificate structure.
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * <pre>
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam *  Certificate ::= SEQUENCE {
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam *      tbsCertificate          TBSCertificate,
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam *      signatureAlgorithm      AlgorithmIdentifier,
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam *      signature               BIT STRING
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam *  }
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * </pre>
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use org.bouncycastle.asn1.x509.Certificate
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class X509CertificateStructure
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    implements X509ObjectIdentifiers, PKCSObjectIdentifiers
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    ASN1Sequence  seq;
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    TBSCertificateStructure tbsCert;
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    AlgorithmIdentifier     sigAlgId;
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    DERBitString            sig;
31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static X509CertificateStructure getInstance(
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1TaggedObject obj,
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        boolean          explicit)
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return getInstance(ASN1Sequence.getInstance(obj, explicit));
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static X509CertificateStructure getInstance(
40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Object  obj)
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (obj instanceof X509CertificateStructure)
43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return (X509CertificateStructure)obj;
45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        else if (obj != null)
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return new X509CertificateStructure(ASN1Sequence.getInstance(obj));
49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return null;
52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509CertificateStructure(
55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Sequence  seq)
56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.seq = seq;
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        //
60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        // correct x509 certficate
61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        //
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (seq.size() == 3)
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            tbsCert = TBSCertificateStructure.getInstance(seq.getObjectAt(0));
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            sig = DERBitString.getInstance(seq.getObjectAt(2));
68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        else
70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            throw new IllegalArgumentException("sequence wrong size for a certificate");
72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public TBSCertificateStructure getTBSCertificate()
76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert;
78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public int getVersion()
81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert.getVersion();
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Integer getSerialNumber()
86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert.getSerialNumber();
88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public X500Name getIssuer()
91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert.getIssuer();
93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Time getStartDate()
96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert.getStartDate();
98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Time getEndDate()
101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert.getEndDate();
103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
1054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public X500Name getSubject()
106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert.getSubject();
108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public SubjectPublicKeyInfo getSubjectPublicKeyInfo()
111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return tbsCert.getSubjectPublicKeyInfo();
113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
115b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public AlgorithmIdentifier getSignatureAlgorithm()
116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return sigAlgId;
118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public DERBitString getSignature()
121b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return sig;
123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
1254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
127b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return seq;
128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
130