1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.asn1.cms;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.math.BigInteger;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector;
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Sequence;
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.DERSequence;
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name;
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.Certificate;
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.X509CertificateStructure;
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.X509Name;
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class IssuerAndSerialNumber
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    extends ASN1Object
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private X500Name    name;
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private ASN1Integer  serialNumber;
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public static IssuerAndSerialNumber getInstance(
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Object  obj)
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (obj instanceof IssuerAndSerialNumber)
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return (IssuerAndSerialNumber)obj;
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        else if (obj != null)
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new IssuerAndSerialNumber(ASN1Sequence.getInstance(obj));
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return null;
35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1Sequence    seq)
39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = X500Name.getInstance(seq.getObjectAt(0));
41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = (ASN1Integer)seq.getObjectAt(1);
42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Certificate certificate)
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = certificate.getIssuer();
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = certificate.getSerialNumber();
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X509CertificateStructure certificate)
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = certificate.getIssuer();
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = certificate.getSerialNumber();
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X500Name name,
60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        BigInteger  serialNumber)
61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = name;
63e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = new ASN1Integer(serialNumber);
64e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @deprecated use X500Name constructor
68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X509Name    name,
71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        BigInteger  serialNumber)
72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = X500Name.getInstance(name);
74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = new ASN1Integer(serialNumber);
75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @deprecated use X500Name constructor
79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
80e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
81e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X509Name    name,
82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1Integer  serialNumber)
83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = X500Name.getInstance(name);
85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = serialNumber;
86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public X500Name getName()
89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return name;
91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Integer getSerialNumber()
94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return serialNumber;
96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Primitive toASN1Primitive()
99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1EncodableVector    v = new ASN1EncodableVector();
101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        v.add(name);
103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        v.add(serialNumber);
104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
105e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return new DERSequence(v);
106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
107e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
108