1package org.bouncycastle.asn1.pkcs; 2 3import org.bouncycastle.asn1.ASN1Encodable; 4import org.bouncycastle.asn1.ASN1EncodableVector; 5import org.bouncycastle.asn1.ASN1Integer; 6import org.bouncycastle.asn1.ASN1Object; 7import org.bouncycastle.asn1.ASN1ObjectIdentifier; 8import org.bouncycastle.asn1.ASN1OctetString; 9import org.bouncycastle.asn1.ASN1Primitive; 10import org.bouncycastle.asn1.ASN1Sequence; 11import org.bouncycastle.asn1.ASN1TaggedObject; 12import org.bouncycastle.asn1.BERSequence; 13import org.bouncycastle.asn1.BERTaggedObject; 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 ASN1Object 36{ 37 ASN1Sequence data; 38 ASN1ObjectIdentifier bagId; 39 ASN1Primitive bagValue; 40 41 public static EncryptedData getInstance( 42 Object obj) 43 { 44 if (obj instanceof EncryptedData) 45 { 46 return (EncryptedData)obj; 47 } 48 49 if (obj != null) 50 { 51 return new EncryptedData(ASN1Sequence.getInstance(obj)); 52 } 53 54 return null; 55 } 56 57 private EncryptedData( 58 ASN1Sequence seq) 59 { 60 int version = ((ASN1Integer)seq.getObjectAt(0)).getValue().intValue(); 61 62 if (version != 0) 63 { 64 throw new IllegalArgumentException("sequence not version 0"); 65 } 66 67 this.data = ASN1Sequence.getInstance(seq.getObjectAt(1)); 68 } 69 70 public EncryptedData( 71 ASN1ObjectIdentifier contentType, 72 AlgorithmIdentifier encryptionAlgorithm, 73 ASN1Encodable content) 74 { 75 ASN1EncodableVector v = new ASN1EncodableVector(); 76 77 v.add(contentType); 78 v.add(encryptionAlgorithm.toASN1Primitive()); 79 v.add(new BERTaggedObject(false, 0, content)); 80 81 data = new BERSequence(v); 82 } 83 84 public ASN1ObjectIdentifier getContentType() 85 { 86 return ASN1ObjectIdentifier.getInstance(data.getObjectAt(0)); 87 } 88 89 public AlgorithmIdentifier getEncryptionAlgorithm() 90 { 91 return AlgorithmIdentifier.getInstance(data.getObjectAt(1)); 92 } 93 94 public ASN1OctetString getContent() 95 { 96 if (data.size() == 3) 97 { 98 ASN1TaggedObject o = ASN1TaggedObject.getInstance(data.getObjectAt(2)); 99 100 return ASN1OctetString.getInstance(o, false); 101 } 102 103 return null; 104 } 105 106 public ASN1Primitive toASN1Primitive() 107 { 108 ASN1EncodableVector v = new ASN1EncodableVector(); 109 110 v.add(new ASN1Integer(0)); 111 v.add(data); 112 113 return new BERSequence(v); 114 } 115} 116