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

ProofOfPossession

using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.Crmf { public class ProofOfPossession : Asn1Encodable, IAsn1Choice { public const int TYPE_RA_VERIFIED = 0; public const int TYPE_SIGNING_KEY = 1; public const int TYPE_KEY_ENCIPHERMENT = 2; public const int TYPE_KEY_AGREEMENT = 3; private readonly int m_tagNo; private readonly Asn1Encodable m_obj; public virtual int Type => m_tagNo; public virtual Asn1Encodable Object => m_obj; public static ProofOfPossession GetInstance(object obj) { if (obj == null) return null; Asn1Encodable asn1Encodable = obj as Asn1Encodable; if (asn1Encodable != null) { ProofOfPossession optional = GetOptional(asn1Encodable); if (optional != null) return optional; } throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj"); } public static ProofOfPossession GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetInstanceChoice(taggedObject, declaredExplicit, GetInstance); } public static ProofOfPossession GetOptional(Asn1Encodable element) { if (element == null) throw new ArgumentNullException("element"); ProofOfPossession proofOfPossession = element as ProofOfPossession; if (proofOfPossession != null) return proofOfPossession; Asn1TaggedObject asn1TaggedObject = element as Asn1TaggedObject; if (asn1TaggedObject != null) { Asn1Encodable optionalBaseObject = GetOptionalBaseObject(asn1TaggedObject); if (optionalBaseObject != null) return new ProofOfPossession(asn1TaggedObject.TagNo, optionalBaseObject); } return null; } public static ProofOfPossession GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return Asn1Utilities.GetTaggedChoice(taggedObject, declaredExplicit, GetInstance); } private static Asn1Encodable GetOptionalBaseObject(Asn1TaggedObject taggedObject) { if (taggedObject.HasContextTag()) { switch (taggedObject.TagNo) { case 0: return Asn1Null.GetInstance(taggedObject, false); case 1: return PopoSigningKey.GetInstance(taggedObject, false); case 2: case 3: return PopoPrivKey.GetInstance(taggedObject, true); } } return null; } private ProofOfPossession(int tagNo, Asn1Encodable obj) { m_tagNo = tagNo; if (obj == null) throw new ArgumentNullException("obj"); m_obj = obj; } public ProofOfPossession() : this(0, DerNull.Instance) { } public ProofOfPossession(PopoSigningKey Poposk) : this(1, Poposk) { } public ProofOfPossession(int type, PopoPrivKey privkey) : this(type, (Asn1Encodable)privkey) { } public override Asn1Object ToAsn1Object() { return new DerTaggedObject(false, m_tagNo, m_obj); } } }