public void TestSumOfTwoMultiplies() { foreach (X9ECParameters x9 in GetTestCurves()) { ECPoint p = GetRandomPoint(x9); BigInteger a = GetRandomScalar(x9); for (int i = 0; i < SCALE; ++i) { ECPoint q = GetRandomPoint(x9); BigInteger b = GetRandomScalar(x9); ECPoint u = p.Multiply(a).Add(q.Multiply(b)); ECPoint v = ECAlgorithms.ShamirsTrick(p, a, q, b); ECPoint w = ECAlgorithms.SumOfTwoMultiplies(p, a, q, b); ECPoint[] results = new ECPoint[] { u, v, w }; x9.Curve.NormalizeAll(results); AssertPointsEqual("ECAlgorithms.ShamirsTrick is incorrect", results[0], results[1]); AssertPointsEqual("ECAlgorithms.SumOfTwoMultiplies is incorrect", results[0], results[2]); p = q; a = b; } } }