1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.asn1.cms;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Choice;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Encodable;
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1OctetString;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject;
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.DERTaggedObject;
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class SignerIdentifier
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    extends ASN1Object
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    implements ASN1Choice
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private ASN1Encodable id;
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerIdentifier(
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        IssuerAndSerialNumber id)
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.id = id;
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerIdentifier(
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1OctetString id)
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.id = new DERTaggedObject(false, 0, id);
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerIdentifier(
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ASN1Primitive id)
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.id = id;
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * return a SignerIdentifier object from the given object.
37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *
38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param o the object we want converted.
39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @exception IllegalArgumentException if the object cannot be converted.
40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public static SignerIdentifier getInstance(
42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Object o)
43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (o == null || o instanceof SignerIdentifier)
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return (SignerIdentifier)o;
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (o instanceof IssuerAndSerialNumber)
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new SignerIdentifier((IssuerAndSerialNumber)o);
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (o instanceof ASN1OctetString)
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new SignerIdentifier((ASN1OctetString)o);
57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (o instanceof ASN1Primitive)
60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new SignerIdentifier((ASN1Primitive)o);
62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
63e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
64e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        throw new IllegalArgumentException(
65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom             "Illegal object in SignerIdentifier: " + o.getClass().getName());
66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public boolean isTagged()
69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return (id instanceof ASN1TaggedObject);
71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Encodable getId()
74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (id instanceof ASN1TaggedObject)
76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return ASN1OctetString.getInstance((ASN1TaggedObject)id, false);
78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
80e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return id;
81e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * Produce an object suitable for an ASN1OutputStream.
85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * <pre>
86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * SignerIdentifier ::= CHOICE {
87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *     issuerAndSerialNumber IssuerAndSerialNumber,
88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *     subjectKeyIdentifier [0] SubjectKeyIdentifier
89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * }
90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *
91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * SubjectKeyIdentifier ::= OCTET STRING
92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * </pre>
93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ASN1Primitive toASN1Primitive()
95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return id.toASN1Primitive();
97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
99