<PackageReference Include="BouncyCastle.Cryptography" Version="2.3.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 tagNo; private readonly Asn1Encodable obj; public virtual int Type => tagNo; public virtual Asn1Encodable Object => obj; private ProofOfPossession(Asn1TaggedObject tagged) { tagNo = tagged.TagNo; switch (tagNo) { case 0: obj = DerNull.Instance; break; case 1: obj = PopoSigningKey.GetInstance(tagged, false); break; case 2: case 3: obj = PopoPrivKey.GetInstance(tagged, true); break; default: throw new ArgumentException("unknown tag: " + tagNo.ToString(), "tagged"); } } public static ProofOfPossession GetInstance(object obj) { ProofOfPossession proofOfPossession = obj as ProofOfPossession; if (proofOfPossession != null) return proofOfPossession; Asn1TaggedObject asn1TaggedObject = obj as Asn1TaggedObject; if (asn1TaggedObject != null) return new ProofOfPossession(asn1TaggedObject); throw new ArgumentException("Invalid object: " + Platform.GetTypeName(obj), "obj"); } public ProofOfPossession() { tagNo = 0; obj = DerNull.Instance; } public ProofOfPossession(PopoSigningKey Poposk) { tagNo = 1; obj = Poposk; } public ProofOfPossession(int type, PopoPrivKey privkey) { tagNo = type; obj = privkey; } public override Asn1Object ToAsn1Object() { return new DerTaggedObject(false, tagNo, obj); } } }