PopoSigningKey
using Org.BouncyCastle.Asn1.X509;
using System;
namespace Org.BouncyCastle.Asn1.Crmf
{
public class PopoSigningKey : Asn1Encodable
{
private readonly PopoSigningKeyInput m_poposkInput;
private readonly AlgorithmIdentifier m_algorithmIdentifier;
private readonly DerBitString m_signature;
public virtual PopoSigningKeyInput PoposkInput => m_poposkInput;
public virtual AlgorithmIdentifier AlgorithmIdentifier => m_algorithmIdentifier;
public virtual DerBitString Signature => m_signature;
public static PopoSigningKey GetInstance(object obj)
{
if (obj == null)
return null;
PopoSigningKey popoSigningKey = obj as PopoSigningKey;
if (popoSigningKey != null)
return popoSigningKey;
return new PopoSigningKey(Asn1Sequence.GetInstance(obj));
}
public static PopoSigningKey GetInstance(Asn1TaggedObject obj, bool isExplicit)
{
return new PopoSigningKey(Asn1Sequence.GetInstance(obj, isExplicit));
}
public static PopoSigningKey GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new PopoSigningKey(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
private PopoSigningKey(Asn1Sequence seq)
{
int count = seq.Count;
if (count < 2 || count > 3)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
int sequencePosition = 0;
m_poposkInput = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, PopoSigningKeyInput.GetTagged);
m_algorithmIdentifier = AlgorithmIdentifier.GetInstance(seq[sequencePosition++]);
m_signature = DerBitString.GetInstance(seq[sequencePosition++]);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
}
public PopoSigningKey(PopoSigningKeyInput poposkIn, AlgorithmIdentifier aid, DerBitString signature)
{
m_poposkInput = poposkIn;
if (aid == null)
throw new ArgumentNullException("aid");
m_algorithmIdentifier = aid;
if (signature == null)
throw new ArgumentNullException("signature");
m_signature = signature;
}
public override Asn1Object ToAsn1Object()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3);
asn1EncodableVector.AddOptionalTagged(false, 0, m_poposkInput);
asn1EncodableVector.Add(m_algorithmIdentifier);
asn1EncodableVector.Add(m_signature);
return new DerSequence(asn1EncodableVector);
}
}
}