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

RecipientInfo

using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.Cms { public class RecipientInfo : Asn1Encodable, IAsn1Choice { internal Asn1Encodable info; public DerInteger Version { get { Asn1TaggedObject asn1TaggedObject = info as Asn1TaggedObject; if (asn1TaggedObject != null) { 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 new DerInteger(0); default: throw new InvalidOperationException("unknown tag"); } } return KeyTransRecipientInfo.GetInstance(info).Version; } } public bool IsTagged => info is Asn1TaggedObject; public Asn1Encodable Info { get { Asn1TaggedObject asn1TaggedObject = info as Asn1TaggedObject; if (asn1TaggedObject != null) { 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); default: throw new InvalidOperationException("unknown tag"); } } return KeyTransRecipientInfo.GetInstance(info); } } 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.GetInstanceFromChoice(taggedObject, declaredExplicit, GetInstance); } public RecipientInfo(KeyTransRecipientInfo info) { this.info = info; } public RecipientInfo(KeyAgreeRecipientInfo info) { this.info = new DerTaggedObject(false, 1, info); } public RecipientInfo(KekRecipientInfo info) { this.info = new DerTaggedObject(false, 2, info); } public RecipientInfo(PasswordRecipientInfo info) { this.info = new DerTaggedObject(false, 3, info); } public RecipientInfo(OtherRecipientInfo info) { this.info = new DerTaggedObject(false, 4, info); } public RecipientInfo(Asn1Object info) { this.info = info; } private KekRecipientInfo GetKekInfo(Asn1TaggedObject o) { return KekRecipientInfo.GetInstance(o, o.IsExplicit()); } public override Asn1Object ToAsn1Object() { return info.ToAsn1Object(); } } }