public void CanCreateFromEC() { using (var ec = new Key()) { using (var group = Group.FromCurveName(Objects.NID.X9_62_prime256v1)) { ec.Group = group; } ec.GenerateKey(); using (var key = new CryptoKey(ec)) { Assert.AreEqual(CryptoKey.KeyType.EC, key.Type); Assert.AreEqual(ec.Size, key.Size); Assert.AreEqual(ec.Handle, key.GetEC().Handle); } using (var key = new CryptoKey()) { key.Assign(ec); Assert.AreEqual(ec.Handle, key.GetEC().Handle); } } }
public void test_builtin() { /* fill digest values with some random data */ byte[] digest = Random.PseudoBytes(20); byte[] wrong_digest = Random.PseudoBytes(20); /* create and verify a ecdsa signature with every availble curve * (with ) */ Console.WriteLine("testing ECDSA_sign() and ECDSA_verify() with some internal curves:"); /* get a list of all internal curves */ BuiltinCurve[] curves = BuiltinCurve.Get(); /* now create and verify a signature for every curve */ foreach (BuiltinCurve curve in curves) { if (curve.Object.NID == Objects.NID.ipsec4.NID) continue; /* create new ecdsa key (== EC_KEY) */ using(Key eckey = new Key()) { using(Group group = Group.FromCurveName(curve.Object)) { eckey.Group = group; } if (eckey.Group.Degree < 160) { /* drop the curve */ continue; } Console.Write("{0}: ", curve.Object.ShortName); /* create key */ eckey.GenerateKey(); /* create second key */ using(Key wrong_eckey = new Key()) { using(Group group = Group.FromCurveName(curve.Object)) { wrong_eckey.Group = group; } wrong_eckey.GenerateKey(); Console.Write("."); /* check key */ Assert.IsTrue(eckey.CheckKey()); Console.Write("."); /* create signature */ byte[] signature = new byte[eckey.Size]; eckey.Sign(0, digest, signature); Console.Write("."); /* verify signature */ Assert.IsTrue(eckey.Verify(0, digest, signature)); Console.Write("."); /* verify signature with the wrong key */ Assert.IsFalse(wrong_eckey.Verify(0, digest, signature)); Console.Write("."); /* wrong digest */ Assert.IsFalse(eckey.Verify(0, wrong_digest, signature)); Console.Write("."); Console.WriteLine(" ok"); } } } }