static void TestG1() { Console.WriteLine("TestG1"); G1 P = new G1(); P.Clear(); assert("P = 0", P.ToString() == "0"); assert("P.IsValid", P.IsValid()); assert("P.IsZero", P.IsZero()); P.HashAndMapTo("abc"); assert("P.IsValid", P.IsValid()); assert("!P.IsZero", !P.IsZero()); G1 Q = new G1(); Q = P.Clone(); assert("P == Q", Q.Equals(P)); G1.Neg(Q, P); G1.Add(Q, Q, P); assert("P = Q", Q.IsZero()); G1.Dbl(Q, P); G1 R = new G1(); G1.Add(R, P, P); assert("Q == R", Q.Equals(R)); Fr x = new Fr(); x.SetInt(3); G1.Add(R, R, P); G1.Mul(Q, P, x); assert("Q == R", Q.Equals(R)); }
static void TestG1() { Console.WriteLine("TestG1"); G1 P = new G1(); P.Clear(); assert("P.IsValid", P.IsValid()); assert("P.IsZero", P.IsZero()); P.HashAndMapTo("abc"); assert("P.IsValid", P.IsValid()); assert("!P.IsZero", !P.IsZero()); G1 Q = new G1(); Q = P; assert("P == Q", Q.Equals(P)); Q.Neg(P); Q.Add(Q, P); assert("P = Q", Q.IsZero()); Q.Dbl(P); G1 R = new G1(); R.Add(P, P); assert("Q == R", Q.Equals(R)); Fr x = new Fr(); x.SetInt(3); R.Add(R, P); Q.Mul(P, x); assert("Q == R", Q.Equals(R)); }
static void TestG1() { Console.WriteLine("TestG1"); G1 P = new G1(); assert("P.isZero", P.IsZero()); P.Clear(); assert("P.IsValid", P.IsValid()); assert("P.IsZero", P.IsZero()); P.HashAndMapTo("abc"); assert("P.IsValid", P.IsValid()); assert("!P.IsZero", !P.IsZero()); G1 Q = new G1(); Q = P; assert("P == Q", Q.Equals(P)); Q.Neg(P); Q.Add(Q, P); assert("P = Q", Q.IsZero()); Q.Dbl(P); G1 R = new G1(); R.Add(P, P); assert("Q == R", Q.Equals(R)); Fr x = new Fr(); x.SetInt(3); R.Add(R, P); Q.Mul(P, x); assert("Q == R", Q.Equals(R)); { byte[] buf = P.Serialize(); Q.Clear(); Q.Deserialize(buf); assert("P == Q", P.Equals(Q)); } { const int n = 5; G1[] xVec = new G1[n]; Fr[] yVec = new Fr[n]; P.Clear(); for (int i = 0; i < n; i++) { xVec[i].HashAndMapTo(i.ToString()); yVec[i].SetByCSPRNG(); Q.Mul(xVec[i], yVec[i]); P.Add(P, Q); } MulVec(ref Q, xVec, yVec); assert("mulVecG1", P.Equals(Q)); } G1 W = G1.Zero(); assert("W.IsZero", W.IsZero()); }
public bool Equals(PublicKey?other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(_y.Equals(other._y) && _t == other._t); }
static void TestSS_G1() { const int n = 5; const int k = 3; // can't change because the following loop G1[] cVec = new G1[k]; // init polynomial coefficient for (int i = 0; i < k; i++) { Fr x = new Fr(); x.SetByCSPRNG(); cVec[i].SetHashOf(x.GetStr(16)); } Fr[] xVec = new Fr[n]; G1[] yVec = new G1[n]; // share cVec[0] with yVec[0], ..., yVec[n-1] for (int i = 0; i < n; i++) { xVec[i].SetHashOf(i.ToString()); MCL.Share(ref yVec[i], cVec, xVec[i]); } // recover cVec[0] from xVecSubset and yVecSubset Fr[] xVecSubset = new Fr[k]; G1[] yVecSubset = new G1[k]; for (int i0 = 0; i0 < n; i0++) { xVecSubset[0] = xVec[i0]; yVecSubset[0] = yVec[i0]; for (int i1 = i0 + 1; i1 < n; i1++) { xVecSubset[1] = xVec[i1]; yVecSubset[1] = yVec[i1]; for (int i2 = i1 + 1; i2 < n; i2++) { xVecSubset[2] = xVec[i2]; yVecSubset[2] = yVec[i2]; G1 s = new G1(); MCL.Recover(ref s, xVecSubset, yVecSubset); assert("Recover", s.Equals(cVec[0])); } } } }