1package org.bouncycastle.asn1.pkcs; 2 3import org.bouncycastle.asn1.ASN1Encodable; 4import org.bouncycastle.asn1.ASN1EncodableVector; 5import org.bouncycastle.asn1.ASN1OctetString; 6import org.bouncycastle.asn1.ASN1Sequence; 7import org.bouncycastle.asn1.BERSequence; 8import org.bouncycastle.asn1.BERTaggedObject; 9import org.bouncycastle.asn1.DEREncodable; 10import org.bouncycastle.asn1.DERInteger; 11import org.bouncycastle.asn1.DERObject; 12import org.bouncycastle.asn1.DERObjectIdentifier; 13import org.bouncycastle.asn1.DERTaggedObject; 14import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 15 16/** 17 * The EncryptedData object. 18 * <pre> 19 * EncryptedData ::= SEQUENCE { 20 * version Version, 21 * encryptedContentInfo EncryptedContentInfo 22 * } 23 * 24 * 25 * EncryptedContentInfo ::= SEQUENCE { 26 * contentType ContentType, 27 * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, 28 * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL 29 * } 30 * 31 * EncryptedContent ::= OCTET STRING 32 * </pre> 33 */ 34public class EncryptedData 35 extends ASN1Encodable 36{ 37 ASN1Sequence data; 38 DERObjectIdentifier bagId; 39 DERObject bagValue; 40 41 public static EncryptedData getInstance( 42 Object obj) 43 { 44 if (obj instanceof EncryptedData) 45 { 46 return (EncryptedData)obj; 47 } 48 else if (obj instanceof ASN1Sequence) 49 { 50 return new EncryptedData((ASN1Sequence)obj); 51 } 52 53 throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); 54 } 55 56 public EncryptedData( 57 ASN1Sequence seq) 58 { 59 int version = ((DERInteger)seq.getObjectAt(0)).getValue().intValue(); 60 61 if (version != 0) 62 { 63 throw new IllegalArgumentException("sequence not version 0"); 64 } 65 66 this.data = (ASN1Sequence)seq.getObjectAt(1); 67 } 68 69 public EncryptedData( 70 DERObjectIdentifier contentType, 71 AlgorithmIdentifier encryptionAlgorithm, 72 DEREncodable content) 73 { 74 ASN1EncodableVector v = new ASN1EncodableVector(); 75 76 v.add(contentType); 77 v.add(encryptionAlgorithm.getDERObject()); 78 v.add(new BERTaggedObject(false, 0, content)); 79 80 data = new BERSequence(v); 81 } 82 83 public DERObjectIdentifier getContentType() 84 { 85 return (DERObjectIdentifier)data.getObjectAt(0); 86 } 87 88 public AlgorithmIdentifier getEncryptionAlgorithm() 89 { 90 return AlgorithmIdentifier.getInstance(data.getObjectAt(1)); 91 } 92 93 public ASN1OctetString getContent() 94 { 95 if (data.size() == 3) 96 { 97 DERTaggedObject o = (DERTaggedObject)data.getObjectAt(2); 98 99 return ASN1OctetString.getInstance(o, false); 100 } 101 102 return null; 103 } 104 105 public DERObject toASN1Object() 106 { 107 ASN1EncodableVector v = new ASN1EncodableVector(); 108 109 v.add(new DERInteger(0)); 110 v.add(data); 111 112 return new BERSequence(v); 113 } 114} 115