Home | History | Annotate | Download | only in pkcs
      1 package org.bouncycastle.asn1.pkcs;
      2 
      3 import java.util.Enumeration;
      4 
      5 import org.bouncycastle.asn1.ASN1Encodable;
      6 import org.bouncycastle.asn1.ASN1EncodableVector;
      7 import org.bouncycastle.asn1.ASN1OctetString;
      8 import org.bouncycastle.asn1.ASN1Sequence;
      9 import org.bouncycastle.asn1.DERObject;
     10 import org.bouncycastle.asn1.DEROctetString;
     11 import org.bouncycastle.asn1.DERSequence;
     12 import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
     13 
     14 public class EncryptedPrivateKeyInfo
     15     extends ASN1Encodable
     16 {
     17     private AlgorithmIdentifier algId;
     18     private ASN1OctetString     data;
     19 
     20     public EncryptedPrivateKeyInfo(
     21         ASN1Sequence  seq)
     22     {
     23         Enumeration e = seq.getObjects();
     24 
     25         algId = AlgorithmIdentifier.getInstance(e.nextElement());
     26         data = (ASN1OctetString)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         // BEGIN android-changed
     41         //     fix copy and paste error in instanceof call
     42         if (obj instanceof EncryptedPrivateKeyInfo)
     43         {
     44             return (EncryptedPrivateKeyInfo)obj;
     45         }
     46         // END android-changed
     47         else if (obj instanceof ASN1Sequence)
     48         {
     49             return new EncryptedPrivateKeyInfo((ASN1Sequence)obj);
     50         }
     51 
     52         throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
     53     }
     54 
     55     public AlgorithmIdentifier getEncryptionAlgorithm()
     56     {
     57         return algId;
     58     }
     59 
     60     public byte[] getEncryptedData()
     61     {
     62         return data.getOctets();
     63     }
     64 
     65     /**
     66      * Produce an object suitable for an ASN1OutputStream.
     67      * <pre>
     68      * EncryptedPrivateKeyInfo ::= SEQUENCE {
     69      *      encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
     70      *      encryptedData EncryptedData
     71      * }
     72      *
     73      * EncryptedData ::= OCTET STRING
     74      *
     75      * KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
     76      *          ... -- For local profiles
     77      * }
     78      * </pre>
     79      */
     80     public DERObject toASN1Object()
     81     {
     82         ASN1EncodableVector v = new ASN1EncodableVector();
     83 
     84         v.add(algId);
     85         v.add(data);
     86 
     87         return new DERSequence(v);
     88     }
     89 }
     90