Exemple #1
0
        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");
                    }
                }
            }
        }
Exemple #2
0
 public static TweenCurve Get(BuiltinCurve curve)
 {
     return(Get(curve.ToString()));
 }