EncryptedData.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
1package org.bouncycastle.asn1.pkcs;
2
3import org.bouncycastle.asn1.ASN1Encodable;
4import org.bouncycastle.asn1.ASN1EncodableVector;
5import org.bouncycastle.asn1.ASN1Integer;
6import org.bouncycastle.asn1.ASN1Object;
7import org.bouncycastle.asn1.ASN1ObjectIdentifier;
8import org.bouncycastle.asn1.ASN1OctetString;
9import org.bouncycastle.asn1.ASN1Primitive;
10import org.bouncycastle.asn1.ASN1Sequence;
11import org.bouncycastle.asn1.ASN1TaggedObject;
12import org.bouncycastle.asn1.BERSequence;
13import org.bouncycastle.asn1.BERTaggedObject;
14import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
15
16/**
17 * The EncryptedData object.
18 * <pre>
19 *      EncryptedData ::= SEQUENCE {
20 *           version Version,
21 *           encryptedContentInfo EncryptedContentInfo
22 *      }
23 *
24 *
25 *      EncryptedContentInfo ::= SEQUENCE {
26 *          contentType ContentType,
27 *          contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
28 *          encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
29 *    }
30 *
31 *    EncryptedContent ::= OCTET STRING
32 * </pre>
33 */
34public class EncryptedData
35    extends ASN1Object
36{
37    ASN1Sequence                data;
38    ASN1ObjectIdentifier bagId;
39    ASN1Primitive bagValue;
40
41    public static EncryptedData getInstance(
42         Object  obj)
43    {
44         if (obj instanceof EncryptedData)
45         {
46             return (EncryptedData)obj;
47         }
48
49         if (obj != null)
50         {
51             return new EncryptedData(ASN1Sequence.getInstance(obj));
52         }
53
54         return null;
55    }
56
57    private EncryptedData(
58        ASN1Sequence seq)
59    {
60        int version = ((ASN1Integer)seq.getObjectAt(0)).getValue().intValue();
61
62        if (version != 0)
63        {
64            throw new IllegalArgumentException("sequence not version 0");
65        }
66
67        this.data = ASN1Sequence.getInstance(seq.getObjectAt(1));
68    }
69
70    public EncryptedData(
71        ASN1ObjectIdentifier contentType,
72        AlgorithmIdentifier     encryptionAlgorithm,
73        ASN1Encodable content)
74    {
75        ASN1EncodableVector v = new ASN1EncodableVector();
76
77        v.add(contentType);
78        v.add(encryptionAlgorithm.toASN1Primitive());
79        v.add(new BERTaggedObject(false, 0, content));
80
81        data = new BERSequence(v);
82    }
83
84    public ASN1ObjectIdentifier getContentType()
85    {
86        return ASN1ObjectIdentifier.getInstance(data.getObjectAt(0));
87    }
88
89    public AlgorithmIdentifier getEncryptionAlgorithm()
90    {
91        return AlgorithmIdentifier.getInstance(data.getObjectAt(1));
92    }
93
94    public ASN1OctetString getContent()
95    {
96        if (data.size() == 3)
97        {
98            ASN1TaggedObject o = ASN1TaggedObject.getInstance(data.getObjectAt(2));
99
100            return ASN1OctetString.getInstance(o, false);
101        }
102
103        return null;
104    }
105
106    public ASN1Primitive toASN1Primitive()
107    {
108        ASN1EncodableVector v = new ASN1EncodableVector();
109
110        v.add(new ASN1Integer(0));
111        v.add(data);
112
113        return new BERSequence(v);
114    }
115}
116