Пример #1
0
        private void test_ecdh_curve(Asn1Object obj, string text, BigNumber.Context ctx)
        {
            Key       a   = Key.FromCurveName(obj);
            Key       b   = Key.FromCurveName(obj);
            BigNumber x_a = new BigNumber();
            BigNumber y_a = new BigNumber();
            BigNumber x_b = new BigNumber();
            BigNumber y_b = new BigNumber();

            try {
                Console.Write("Testing key generation with {0}", text);

                a.GenerateKey();
                if (a.Group.Method.FieldType == Objects.NID.X9_62_prime_field.NID)
                {
                    a.PublicKey.GetAffineCoordinatesGFp(x_a, y_a, ctx);
                }
                else
                {
                    a.PublicKey.GetAffineCoordinatesGF2m(x_a, y_a, ctx);
                }
                Console.Write(".");

                b.GenerateKey();
                if (b.Group.Method.FieldType == Objects.NID.X9_62_prime_field.NID)
                {
                    b.PublicKey.GetAffineCoordinatesGFp(x_b, y_b, ctx);
                }
                else
                {
                    b.PublicKey.GetAffineCoordinatesGF2m(x_b, y_b, ctx);
                }
                Console.Write(".");

                byte[] abuf = new byte[MessageDigest.SHA1.Size];
                int    aout = a.ComputeKey(b, abuf, KDF1_SHA1);
                Console.Write(".");

                byte[] bbuf = new byte[MessageDigest.SHA1.Size];
                int    bout = b.ComputeKey(a, bbuf, KDF1_SHA1);
                Console.Write(".");

                Assert.Greater(aout, 4);
                Assert.AreEqual(aout, bout);
                Assert.IsTrue(Compare(abuf, bbuf));

                Console.Write(" ok");
            }
            finally {
                a.Dispose();
                b.Dispose();
                x_a.Dispose();
                y_a.Dispose();
                x_b.Dispose();
                y_b.Dispose();
            }

            Console.WriteLine();
        }
Пример #2
0
 public void TestCase()
 {
     using (BigNumber.Context ctx = new BigNumber.Context()) {
         /* NIST PRIME CURVES TESTS */
         test_ecdh_curve(Objects.NID.X9_62_prime192v1, "NIST Prime-Curve P-192", ctx);
         test_ecdh_curve(Objects.NID.secp224r1, "NIST Prime-Curve P-224", ctx);
         test_ecdh_curve(Objects.NID.X9_62_prime256v1, "NIST Prime-Curve P-256", ctx);
         test_ecdh_curve(Objects.NID.secp384r1, "NIST Prime-Curve P-384", ctx);
         test_ecdh_curve(Objects.NID.secp521r1, "NIST Prime-Curve P-521", ctx);
         /* NIST BINARY CURVES TESTS */
         test_ecdh_curve(Objects.NID.sect163k1, "NIST Binary-Curve K-163", ctx);
         test_ecdh_curve(Objects.NID.sect163r2, "NIST Binary-Curve B-163", ctx);
         test_ecdh_curve(Objects.NID.sect233k1, "NIST Binary-Curve K-233", ctx);
         test_ecdh_curve(Objects.NID.sect233r1, "NIST Binary-Curve B-233", ctx);
         test_ecdh_curve(Objects.NID.sect283k1, "NIST Binary-Curve K-283", ctx);
         test_ecdh_curve(Objects.NID.sect283r1, "NIST Binary-Curve B-283", ctx);
         test_ecdh_curve(Objects.NID.sect409k1, "NIST Binary-Curve K-409", ctx);
         test_ecdh_curve(Objects.NID.sect409r1, "NIST Binary-Curve B-409", ctx);
         test_ecdh_curve(Objects.NID.sect571k1, "NIST Binary-Curve K-571", ctx);
         test_ecdh_curve(Objects.NID.sect571r1, "NIST Binary-Curve B-571", ctx);
     }
 }
Пример #3
0
 /// <summary>
 /// Calls EC_POINT_get_affine_coordinates_GFp()
 /// </summary>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="ctx"></param>
 public void GetAffineCoordinatesGFp(BigNumber x, BigNumber y, BigNumber.Context ctx)
 {
     Native.ExpectSuccess(
         Native.EC_POINT_get_affine_coordinates_GFp(group.Handle, ptr, x.Handle, y.Handle, ctx.Handle)
         );
 }
Пример #4
0
		public void TestCase() {
			using (BigNumber.Context ctx = new BigNumber.Context()) {
				/* NIST PRIME CURVES TESTS */
				test_ecdh_curve(Objects.NID.X9_62_prime192v1, "NIST Prime-Curve P-192", ctx);
				test_ecdh_curve(Objects.NID.secp224r1, "NIST Prime-Curve P-224", ctx);
				test_ecdh_curve(Objects.NID.X9_62_prime256v1, "NIST Prime-Curve P-256", ctx);
				test_ecdh_curve(Objects.NID.secp384r1, "NIST Prime-Curve P-384", ctx);
				test_ecdh_curve(Objects.NID.secp521r1, "NIST Prime-Curve P-521", ctx);
				/* NIST BINARY CURVES TESTS */
				test_ecdh_curve(Objects.NID.sect163k1, "NIST Binary-Curve K-163", ctx);
				test_ecdh_curve(Objects.NID.sect163r2, "NIST Binary-Curve B-163", ctx);
				test_ecdh_curve(Objects.NID.sect233k1, "NIST Binary-Curve K-233", ctx);
				test_ecdh_curve(Objects.NID.sect233r1, "NIST Binary-Curve B-233", ctx);
				test_ecdh_curve(Objects.NID.sect283k1, "NIST Binary-Curve K-283", ctx);
				test_ecdh_curve(Objects.NID.sect283r1, "NIST Binary-Curve B-283", ctx);
				test_ecdh_curve(Objects.NID.sect409k1, "NIST Binary-Curve K-409", ctx);
				test_ecdh_curve(Objects.NID.sect409r1, "NIST Binary-Curve B-409", ctx);
				test_ecdh_curve(Objects.NID.sect571k1, "NIST Binary-Curve K-571", ctx);
				test_ecdh_curve(Objects.NID.sect571r1, "NIST Binary-Curve B-571", ctx);
			}
		}