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