Пример #1
0
        private void X448_TestVector_3(int i, string HexResult)
        {
            MontgomeryCurve C = new Curve448();
            BigInteger      N = 5;
            BigInteger      U = 5;
            BigInteger      NU;

            while (i-- > 0)
            {
                byte[] NBin = N.ToByteArray();
                if (NBin.Length != 56)
                {
                    Array.Resize <byte>(ref NBin, 56);
                }

                NBin[0]  &= 0xfc;
                NBin[55] |= 0x80;

                NU = C.ScalarMultiplication(NBin, U);

                U = N;
                N = NU;
            }

            byte[]     A   = Hashes.StringToBinary(HexResult);
            BigInteger NU0 = new BigInteger(A);

            Assert.AreEqual(NU0, NU);
        }
Пример #2
0
        public void Test_16_X448_TestVector_1()
        {
            byte[] A = Hashes.StringToBinary("3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3");
            A[0]  &= 252;
            A[55] |= 128;
            Array.Resize(ref A, 57);
            BigInteger N0 = new BigInteger(A);
            BigInteger N  = BigInteger.Parse("599189175373896402783756016145213256157230856085026129926891459468622403380588640249457727683869421921443004045221642549886377526240828");

            Assert.AreEqual(N, N0);

            A = Hashes.StringToBinary("06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086");
            Array.Resize(ref A, 57);
            BigInteger U0 = new BigInteger(A);
            BigInteger U  = BigInteger.Parse("382239910814107330116229961234899377031416365240571325148346555922438025162094455820962429142971339584360034337310079791515452463053830");

            Assert.AreEqual(U, U0);

            A = Hashes.StringToBinary("ce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f");
            Array.Resize(ref A, 57);
            BigInteger      NU0 = new BigInteger(A);
            MontgomeryCurve C   = new Curve448();
            BigInteger      NU  = C.ScalarMultiplication(N, U);

            Assert.AreEqual(NU0, NU);
        }
Пример #3
0
        public void Test_17_X448_TestVector_2()
        {
            byte[] A = Hashes.StringToBinary("203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095f");
            A[0]  &= 252;
            A[55] |= 128;
            Array.Resize(ref A, 57);
            BigInteger N0 = new BigInteger(A);
            BigInteger N  = BigInteger.Parse("633254335906970592779259481534862372382525155252028961056404001332122152890562527156973881968934311400345568203929409663925541994577184");

            Assert.AreEqual(N, N0);

            A = Hashes.StringToBinary("0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157db");
            Array.Resize(ref A, 57);
            BigInteger U0 = new BigInteger(A);
            BigInteger U  = BigInteger.Parse("622761797758325444462922068431234180649590390024811299761625153767228042600197997696167956134770744996690267634159427999832340166786063");

            Assert.AreEqual(U, U0);

            A = Hashes.StringToBinary("884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179d");
            Array.Resize(ref A, 57);
            BigInteger      NU0 = new BigInteger(A);
            MontgomeryCurve C   = new Curve448();
            BigInteger      NU  = C.ScalarMultiplication(N, U);

            Assert.AreEqual(NU0, NU);
        }
Пример #4
0
        public void Test_08_Coordinates_448()
        {
            MontgomeryCurve C = new Curve448();

            PointOnCurve UV = C.BasePoint;
            PointOnCurve XY = C.ToXY(UV);

            Edwards448   C2  = new Edwards448();
            PointOnCurve XY4 = C2.ScalarMultiplication(4, C2.BasePoint, true);  // 4-isogeny

            Assert.AreEqual(XY4.X, XY.X);
            Assert.AreEqual(XY4.Y, XY.Y);

            PointOnCurve UV2 = C.ToUV(XY);
            PointOnCurve UV4 = C.ScalarMultiplication(4, C.BasePoint, true);

            Assert.AreEqual(UV4.X, UV2.X);

            BigInteger V4 = C.CalcV(UV4.X);

            Assert.IsTrue(V4 == UV2.Y || (C.Prime - V4) == UV2.Y);
        }