<PackageReference Include="BouncyCastle.Cryptography" Version="2.7.0-beta.98" />

AuthEnvelopedData

using System; namespace Org.BouncyCastle.Asn1.Cms { public class AuthEnvelopedData : Asn1Encodable { private readonly DerInteger m_version; private readonly OriginatorInfo m_originatorInfo; private readonly Asn1Set m_recipientInfos; private readonly EncryptedContentInfo m_authEncryptedContentInfo; private readonly Asn1Set m_authAttrs; private readonly Asn1OctetString m_mac; private readonly Asn1Set m_unauthAttrs; public DerInteger Version => m_version; public OriginatorInfo OriginatorInfo => m_originatorInfo; public Asn1Set RecipientInfos => m_recipientInfos; public EncryptedContentInfo AuthEncryptedContentInfo => m_authEncryptedContentInfo; public Asn1Set AuthAttrs => m_authAttrs; public Asn1OctetString Mac => m_mac; public Asn1Set UnauthAttrs => m_unauthAttrs; public static AuthEnvelopedData GetInstance(object obj) { if (obj == null) return null; AuthEnvelopedData authEnvelopedData = obj as AuthEnvelopedData; if (authEnvelopedData != null) return authEnvelopedData; return new AuthEnvelopedData(Asn1Sequence.GetInstance(obj)); } public static AuthEnvelopedData GetInstance(Asn1TaggedObject obj, bool isExplicit) { return new AuthEnvelopedData(Asn1Sequence.GetInstance(obj, isExplicit)); } public static AuthEnvelopedData GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new AuthEnvelopedData(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public AuthEnvelopedData(OriginatorInfo originatorInfo, Asn1Set recipientInfos, EncryptedContentInfo authEncryptedContentInfo, Asn1Set authAttrs, Asn1OctetString mac, Asn1Set unauthAttrs) { m_version = DerInteger.Zero; m_originatorInfo = originatorInfo; if (recipientInfos == null) throw new ArgumentNullException("recipientInfos"); m_recipientInfos = recipientInfos; if (authEncryptedContentInfo == null) throw new ArgumentNullException("authEncryptedContentInfo"); m_authEncryptedContentInfo = authEncryptedContentInfo; m_authAttrs = authAttrs; if (mac == null) throw new ArgumentNullException("mac"); m_mac = mac; m_unauthAttrs = unauthAttrs; Validate(); } private AuthEnvelopedData(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 4 || count > 7) 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_authEncryptedContentInfo = EncryptedContentInfo.GetInstance(seq[sequencePosition++]); m_authAttrs = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, Asn1Set.GetTagged); m_mac = Asn1OctetString.GetInstance(seq[sequencePosition++]); m_unauthAttrs = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, false, Asn1Set.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); Validate(); } private void Validate() { if (!m_version.HasValue(0)) throw new ArgumentException("AuthEnvelopedData version number must be 0"); if (m_recipientInfos.Count < 1) throw new ArgumentException("AuthEnvelopedData requires at least 1 RecipientInfo"); if (!CmsObjectIdentifiers.Data.Equals(m_authEncryptedContentInfo.ContentType) && (m_authAttrs == null || m_authAttrs.Count < 1)) throw new ArgumentException("authAttrs must be present with non-data content"); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(7); asn1EncodableVector.Add(m_version); asn1EncodableVector.AddOptionalTagged(false, 0, m_originatorInfo); asn1EncodableVector.Add(m_recipientInfos, m_authEncryptedContentInfo); asn1EncodableVector.AddOptionalTagged(false, 1, m_authAttrs); asn1EncodableVector.Add(m_mac); asn1EncodableVector.AddOptionalTagged(false, 2, m_unauthAttrs); return new BerSequence(asn1EncodableVector); } } }