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