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]; var sigSize = eckey.Sign(0, digest, signature); Array.Resize(ref signature, (int)sigSize); Console.Write("."); /* verify signature */ var verifyResult = eckey.Verify(0, digest, signature); Assert.IsTrue(verifyResult); 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"); } } } }
public static TweenCurve Get(BuiltinCurve curve) { return(Get(curve.ToString())); }