CmcePrivateKey
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Pqc.Asn1
{
public class CmcePrivateKey : Asn1Object
{
private readonly Asn1OctetString m_delta;
private readonly Asn1OctetString m_c;
private readonly Asn1OctetString m_g;
private readonly Asn1OctetString m_alpha;
private readonly Asn1OctetString m_s;
private readonly CmcePublicKey m_publicKey;
public int Version => 0;
public byte[] Delta => Arrays.Clone(m_delta.GetOctets());
public byte[] C => Arrays.Clone(m_c.GetOctets());
public byte[] G => Arrays.Clone(m_g.GetOctets());
public byte[] Alpha => Arrays.Clone(m_alpha.GetOctets());
public byte[] S => Arrays.Clone(m_s.GetOctets());
public CmcePublicKey PublicKey => m_publicKey;
public static CmcePrivateKey GetInstance(object o)
{
if (o == null)
return null;
CmcePrivateKey cmcePrivateKey = o as CmcePrivateKey;
if (cmcePrivateKey != null)
return cmcePrivateKey;
return new CmcePrivateKey(Asn1Sequence.GetInstance(o));
}
public static CmcePrivateKey GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new CmcePrivateKey(Asn1Sequence.GetInstance(taggedObject, declaredExplicit));
}
public static CmcePrivateKey GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit)
{
return new CmcePrivateKey(Asn1Sequence.GetTagged(taggedObject, declaredExplicit));
}
public CmcePrivateKey(int version, byte[] delta, byte[] c, byte[] g, byte[] alpha, byte[] s, CmcePublicKey pubKey = null)
{
if (version != 0)
throw new Exception("unrecognized version");
m_delta = DerOctetString.FromContents(delta);
m_c = DerOctetString.FromContents(c);
m_g = DerOctetString.FromContents(g);
m_alpha = DerOctetString.FromContents(alpha);
m_s = DerOctetString.FromContents(s);
m_publicKey = pubKey;
}
private CmcePrivateKey(Asn1Sequence seq)
{
int count = seq.Count;
int sequencePosition = 0;
if (count < 6 || count > 7)
throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq");
DerInteger instance = DerInteger.GetInstance(seq[sequencePosition++]);
m_delta = Asn1OctetString.GetInstance(seq[sequencePosition++]);
m_c = Asn1OctetString.GetInstance(seq[sequencePosition++]);
m_g = Asn1OctetString.GetInstance(seq[sequencePosition++]);
m_alpha = Asn1OctetString.GetInstance(seq[sequencePosition++]);
m_s = Asn1OctetString.GetInstance(seq[sequencePosition++]);
m_publicKey = Asn1Utilities.ReadOptional(seq, ref sequencePosition, CmcePublicKey.GetOptional);
if (sequencePosition != count)
throw new ArgumentException("Unexpected elements in sequence", "seq");
if (!instance.HasValue(0))
throw new Exception("unrecognized version");
}
public Asn1Object ToAsn1Primitive()
{
Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(7);
asn1EncodableVector.Add(DerInteger.Zero, m_delta, m_c, m_g, m_alpha, m_s);
asn1EncodableVector.AddOptional(m_publicKey);
return new DerSequence(asn1EncodableVector);
}
internal override IAsn1Encoding GetEncoding(int encoding)
{
return ToAsn1Primitive().GetEncoding(encoding);
}
internal override IAsn1Encoding GetEncodingImplicit(int encoding, int tagClass, int tagNo)
{
return ToAsn1Primitive().GetEncodingImplicit(encoding, tagClass, tagNo);
}
internal sealed override DerEncoding GetEncodingDer()
{
return ToAsn1Primitive().GetEncodingDer();
}
internal sealed override DerEncoding GetEncodingDerImplicit(int tagClass, int tagNo)
{
return ToAsn1Primitive().GetEncodingDerImplicit(tagClass, tagNo);
}
protected override bool Asn1Equals(Asn1Object asn1Object)
{
return ToAsn1Primitive().CallAsn1Equals(asn1Object);
}
protected override int Asn1GetHashCode()
{
return ToAsn1Primitive().CallAsn1GetHashCode();
}
}
}