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