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

KeyAgreeRecipientInfo

using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.Cms { public class KeyAgreeRecipientInfo : Asn1Encodable { private readonly DerInteger m_version; private readonly OriginatorIdentifierOrKey m_originator; private readonly Asn1OctetString m_ukm; private readonly AlgorithmIdentifier m_keyEncryptionAlgorithm; private readonly Asn1Sequence m_recipientEncryptedKeys; public DerInteger Version => m_version; public OriginatorIdentifierOrKey Originator => m_originator; public Asn1OctetString UserKeyingMaterial => m_ukm; public AlgorithmIdentifier KeyEncryptionAlgorithm => m_keyEncryptionAlgorithm; public Asn1Sequence RecipientEncryptedKeys => m_recipientEncryptedKeys; public static KeyAgreeRecipientInfo GetInstance(object obj) { if (obj == null) return null; KeyAgreeRecipientInfo keyAgreeRecipientInfo = obj as KeyAgreeRecipientInfo; if (keyAgreeRecipientInfo != null) return keyAgreeRecipientInfo; return new KeyAgreeRecipientInfo(Asn1Sequence.GetInstance(obj)); } public static KeyAgreeRecipientInfo GetInstance(Asn1TaggedObject obj, bool explicitly) { return new KeyAgreeRecipientInfo(Asn1Sequence.GetInstance(obj, explicitly)); } public static KeyAgreeRecipientInfo GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new KeyAgreeRecipientInfo(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public KeyAgreeRecipientInfo(OriginatorIdentifierOrKey originator, Asn1OctetString ukm, AlgorithmIdentifier keyEncryptionAlgorithm, Asn1Sequence recipientEncryptedKeys) { m_version = DerInteger.Three; if (originator == null) throw new ArgumentNullException("originator"); m_originator = originator; m_ukm = ukm; if (keyEncryptionAlgorithm == null) throw new ArgumentNullException("keyEncryptionAlgorithm"); m_keyEncryptionAlgorithm = keyEncryptionAlgorithm; if (recipientEncryptedKeys == null) throw new ArgumentNullException("recipientEncryptedKeys"); m_recipientEncryptedKeys = recipientEncryptedKeys; } [Obsolete("Use 'GetInstance' instead")] public KeyAgreeRecipientInfo(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 4 || count > 5) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_version = DerInteger.GetInstance(seq[sequencePosition++]); m_originator = Asn1Utilities.ReadContextTagged(seq, ref sequencePosition, 0, true, OriginatorIdentifierOrKey.GetTagged); m_ukm = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, true, Asn1OctetString.GetTagged); m_keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]); m_recipientEncryptedKeys = Asn1Sequence.GetInstance(seq[sequencePosition++]); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(5); asn1EncodableVector.Add(m_version, new DerTaggedObject(true, 0, m_originator)); asn1EncodableVector.AddOptionalTagged(true, 1, m_ukm); asn1EncodableVector.Add(m_keyEncryptionAlgorithm, m_recipientEncryptedKeys); return new DerSequence(asn1EncodableVector); } } }