public void ToByteArrayTest() { ECDomainParameters domain = ECDomains.GetDomainParameter(ECDomainNames.secp192r1); ECGroup group = domain.Group; ECPoint p = domain.Group.FiniteField.GetInfinityPoint(group); ECPoint g = domain.G.Export(); byte[] tmp = p.ToByteArray(true); Assert.IsTrue(tmp.Length == 1, "#1"); Assert.IsTrue(tmp[0] == 0, "#2"); p = new ECPoint(group, tmp); Assert.IsTrue(p.IsInifinity(), "#3"); tmp = domain.G.ToByteArray(false); Assert.IsTrue(tmp.Length == ((domain.Bits >> 3) + ((domain.Bits & 7) == 0 ? 0 : 1)) * 2 + 1, "#4"); p = new ECPoint(group, tmp).Export(); Assert.IsTrue(p.X.CompareTo(g.X) == 0, "#5"); Assert.IsTrue(p.Y.CompareTo(g.Y) == 0, "#6"); tmp = domain.G.ToByteArray(true); Assert.IsTrue(tmp.Length == ((domain.Bits >> 3) + ((domain.Bits & 7) == 0 ? 0 : 1)) + 1, "#7"); p = new ECPoint(group, tmp).Export(); Assert.IsTrue(p.X.CompareTo(g.X) == 0, "#8"); Assert.IsTrue(p.Y.CompareTo(g.Y) == 0, "#9"); }
public virtual ECPoint ExportECPoint(Number x, Number y, Number z, ECGroup group) { if (z.IsOne()) { return(new ECPoint(group, x, y, z)); } Number iz = Invert(z); Number z2 = Multiply(iz, iz); return(new ECPoint(group, Multiply(x, z2), Multiply(y, Multiply(z2, iz)), Number.One)); }
public static GroupElement CreateGroupElement(Group Gq, string value) { if (Gq is SubgroupGroup) { return(Gq.CreateGroupElement(HexToBytes(value))); } else { ECGroup ecGq = Gq as ECGroup; string[] point = value.Split(','); return(ecGq.CreateGroupElement(HexToBytes(point[0]), HexToBytes(point[1]))); } }
void PointCompressTest(int bits, ECGroup group, ECPoint p, int repeats, string name) { int bytes = (bits >> 3) + ((bits & 7) == 0 ? 0 : 1) + 1; for (int i = 0; i < repeats; i++) { byte[] tmp = p.ToByteArray(true); Assert.IsTrue(tmp.Length == bytes, name + " #1"); ECPoint x = new ECPoint(group, tmp).Export(); ECPoint p2 = p.Export(); Assert.IsTrue(x.X.CompareTo(p2.X) == 0, name + " #2"); Assert.IsTrue(x.Y.CompareTo(p2.Y) == 0, name + " #3"); p = p.Multiply(Number.CreateRandomElement(group.P)); } }
public override ECPoint ExportECPoint(Number x, Number y, Number z, ECGroup group) { if (montOne == null) { montOne = ToElement(Number.One); } if (z.CompareTo(montOne) == 0) { return(new ECPoint(group, Multiply(x, Number.One), Multiply(y, Number.One), Number.One)); } Number izm = Invert(z); Number iz = Multiply(izm, Number.One); Number z2 = Multiply(iz, izm); return(new ECPoint(group, Multiply(x, z2), Multiply(y, (Multiply(z2, izm))), Number.One)); }
public override ECPoint GetInfinityPoint(ECGroup group) { return(new ECPoint(group, PADDED_ZERO, PADDED_ZERO, PADDED_ZERO)); }
public virtual ECPoint GetInfinityPoint(ECGroup group) { return(new ECPoint(group, Number.Zero, Number.Zero, Number.Zero)); }