001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 012import org.apache.commons.ssl.org.bouncycastle.asn1.BERSequence; 013import org.apache.commons.ssl.org.bouncycastle.asn1.BERTaggedObject; 014import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier; 015 016/** 017 * The EncryptedData object. 018 * <pre> 019 * EncryptedData ::= SEQUENCE { 020 * version Version, 021 * encryptedContentInfo EncryptedContentInfo 022 * } 023 * 024 * 025 * EncryptedContentInfo ::= SEQUENCE { 026 * contentType ContentType, 027 * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, 028 * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL 029 * } 030 * 031 * EncryptedContent ::= OCTET STRING 032 * </pre> 033 */ 034public class EncryptedData 035 extends ASN1Object 036{ 037 ASN1Sequence data; 038 ASN1ObjectIdentifier bagId; 039 ASN1Primitive bagValue; 040 041 public static EncryptedData getInstance( 042 Object obj) 043 { 044 if (obj instanceof EncryptedData) 045 { 046 return (EncryptedData)obj; 047 } 048 049 if (obj != null) 050 { 051 return new EncryptedData(ASN1Sequence.getInstance(obj)); 052 } 053 054 return null; 055 } 056 057 private EncryptedData( 058 ASN1Sequence seq) 059 { 060 int version = ((ASN1Integer)seq.getObjectAt(0)).getValue().intValue(); 061 062 if (version != 0) 063 { 064 throw new IllegalArgumentException("sequence not version 0"); 065 } 066 067 this.data = ASN1Sequence.getInstance(seq.getObjectAt(1)); 068 } 069 070 public EncryptedData( 071 ASN1ObjectIdentifier contentType, 072 AlgorithmIdentifier encryptionAlgorithm, 073 ASN1Encodable content) 074 { 075 ASN1EncodableVector v = new ASN1EncodableVector(); 076 077 v.add(contentType); 078 v.add(encryptionAlgorithm.toASN1Primitive()); 079 v.add(new BERTaggedObject(false, 0, content)); 080 081 data = new BERSequence(v); 082 } 083 084 public ASN1ObjectIdentifier getContentType() 085 { 086 return ASN1ObjectIdentifier.getInstance(data.getObjectAt(0)); 087 } 088 089 public AlgorithmIdentifier getEncryptionAlgorithm() 090 { 091 return AlgorithmIdentifier.getInstance(data.getObjectAt(1)); 092 } 093 094 public ASN1OctetString getContent() 095 { 096 if (data.size() == 3) 097 { 098 ASN1TaggedObject o = ASN1TaggedObject.getInstance(data.getObjectAt(2)); 099 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}