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);
}
}
}