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