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

KemRecipientInfo

public sealed class KemRecipientInfo : Asn1Encodable
using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.Cms { public sealed class KemRecipientInfo : Asn1Encodable { private static readonly DerInteger V1 = DerInteger.Zero; private readonly DerInteger m_cmsVersion; private readonly RecipientIdentifier m_rid; private readonly AlgorithmIdentifier m_kem; private readonly Asn1OctetString m_kemct; private readonly AlgorithmIdentifier m_kdf; private readonly DerInteger m_kekLength; private readonly Asn1OctetString m_ukm; private readonly AlgorithmIdentifier m_wrap; private readonly Asn1OctetString m_encryptedKey; public RecipientIdentifier RecipientIdentifier => m_rid; public AlgorithmIdentifier Kem => m_kem; public Asn1OctetString Kemct => m_kemct; public AlgorithmIdentifier Kdf => m_kdf; public AlgorithmIdentifier Wrap => m_wrap; public Asn1OctetString Ukm => m_ukm; public Asn1OctetString EncryptedKey => m_encryptedKey; public static KemRecipientInfo GetInstance(object obj) { if (obj == null) return null; KemRecipientInfo kemRecipientInfo = obj as KemRecipientInfo; if (kemRecipientInfo != null) return kemRecipientInfo; return new KemRecipientInfo(Asn1Sequence.GetInstance(obj)); } public static KemRecipientInfo GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new KemRecipientInfo(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static KemRecipientInfo GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new KemRecipientInfo(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public KemRecipientInfo(RecipientIdentifier rid, AlgorithmIdentifier kem, Asn1OctetString kemct, AlgorithmIdentifier kdf, DerInteger kekLength, Asn1OctetString ukm, AlgorithmIdentifier wrap, Asn1OctetString encryptedKey) { m_cmsVersion = V1; if (rid == null) throw new ArgumentNullException("rid"); m_rid = rid; if (kem == null) throw new ArgumentNullException("kem"); m_kem = kem; if (kemct == null) throw new ArgumentNullException("kemct"); m_kemct = kemct; if (kdf == null) throw new ArgumentNullException("kdf"); m_kdf = kdf; if (kekLength == null) throw new ArgumentNullException("kekLength"); m_kekLength = kekLength; m_ukm = ukm; if (wrap == null) throw new ArgumentNullException("wrap"); m_wrap = wrap; if (encryptedKey == null) throw new ArgumentNullException("encryptedKey"); m_encryptedKey = encryptedKey; } private KemRecipientInfo(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 8 || count > 9) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_cmsVersion = DerInteger.GetInstance(seq[sequencePosition++]); m_rid = RecipientIdentifier.GetInstance(seq[sequencePosition++]); m_kem = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_kemct = Asn1OctetString.GetInstance(seq[sequencePosition++]); m_kdf = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_kekLength = DerInteger.GetInstance(seq[sequencePosition++]); m_ukm = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, true, Asn1OctetString.GetTagged); m_wrap = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_encryptedKey = Asn1OctetString.GetInstance(seq[sequencePosition++]); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); if (!m_cmsVersion.HasValue(0)) throw new ArgumentException("Unsupported version (hex): " + m_cmsVersion.Value.ToString(16)); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(9); asn1EncodableVector.Add(m_cmsVersion, m_rid, m_kem, m_kemct, m_kdf, m_kekLength); asn1EncodableVector.AddOptionalTagged(true, 0, m_ukm); asn1EncodableVector.Add(m_wrap, m_encryptedKey); return new DerSequence(asn1EncodableVector); } } }