Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/Org/BouncyCastle/Asn1/X9/X9ECPoint.cs
2025-10-09 09:57:24 +09:00

75 lines
1.2 KiB
C#

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)
: this(p, compressed: 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;
}
}