<PackageReference Include="BouncyCastle.Cryptography" Version="2.5.0" />

EnvelopedData

public class EnvelopedData : Asn1Encodable
using System; namespace Org.BouncyCastle.Asn1.Cms { public class EnvelopedData : Asn1Encodable { private readonly DerInteger m_version; private readonly OriginatorInfo m_originatorInfo; private readonly Asn1Set m_recipientInfos; private readonly EncryptedContentInfo m_encryptedContentInfo; private readonly Asn1Set m_unprotectedAttrs; public DerInteger Version => m_version; public OriginatorInfo OriginatorInfo => m_originatorInfo; public Asn1Set RecipientInfos => m_recipientInfos; public EncryptedContentInfo EncryptedContentInfo => m_encryptedContentInfo; public Asn1Set UnprotectedAttrs => m_unprotectedAttrs; public static EnvelopedData GetInstance(object obj) { if (obj == null) return null; EnvelopedData envelopedData = obj as EnvelopedData; if (envelopedData != null) return envelopedData; return new EnvelopedData(Asn1Sequence.GetInstance(obj)); } public static EnvelopedData GetInstance(Asn1TaggedObject obj, bool explicitly) { return new EnvelopedData(Asn1Sequence.GetInstance(obj, explicitly)); } public static EnvelopedData GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new EnvelopedData(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public EnvelopedData(OriginatorInfo originatorInfo, Asn1Set recipientInfos, EncryptedContentInfo encryptedContentInfo, Asn1Set unprotectedAttrs) { m_version = CalculateVersionField(originatorInfo, recipientInfos, unprotectedAttrs); m_originatorInfo = originatorInfo; if (recipientInfos == null) throw new ArgumentNullException("recipientInfos"); m_recipientInfos = recipientInfos; if (encryptedContentInfo == null) throw new ArgumentNullException("encryptedContentInfo"); m_encryptedContentInfo = encryptedContentInfo; m_unprotectedAttrs = unprotectedAttrs; } public EnvelopedData(OriginatorInfo originatorInfo, Asn1Set recipientInfos, EncryptedContentInfo encryptedContentInfo, Attributes unprotectedAttrs) : this(originatorInfo, recipientInfos, encryptedContentInfo, Asn1Set.GetInstance(unprotectedAttrs)) { } private EnvelopedData(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 3 || count > 5) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_version = DerInteger.GetInstance(seq[sequencePosition++]); m_originatorInfo = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, OriginatorInfo.GetTagged); m_recipientInfos = Asn1Set.GetInstance(seq[sequencePosition++]); m_encryptedContentInfo = EncryptedContentInfo.GetInstance(seq[sequencePosition++]); m_unprotectedAttrs = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, Asn1Set.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(5); asn1EncodableVector.Add(m_version); asn1EncodableVector.AddOptionalTagged(false, 0, m_originatorInfo); asn1EncodableVector.Add(m_recipientInfos, m_encryptedContentInfo); asn1EncodableVector.AddOptionalTagged(false, 1, m_unprotectedAttrs); return new BerSequence(asn1EncodableVector); } public static int CalculateVersion(OriginatorInfo originatorInfo, Asn1Set recipientInfos, Asn1Set unprotectedAttrs) { return CalculateVersionField(originatorInfo, recipientInfos, unprotectedAttrs).IntValueExact; } private static DerInteger CalculateVersionField(OriginatorInfo originatorInfo, Asn1Set recipientInfos, Asn1Set unprotectedAttrs) { if (originatorInfo != null) { Asn1Set crls = originatorInfo.Crls; if (crls != null) { foreach (Asn1Encodable item in crls) { Asn1TaggedObject optional = Asn1TaggedObject.GetOptional(item); if (optional != null && optional.HasContextTag(1)) return DerInteger.Four; } } Asn1Set certificates = originatorInfo.Certificates; if (certificates != null) { bool flag = false; foreach (Asn1Encodable item2 in certificates) { Asn1TaggedObject optional2 = Asn1TaggedObject.GetOptional(item2); if (optional2 != null) { if (optional2.HasContextTag(3)) return DerInteger.Four; flag = (flag || optional2.HasContextTag(2)); } } if (flag) return DerInteger.Three; } } bool flag2 = true; foreach (Asn1Encodable recipientInfo in recipientInfos) { RecipientInfo instance = RecipientInfo.GetInstance(recipientInfo); if (instance.IsPasswordOrOther()) return DerInteger.Three; flag2 = (flag2 && instance.IsKeyTransV0()); } if ((originatorInfo == null && unprotectedAttrs == null) & flag2) return DerInteger.Zero; return DerInteger.Two; } } }