static void TestPairing() { Console.WriteLine("TestG2"); G1 P = new G1(); P.HashAndMapTo("123"); G2 Q = new G2(); Q.HashAndMapTo("1"); Fr a = new Fr(); Fr b = new Fr(); a.SetStr("12345678912345673453", 10); b.SetStr("230498230982394243424", 10); G1 aP = new G1(); G2 bQ = new G2(); aP.Mul(P, a); bQ.Mul(Q, b); GT e1 = new GT(); GT e2 = new GT(); GT e3 = new GT(); e1.Pairing(P, Q); e2.Pairing(aP, Q); e3.Pow(e1, a); assert("e2.Equals(e3)", e2.Equals(e3)); e2.Pairing(P, bQ); e3.Pow(e1, b); assert("e2.Equals(e3)", e2.Equals(e3)); }
public bool ValidateSignature(Signature signature, byte[] message) { var mappedMessage = new G2(); mappedMessage.SetHashOf(message); return(GT.Pairing(RawKey, mappedMessage).Equals(GT.Pairing(G1.Generator, signature.RawSignature))); }
public PartiallyDecryptedShare Decrypt(EncryptedShare share) { return(DecryptBenchmark.Benchmark(() => { var h = Utils.HashToG2(share.U, share.V); if (!GT.Pairing(G1.Generator, share.W).Equals(GT.Pairing(share.U, h))) { throw new Exception("Invalid share!"); } var ui = share.U * _x; return new PartiallyDecryptedShare(ui, _id, share.Id); })); }
public void PairingTest() { var a = Fr.GetRandom(); var b = Fr.GetRandom(); var A = G1.Generator * a; var B = G2.Generator * b; var X = GT.Pairing(A, B); var Y = GT.Pow(GT.Pairing(G1.Generator, G2.Generator), a * b); Assert.True(X.Equals(Y)); }
public void TestPairing() { var fr1 = Fr.GetRandom(); var fr2 = Fr.GetRandom(); var rndG1 = G1.Generator * fr1; var rndG2 = G2.Generator * fr2; Assert.AreEqual(GT.One, GT.Pairing(G1.Zero, G2.Zero)); Assert.AreEqual(GT.One, GT.Pairing(G1.Zero, rndG2)); Assert.AreEqual(GT.One, GT.Pairing(rndG1, G2.Zero)); var generatorsPairing = GT.Pairing(G1.Generator, G2.Generator); Assert.AreEqual(GT.Pow(generatorsPairing, fr1 * fr2), GT.Pairing(rndG1, rndG2)); }
public void TestMillerLoop() { var p = G1.Generator * Fr.GetRandom(); var q = G2.Generator * Fr.GetRandom(); Assert.AreEqual( GT.Pairing(p, q), GT.FinalExp(GT.MillerLoop(p, q)) ); var r = G1.Generator * Fr.GetRandom(); var s = G2.Generator * Fr.GetRandom(); var pqLoop = GT.MillerLoop(p, q); var rsLoop = GT.MillerLoop(r, s); Assert.AreEqual( GT.Pairing(p, q) * GT.Pairing(r, s), GT.FinalExp(pqLoop * rsLoop) ); }