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

RecipientInfo

using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.Cms { public class RecipientInfo : Asn1Encodable, IAsn1Choice { private readonly Asn1Encodable m_info; [Obsolete("Will be removed")] public DerInteger Version { get { Asn1TaggedObject asn1TaggedObject = m_info as Asn1TaggedObject; if (asn1TaggedObject == null) return KeyTransRecipientInfo.GetInstance(m_info).Version; if (asn1TaggedObject.HasContextTag()) { switch (asn1TaggedObject.TagNo) { case 1: return KeyAgreeRecipientInfo.GetInstance(asn1TaggedObject, false).Version; case 2: return GetKekInfo(asn1TaggedObject).Version; case 3: return PasswordRecipientInfo.GetInstance(asn1TaggedObject, false).Version; case 4: return DerInteger.Zero; } } throw new InvalidOperationException("unknown tag"); } } public bool IsTagged => m_info is Asn1TaggedObject; public Asn1Encodable Info { get { Asn1TaggedObject asn1TaggedObject = m_info as Asn1TaggedObject; if (asn1TaggedObject == null) return KeyTransRecipientInfo.GetInstance(m_info); if (asn1TaggedObject.HasContextTag()) { switch (asn1TaggedObject.TagNo) { case 1: return KeyAgreeRecipientInfo.GetInstance(asn1TaggedObject, false); case 2: return GetKekInfo(asn1TaggedObject); case 3: return PasswordRecipientInfo.GetInstance(asn1TaggedObject, false); case 4: return OtherRecipientInfo.GetInstance(asn1TaggedObject, false); } } throw new InvalidOperationException("unknown tag"); } } public static RecipientInfo GetInstance(object o) { if (o == null) return null; RecipientInfo recipientInfo = o as RecipientInfo; if (recipientInfo != null) return recipientInfo; Asn1Sequence asn1Sequence = o as Asn1Sequence; if (asn1Sequence != null) return new RecipientInfo(asn1Sequence); Asn1TaggedObject asn1TaggedObject = o as Asn1TaggedObject; if (asn1TaggedObject != null) return new RecipientInfo(asn1TaggedObject); throw new ArgumentException("unknown object in factory: " + Platform.GetTypeName(o), "o"); } public static RecipientInfo GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetInstanceChoice(taggedObject, declaredExplicit, GetInstance); } public static RecipientInfo GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance); } public RecipientInfo(KeyTransRecipientInfo info) { if (info == null) throw new ArgumentNullException("info"); m_info = info; } public RecipientInfo(KeyAgreeRecipientInfo info) { m_info = new DerTaggedObject(false, 1, info); } public RecipientInfo(KekRecipientInfo info) { m_info = new DerTaggedObject(false, 2, info); } public RecipientInfo(PasswordRecipientInfo info) { m_info = new DerTaggedObject(false, 3, info); } public RecipientInfo(OtherRecipientInfo info) { m_info = new DerTaggedObject(false, 4, info); } public RecipientInfo(Asn1Object info) { if (info == null) throw new ArgumentNullException("info"); m_info = info; } private KekRecipientInfo GetKekInfo(Asn1TaggedObject tagged) { bool explicitly = tagged.IsExplicit(); return KekRecipientInfo.GetInstance(tagged, explicitly); } public override Asn1Object ToAsn1Object() { return m_info.ToAsn1Object(); } internal bool IsKeyTransV0() { if (m_info is Asn1TaggedObject) return false; return KeyTransRecipientInfo.GetInstance(m_info).Version.HasValue(0); } internal bool IsPasswordOrOther() { Asn1TaggedObject asn1TaggedObject = m_info as Asn1TaggedObject; if (asn1TaggedObject != null && asn1TaggedObject.HasContextTag()) { int tagNo = asn1TaggedObject.TagNo; if ((uint)(tagNo - 3) <= 1) return true; } return false; } } }