1package org.bouncycastle.asn1.pkcs;
2
3import java.util.Enumeration;
4
5import org.bouncycastle.asn1.ASN1EncodableVector;
6import org.bouncycastle.asn1.ASN1Object;
7import org.bouncycastle.asn1.ASN1OctetString;
8import org.bouncycastle.asn1.ASN1Primitive;
9import org.bouncycastle.asn1.ASN1Sequence;
10import org.bouncycastle.asn1.DEROctetString;
11import org.bouncycastle.asn1.DERSequence;
12import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
13
14public class EncryptedPrivateKeyInfo
15    extends ASN1Object
16{
17    private AlgorithmIdentifier algId;
18    private ASN1OctetString     data;
19
20    private EncryptedPrivateKeyInfo(
21        ASN1Sequence  seq)
22    {
23        Enumeration e = seq.getObjects();
24
25        algId = AlgorithmIdentifier.getInstance(e.nextElement());
26        data = ASN1OctetString.getInstance(e.nextElement());
27    }
28
29    public EncryptedPrivateKeyInfo(
30        AlgorithmIdentifier algId,
31        byte[]              encoding)
32    {
33        this.algId = algId;
34        this.data = new DEROctetString(encoding);
35    }
36
37    public static EncryptedPrivateKeyInfo getInstance(
38        Object  obj)
39    {
40        if (obj instanceof EncryptedPrivateKeyInfo)
41        {
42            return (EncryptedPrivateKeyInfo)obj;
43        }
44        else if (obj != null)
45        {
46            return new EncryptedPrivateKeyInfo(ASN1Sequence.getInstance(obj));
47        }
48
49        return null;
50    }
51
52    public AlgorithmIdentifier getEncryptionAlgorithm()
53    {
54        return algId;
55    }
56
57    public byte[] getEncryptedData()
58    {
59        return data.getOctets();
60    }
61
62    /**
63     * Produce an object suitable for an ASN1OutputStream.
64     * <pre>
65     * EncryptedPrivateKeyInfo ::= SEQUENCE {
66     *      encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
67     *      encryptedData EncryptedData
68     * }
69     *
70     * EncryptedData ::= OCTET STRING
71     *
72     * KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
73     *          ... -- For local profiles
74     * }
75     * </pre>
76     */
77    public ASN1Primitive toASN1Primitive()
78    {
79        ASN1EncodableVector v = new ASN1EncodableVector();
80
81        v.add(algId);
82        v.add(data);
83
84        return new DERSequence(v);
85    }
86}
87