X9ECPoint
using Org.BouncyCastle.Math.EC;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Asn1.X9
{
public class X9ECPoint : Asn1Encodable
{
private readonly Asn1OctetString encoding;
private ECCurve c;
private ECPoint p;
public ECPoint Point {
get {
if (p == null)
p = c.DecodePoint(encoding.GetOctets()).Normalize();
return p;
}
}
public bool IsPointCompressed {
get {
byte[] octets = encoding.GetOctets();
if (octets != null && octets.Length != 0) {
if (octets[0] != 2)
return octets[0] == 3;
return true;
}
return false;
}
}
public X9ECPoint(ECPoint p, bool compressed)
{
this.p = p.Normalize();
encoding = new DerOctetString(p.GetEncoded(compressed));
}
public X9ECPoint(ECCurve c, byte[] encoding)
{
this.c = c;
this.encoding = new DerOctetString(Arrays.Clone(encoding));
}
public X9ECPoint(ECCurve c, Asn1OctetString s)
: this(c, s.GetOctets())
{
}
public byte[] GetPointEncoding()
{
return Arrays.Clone(encoding.GetOctets());
}
public override Asn1Object ToAsn1Object()
{
return encoding;
}
}
}