示例#1
0
        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);
        }
示例#2
0
        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();
            }
        }
示例#3
0
        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);
        }