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
165db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root/**
175db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <a href="http://tools.ietf.org/html/rfc5652#section-10.2.4">RFC 5652</a>: IssuerAndSerialNumber object.
185db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <p>
195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <pre>
205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * IssuerAndSerialNumber ::= SEQUENCE {
215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root *     issuer Name,
225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root *     serialNumber CertificateSerialNumber
235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * }
245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root *
255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * CertificateSerialNumber ::= INTEGER  -- See RFC 5280
265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * </pre>
275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root */
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class IssuerAndSerialNumber
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    extends ASN1Object
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private X500Name    name;
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private ASN1Integer  serialNumber;
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    /**
355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * Return an IssuerAndSerialNumber object from the given object.
365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * <p>
375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * Accepted inputs:
385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * <ul>
395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * <li> null &rarr; null
405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * <li> {@link IssuerAndSerialNumber} object
415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * <li> {@link org.bouncycastle.asn1.ASN1Sequence#getInstance(java.lang.Object) ASN1Sequence} input formats with IssuerAndSerialNumber structure inside
425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * </ul>
435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     *
445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * @param obj the object we want converted.
455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * @exception IllegalArgumentException if the object cannot be converted.
465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     */
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public static IssuerAndSerialNumber getInstance(
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Object  obj)
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (obj instanceof IssuerAndSerialNumber)
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return (IssuerAndSerialNumber)obj;
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        else if (obj != null)
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new IssuerAndSerialNumber(ASN1Sequence.getInstance(obj));
57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return null;
60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    /**
63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     * @deprecated  use getInstance() method.
64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom     */
65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1Sequence    seq)
67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = X500Name.getInstance(seq.getObjectAt(0));
69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = (ASN1Integer)seq.getObjectAt(1);
70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Certificate certificate)
74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = certificate.getIssuer();
76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = certificate.getSerialNumber();
77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
795db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    /**
805db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * @deprecated use constructor taking Certificate
815db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     */
82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X509CertificateStructure certificate)
84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = certificate.getIssuer();
86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = certificate.getSerialNumber();
87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X500Name name,
91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        BigInteger  serialNumber)
92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = name;
94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = new ASN1Integer(serialNumber);
95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @deprecated use X500Name constructor
99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X509Name    name,
102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        BigInteger  serialNumber)
103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = X500Name.getInstance(name);
105e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = new ASN1Integer(serialNumber);
106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
107e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
108e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
109e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @deprecated use X500Name constructor
110e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
111e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public IssuerAndSerialNumber(
112e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        X509Name    name,
113e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1Integer  serialNumber)
114e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
115e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.name = X500Name.getInstance(name);
116e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.serialNumber = serialNumber;
117e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
118e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
119e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public X500Name getName()
120e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
121e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return name;
122e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
123e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
124e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Integer getSerialNumber()
125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return serialNumber;
127e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
128e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
129e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Primitive toASN1Primitive()
130e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
131e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1EncodableVector    v = new ASN1EncodableVector();
132e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        v.add(name);
134e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        v.add(serialNumber);
135e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
136e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return new DERSequence(v);
137e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
138e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
139