예제 #1
0
        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;
                }
            }
        }