<PackageReference Include="BouncyCastle.Cryptography" Version="2.7.0-beta.98" />

X9ECPoint

public class X9ECPoint : Asn1Encodable
using Org.BouncyCastle.Math.EC; using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.X9 { public class X9ECPoint : Asn1Encodable { private readonly Asn1OctetString m_encoding; private readonly ECCurve m_c; private ECPoint m_p; public Asn1OctetString PointEncoding => m_encoding; public ECPoint Point => Objects.EnsureSingletonInitialized(ref m_p, this, (X9ECPoint self) => self.CreatePoint()); public bool IsPointCompressed { get { byte[] octets = m_encoding.GetOctets(); if (octets.Length != 0) { if (octets[0] != 2) return octets[0] == 3; return true; } return false; } } public X9ECPoint(ECPoint p, bool compressed) { m_c = p.Curve; m_p = p.Normalize(); m_encoding = new DerOctetString(p.GetEncoded(compressed)); } public X9ECPoint(ECCurve c, byte[] encoding) : this(c, DerOctetString.FromContents(encoding)) { } public X9ECPoint(ECCurve c, Asn1OctetString s) { if (c == null) throw new ArgumentNullException("c"); m_c = c; m_p = null; if (s == null) throw new ArgumentNullException("s"); m_encoding = s; } public byte[] GetPointEncoding() { return Arrays.Clone(m_encoding.GetOctets()); } public override Asn1Object ToAsn1Object() { return m_encoding; } private ECPoint CreatePoint() { return m_c.DecodePoint(m_encoding.GetOctets()); } } }