using System; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Utilities; namespace Org.BouncyCastle.Asn1.Pkcs { /** * The EncryptedData object. *
* EncryptedData ::= Sequence { * version Version, * encryptedContentInfo EncryptedContentInfo * } * * * EncryptedContentInfo ::= Sequence { * contentType ContentType, * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL * } * * EncryptedContent ::= OCTET STRING **/ public class EncryptedData : Asn1Encodable { private readonly Asn1Sequence data; // private readonly DerObjectIdentifier bagId; // private readonly Asn1Object bagValue; public static EncryptedData GetInstance( object obj) { if (obj is EncryptedData) { return (EncryptedData) obj; } if (obj is Asn1Sequence) { return new EncryptedData((Asn1Sequence) obj); } throw new ArgumentException("Unknown object in factory: " + Platform.GetTypeName(obj), "obj"); } private EncryptedData( Asn1Sequence seq) { if (seq.Count != 2) throw new ArgumentException("Wrong number of elements in sequence", "seq"); DerInteger version = (DerInteger)seq[0]; if (!version.HasValue(0)) throw new ArgumentException("sequence not version 0"); this.data = (Asn1Sequence) seq[1]; } public EncryptedData( DerObjectIdentifier contentType, AlgorithmIdentifier encryptionAlgorithm, Asn1Encodable content) { data = new BerSequence( contentType, encryptionAlgorithm.ToAsn1Object(), new BerTaggedObject(false, 0, content)); } public DerObjectIdentifier ContentType { get { return (DerObjectIdentifier) data[0]; } } public AlgorithmIdentifier EncryptionAlgorithm { get { return AlgorithmIdentifier.GetInstance(data[1]); } } public Asn1OctetString Content { get { if (data.Count == 3) { Asn1TaggedObject o = (Asn1TaggedObject)data[2]; return Asn1OctetString.GetInstance(o, false); } return null; } } public override Asn1Object ToAsn1Object() { return new BerSequence(new DerInteger(0), data); } } }