PopoSigningKeyInput
using Org.BouncyCastle.Asn1.X509;
using System;
namespace Org.BouncyCastle.Asn1.Crmf
{
public class PopoSigningKeyInput : Asn1Encodable
{
private readonly GeneralName m_sender;
private readonly PKMacValue m_publicKeyMac;
private readonly SubjectPublicKeyInfo m_publicKey;
public virtual GeneralName Sender => m_sender;
public virtual PKMacValue PublicKeyMac => m_publicKeyMac;
public virtual SubjectPublicKeyInfo PublicKey => m_publicKey;
public static PopoSigningKeyInput GetInstance(object obj)
{
if (obj == null)
return null;
PopoSigningKeyInput popoSigningKeyInput = obj as PopoSigningKeyInput;
if (popoSigningKeyInput != null)
return popoSigningKeyInput;
return new PopoSigningKeyInput(Asn1Sequence.GetInstance(obj));
}
public static PopoSigningKeyInput GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new PopoSigningKeyInput(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static PopoSigningKeyInput GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new PopoSigningKeyInput(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
private PopoSigningKeyInput(Asn1Sequence seq)
{
int count = seq.Count;
if (count != 2)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
Asn1Encodable asn1Encodable = seq[0];
Asn1TaggedObject asn1TaggedObject = asn1Encodable as Asn1TaggedObject;
if (asn1TaggedObject != null)
m_sender = GeneralName.GetInstance(Asn1Utilities.GetExplicitContextBaseObject(asn1TaggedObject, 0));
else
m_publicKeyMac = PKMacValue.GetInstance(asn1Encodable);
m_publicKey = SubjectPublicKeyInfo.GetInstance(seq[1]);
}
public PopoSigningKeyInput(GeneralName sender, SubjectPublicKeyInfo spki)
{
if (sender == null)
throw new ArgumentNullException("sender");
m_sender = sender;
if (spki == null)
throw new ArgumentNullException("spki");
m_publicKey = spki;
}
public PopoSigningKeyInput(PKMacValue pkmac, SubjectPublicKeyInfo spki)
{
if (pkmac == null)
throw new ArgumentNullException("pkmac");
m_publicKeyMac = pkmac;
if (spki == null)
throw new ArgumentNullException("spki");
m_publicKey = spki;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(2);
if (m_sender != null)
asn1EncodableVector.Add(new DerTaggedObject(true, 0, m_sender));
else
asn1EncodableVector.Add(m_publicKeyMac);
asn1EncodableVector.Add(m_publicKey);
return new DerSequence(asn1EncodableVector);
}
}
}