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); }
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); }
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); }
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); }