1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.cms;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Encodable;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence;
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject;
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.BERSequence;
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.BERTaggedObject;
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class ContentInfo
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    // BEGIN android-removed
166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    // implements CMSObjectIdentifiers
176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    // END android-removed
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private ASN1ObjectIdentifier contentType;
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ASN1Encodable        content;
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static ContentInfo getInstance(
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Object  obj)
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (obj instanceof ContentInfo)
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return (ContentInfo)obj;
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        else if (obj != null)
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return new ContentInfo(ASN1Sequence.getInstance(obj));
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return null;
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public ContentInfo(
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Sequence  seq)
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (seq.size() < 1 || seq.size() > 2)
416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            throw new IllegalArgumentException("Bad sequence size: " + seq.size());
436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        contentType = (ASN1ObjectIdentifier)seq.getObjectAt(0);
46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (seq.size() > 1)
48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            ASN1TaggedObject tagged = (ASN1TaggedObject)seq.getObjectAt(1);
506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            if (!tagged.isExplicit() || tagged.getTagNo() != 0)
516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            {
526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom                throw new IllegalArgumentException("Bad tag for 'content'");
536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            }
546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            content = tagged.getObject();
56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public ContentInfo(
606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1ObjectIdentifier contentType,
614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Encodable        content)
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.contentType = contentType;
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.content = content;
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public ASN1ObjectIdentifier getContentType()
68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return contentType;
70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Encodable getContent()
73b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return content;
75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Produce an object suitable for an ASN1OutputStream.
79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <pre>
80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * ContentInfo ::= SEQUENCE {
81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *          contentType ContentType,
82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *          content
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *          [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * </pre>
85b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1EncodableVector  v = new ASN1EncodableVector();
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        v.add(contentType);
91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (content != null)
93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            v.add(new BERTaggedObject(0, content));
95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return new BERSequence(v);
98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
100