Ejemplo n.º 1
0
        public BigInteger CalculateMessage()
        {
            DHKeyPairGenerator dHKeyPairGenerator = new DHKeyPairGenerator();

            dHKeyPairGenerator.Init(new DHKeyGenerationParameters(this.random, this.dhParams));
            AsymmetricCipherKeyPair asymmetricCipherKeyPair = dHKeyPairGenerator.GenerateKeyPair();

            this.privateValue = ((DHPrivateKeyParameters)asymmetricCipherKeyPair.Private).X;
            return(((DHPublicKeyParameters)asymmetricCipherKeyPair.Public).Y);
        }
Ejemplo n.º 2
0
        private DHKeyPairGenerator getDHKeyPairGenerator(BigInteger g, BigInteger p)
        {
            DHParameters dhParams = new DHParameters(p, g);
            DHKeyGenerationParameters dhkgParams = new DHKeyGenerationParameters(new SecureRandom(), dhParams);
            DHKeyPairGenerator        kpGen      = new DHKeyPairGenerator();

            kpGen.Init(dhkgParams);

            return(kpGen);
        }
Ejemplo n.º 3
0
        /**
         * calculate our initial message.
         */
        public IBigInteger CalculateMessage()
        {
            var dhGen = new DHKeyPairGenerator();

            dhGen.Init(new DHKeyGenerationParameters(_random, _dhParams));

            var dhPair = dhGen.GenerateKeyPair();

            _privateValue = ((DHPrivateKeyParameters)dhPair.Private).X;

            return(((DHPublicKeyParameters)dhPair.Public).Y);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Create a key pair for according to the key size
        /// </summary>
        /// <param name="keySize">the key size in bits</param>
        public void CreateKeyPair(int keySize)
        {
            var dhParamGen = new DHParametersGenerator();

            dhParamGen.Init(keySize, 20, new SecureRandom());
            var dhParams = dhParamGen.GenerateParameters();
            var keyGenerationParameters = new DHKeyGenerationParameters(new SecureRandom(), dhParams);
            var keyGenerator            = new DHKeyPairGenerator();

            keyGenerator.Init(keyGenerationParameters);
            keyPair = keyGenerator.GenerateKeyPair();
        }
Ejemplo n.º 5
0
        private void doTestDH(
            int size,
            BigInteger g,
            BigInteger p)
        {
            DHKeyPairGenerator kpGen = getDHKeyPairGenerator(g, p);

            //
            // generate first pair
            //
            AsymmetricCipherKeyPair pair = kpGen.GenerateKeyPair();

            DHPublicKeyParameters  pu1 = (DHPublicKeyParameters)pair.Public;
            DHPrivateKeyParameters pv1 = (DHPrivateKeyParameters)pair.Private;

            //
            // generate second pair
            //
            pair = kpGen.GenerateKeyPair();

            DHPublicKeyParameters  pu2 = (DHPublicKeyParameters)pair.Public;
            DHPrivateKeyParameters pv2 = (DHPrivateKeyParameters)pair.Private;

            //
            // two way
            //
            DHAgreement e1 = new DHAgreement();
            DHAgreement e2 = new DHAgreement();

            e1.Init(pv1);
            e2.Init(pv2);

            BigInteger m1 = e1.CalculateMessage();
            BigInteger m2 = e2.CalculateMessage();

            BigInteger k1 = e1.CalculateAgreement(pu2, m2);
            BigInteger k2 = e2.CalculateAgreement(pu1, m1);

            if (!k1.Equals(k2))
            {
                Fail(size + " bit 2-way test failed");
            }
        }
Ejemplo n.º 6
0
        private void doTestGPWithRandom(
            DHKeyPairGenerator kpGen)
        {
            //
            // generate first pair
            //
            AsymmetricCipherKeyPair pair = kpGen.GenerateKeyPair();

            DHPublicKeyParameters  pu1 = (DHPublicKeyParameters)pair.Public;
            DHPrivateKeyParameters pv1 = (DHPrivateKeyParameters)pair.Private;

            //
            // generate second pair
            //
            pair = kpGen.GenerateKeyPair();

            DHPublicKeyParameters  pu2 = (DHPublicKeyParameters)pair.Public;
            DHPrivateKeyParameters pv2 = (DHPrivateKeyParameters)pair.Private;

            //
            // two way
            //
            DHAgreement e1 = new DHAgreement();
            DHAgreement e2 = new DHAgreement();

            e1.Init(new ParametersWithRandom(pv1, new SecureRandom()));
            e2.Init(new ParametersWithRandom(pv2, new SecureRandom()));

            BigInteger m1 = e1.CalculateMessage();
            BigInteger m2 = e2.CalculateMessage();

            BigInteger k1 = e1.CalculateAgreement(pu2, m2);
            BigInteger k2 = e2.CalculateAgreement(pu1, m1);

            if (!k1.Equals(k2))
            {
                Fail("basic with random 2-way test failed");
            }
        }
Ejemplo n.º 7
0
        public void TestDH()
        {
            BigInteger g512 = new BigInteger("153d5d6172adb43045b68ae8e1de1070b6137005686d29d3d73a7749199681ee5b212c9b96bfdcfa5b20cd5e3fd2044895d609cf9b410b7a0f12ca1cb9a428cc", 16);
            BigInteger p512 = new BigInteger("9494fec095f3b85ee286542b3836fc81a5dd0a0349b4c239dd38744d488cf8e31db8bcb7d33b41abb9e5a33cca9144b1cef332c94bf0573bf047a3aca98cdf3b", 16);

            DHParameters dhParams = new DHParameters(p512, g512);
            DHKeyGenerationParameters parameters = new DHKeyGenerationParameters(new SecureRandom(), dhParams);         DHKeyPairGenerator kpGen = new DHKeyPairGenerator();

            kpGen.Init(parameters);

            AsymmetricCipherKeyPair pair = kpGen.GenerateKeyPair();
            DHPublicKeyParameters   pu1  = (DHPublicKeyParameters)pair.Public;
            DHPrivateKeyParameters  pv1  = (DHPrivateKeyParameters)pair.Private;

            DHPublicKeyParameters  pu2 = new DHPublicKeyParameters(pu1.Y, pu1.Parameters);
            DHPrivateKeyParameters pv2 = new DHPrivateKeyParameters(pv1.X, pv1.Parameters);
            DHPublicKeyParameters  pu3 = new DHPublicKeyParameters(pv1.X, pu1.Parameters);
            DHPrivateKeyParameters pv3 = new DHPrivateKeyParameters(pu1.Y, pu1.Parameters);

            doTest(pu1, pu2, pu3);
            doTest(pv1, pv2, pv3);

            DHParameters pr1 = pu1.Parameters;
            DHParameters pr2 = new DHParameters(
                pr1.P, pr1.G, pr1.Q, pr1.M, pr1.L, pr1.J, pr1.ValidationParameters);
            DHParameters pr3 = new DHParameters(
                pr1.P.Add(BigInteger.Two), pr1.G, pr1.Q, pr1.M, pr1.L, pr1.J, pr1.ValidationParameters);

            doTest(pr1, pr2, pr3);

            pr3 = new DHParameters(
                pr1.P, pr1.G.Add(BigInteger.One), pr1.Q, pr1.M, pr1.L, pr1.J, pr1.ValidationParameters);

            doTest(pr1, pr2, pr3);

            pu2 = new DHPublicKeyParameters(pu1.Y, pr2);
            pv2 = new DHPrivateKeyParameters(pv1.X, pr2);

            doTest(pu1, pu2, pu3);
            doTest(pv1, pv2, pv3);

            DHValidationParameters vp1 = new DHValidationParameters(new byte[20], 1024);
            DHValidationParameters vp2 = new DHValidationParameters(new byte[20], 1024);
            DHValidationParameters vp3 = new DHValidationParameters(new byte[24], 1024);

            doTest(vp1, vp1, vp3);
            doTest(vp1, vp2, vp3);

            byte[] bytes = new byte[20];
            bytes[0] = 1;

            vp3 = new DHValidationParameters(bytes, 1024);

            doTest(vp1, vp2, vp3);

            vp3 = new DHValidationParameters(new byte[20], 2048);

            doTest(vp1, vp2, vp3);

            DHTestKeyParameters k1 = new DHTestKeyParameters(false, null);
            DHTestKeyParameters k2 = new DHTestKeyParameters(false, null);
            DHTestKeyParameters k3 = new DHTestKeyParameters(false, pu1.Parameters);

            doTest(k1, k2, k3);
        }
Ejemplo n.º 8
0
        public override void PerformTest()
        {
            doTestDHBasic(512, 0, g512, p512);
            doTestDHBasic(768, 0, g768, p768);
            doTestDHBasic(1024, 0, g1024, p1024);

            doTestDHBasic(512, 64, g512, p512);
            doTestDHBasic(768, 128, g768, p768);
            doTestDHBasic(1024, 256, g1024, p1024);

            doTestDH(512, g512, p512);
            doTestDH(768, g768, p768);
            doTestDH(1024, g1024, p1024);

            //
            // generation test.
            //
            doTestGeneration(256);

            //
            // with random test
            //
            DHBasicKeyPairGenerator kpBasicGen = getDHBasicKeyPairGenerator(g512, p512, 0);

            doTestSimpleWithRandom(kpBasicGen);

            DHKeyPairGenerator kpGen = getDHKeyPairGenerator(g512, p512);

            doTestGPWithRandom(kpGen);

            //
            // parameter tests
            //
            DHAgreement             dh     = new DHAgreement();
            AsymmetricCipherKeyPair dhPair = kpGen.GenerateKeyPair();

            try
            {
                dh.Init(dhPair.Public);
                Fail("DHAgreement key check failed");
            }
            catch (ArgumentException)
            {
                // ignore
            }

            DHKeyPairGenerator kpGen768 = getDHKeyPairGenerator(g768, p768);

            try
            {
                dh.Init(dhPair.Private);

                dh.CalculateAgreement((DHPublicKeyParameters)kpGen768.GenerateKeyPair().Public, BigInteger.ValueOf(100));

                Fail("DHAgreement agreement check failed");
            }
            catch (ArgumentException)
            {
                // ignore
            }

            DHBasicAgreement        dhBasic     = new DHBasicAgreement();
            AsymmetricCipherKeyPair dhBasicPair = kpBasicGen.GenerateKeyPair();

            try
            {
                dhBasic.Init(dhBasicPair.Public);
                Fail("DHBasicAgreement key check failed");
            }
            catch (ArgumentException)
            {
                // expected
            }

            DHBasicKeyPairGenerator kpBasicGen768 = getDHBasicKeyPairGenerator(g768, p768, 0);

            try
            {
                dhBasic.Init(dhPair.Private);

                dhBasic.CalculateAgreement((DHPublicKeyParameters)kpBasicGen768.GenerateKeyPair().Public);

                Fail("DHBasicAgreement agreement check failed");
            }
            catch (ArgumentException)
            {
                // expected
            }
        }