private void TestScalarMultiplication(PrimeFieldCurve C) { Random Rnd = new Random(); int k1 = Rnd.Next(1000, 2000); int k2 = Rnd.Next(1000, 2000); int k3 = Rnd.Next(1000, 2000); PointOnCurve P1 = C.ScalarMultiplication(k1, C.PublicKeyPoint, true); PointOnCurve P2 = C.ScalarMultiplication(k2, C.PublicKeyPoint, true); PointOnCurve P3 = C.ScalarMultiplication(k3, C.PublicKeyPoint, true); PointOnCurve P = C.ScalarMultiplication(k1 + k2 + k3, C.PublicKeyPoint, true); C.AddTo(ref P1, P2); C.AddTo(ref P1, P3); P.Normalize(C); P1.Normalize(C); Assert.AreEqual(P, P1); P2 = C.Zero; k1 += k2; k1 += k3; while (k1-- > 0) { C.AddTo(ref P2, C.PublicKeyPoint); } P2.Normalize(C); Assert.AreEqual(P, P2); }
public void Test_ECDH(PrimeFieldCurve Curve1, PrimeFieldCurve Curve2) { int n; for (n = 0; n < 100; n++) { byte[] Key1 = Curve1.GetSharedKey(Curve2.PublicKey, Hashes.ComputeSHA256Hash); byte[] Key2 = Curve2.GetSharedKey(Curve1.PublicKey, Hashes.ComputeSHA256Hash); Assert.AreEqual(Hashes.BinaryToString(Key1), Hashes.BinaryToString(Key2)); Curve1.GenerateKeys(); Curve2.GenerateKeys(); } }
public void Test_Signature(PrimeFieldCurve Curve1, PrimeFieldCurve Curve2) { int n; int Ok = 0; int Errors = 0; using (RandomNumberGenerator rnd = RandomNumberGenerator.Create()) { for (n = 0; n < 100; n++) { byte[] Data = new byte[1024]; rnd.GetBytes(Data); try { byte[] Signature = Curve1.Sign(Data); bool Valid = Curve2.Verify(Data, Curve1.PublicKey, Signature); if (Valid) { Ok++; } else { Errors++; } } catch (Exception) { Errors++; } Curve1.GenerateKeys(); Curve2.GenerateKeys(); } } Assert.AreEqual(0, Errors); }