001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier; 013 014public class EncryptedPrivateKeyInfo 015 extends ASN1Object 016{ 017 private AlgorithmIdentifier algId; 018 private ASN1OctetString data; 019 020 private EncryptedPrivateKeyInfo( 021 ASN1Sequence seq) 022 { 023 Enumeration e = seq.getObjects(); 024 025 algId = AlgorithmIdentifier.getInstance(e.nextElement()); 026 data = ASN1OctetString.getInstance(e.nextElement()); 027 } 028 029 public EncryptedPrivateKeyInfo( 030 AlgorithmIdentifier algId, 031 byte[] encoding) 032 { 033 this.algId = algId; 034 this.data = new DEROctetString(encoding); 035 } 036 037 public static EncryptedPrivateKeyInfo getInstance( 038 Object obj) 039 { 040 if (obj instanceof EncryptedPrivateKeyInfo) 041 { 042 return (EncryptedPrivateKeyInfo)obj; 043 } 044 else if (obj != null) 045 { 046 return new EncryptedPrivateKeyInfo(ASN1Sequence.getInstance(obj)); 047 } 048 049 return null; 050 } 051 052 public AlgorithmIdentifier getEncryptionAlgorithm() 053 { 054 return algId; 055 } 056 057 public byte[] getEncryptedData() 058 { 059 return data.getOctets(); 060 } 061 062 /** 063 * Produce an object suitable for an ASN1OutputStream. 064 * <pre> 065 * EncryptedPrivateKeyInfo ::= SEQUENCE { 066 * encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}}, 067 * encryptedData EncryptedData 068 * } 069 * 070 * EncryptedData ::= OCTET STRING 071 * 072 * KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= { 073 * ... -- For local profiles 074 * } 075 * </pre> 076 */ 077 public ASN1Primitive toASN1Primitive() 078 { 079 ASN1EncodableVector v = new ASN1EncodableVector(); 080 081 v.add(algId); 082 v.add(data); 083 084 return new DERSequence(v); 085 } 086}