Пример #1
0
        public void TestElGamal()
        {
            BigInteger g512 = new BigInteger("153d5d6172adb43045b68ae8e1de1070b6137005686d29d3d73a7749199681ee5b212c9b96bfdcfa5b20cd5e3fd2044895d609cf9b410b7a0f12ca1cb9a428cc", 16);
            BigInteger p512 = new BigInteger("9494fec095f3b85ee286542b3836fc81a5dd0a0349b4c239dd38744d488cf8e31db8bcb7d33b41abb9e5a33cca9144b1cef332c94bf0573bf047a3aca98cdf3b", 16);

            ElGamalParameters dhParams = new ElGamalParameters(p512, g512);
            ElGamalKeyGenerationParameters parameters = new ElGamalKeyGenerationParameters(new SecureRandom(), dhParams);         ElGamalKeyPairGenerator kpGen = new ElGamalKeyPairGenerator();

            kpGen.Init(parameters);

            AsymmetricCipherKeyPair     pair = kpGen.GenerateKeyPair();
            ElGamalPublicKeyParameters  pu1  = (ElGamalPublicKeyParameters)pair.Public;
            ElGamalPrivateKeyParameters pv1  = (ElGamalPrivateKeyParameters)pair.Private;

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

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

            ElGamalParameters pr1 = pu1.Parameters;
            ElGamalParameters pr2 = new ElGamalParameters(pr1.P, pr1.G);
            ElGamalParameters pr3 = new ElGamalParameters(pr1.G, pr1.P);

            doTest(pr1, pr2, pr3);

            pu2 = new ElGamalPublicKeyParameters(pu1.Y, pr2);
            pv2 = new ElGamalPrivateKeyParameters(pv1.X, pr2);

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

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

            doTest(k1, k2, k3);
        }
Пример #2
0
		public void TestElGamal()
		{
			BigInteger g512 = new BigInteger("153d5d6172adb43045b68ae8e1de1070b6137005686d29d3d73a7749199681ee5b212c9b96bfdcfa5b20cd5e3fd2044895d609cf9b410b7a0f12ca1cb9a428cc", 16);
			BigInteger p512 = new BigInteger("9494fec095f3b85ee286542b3836fc81a5dd0a0349b4c239dd38744d488cf8e31db8bcb7d33b41abb9e5a33cca9144b1cef332c94bf0573bf047a3aca98cdf3b", 16);

			ElGamalParameters dhParams = new ElGamalParameters(p512, g512);
			ElGamalKeyGenerationParameters parameters = new ElGamalKeyGenerationParameters(new SecureRandom(), dhParams);         ElGamalKeyPairGenerator kpGen = new ElGamalKeyPairGenerator();

			kpGen.Init(parameters);

			AsymmetricCipherKeyPair pair = kpGen.GenerateKeyPair();
			ElGamalPublicKeyParameters pu1 = (ElGamalPublicKeyParameters)pair.Public;
			ElGamalPrivateKeyParameters pv1 = (ElGamalPrivateKeyParameters)pair.Private;

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

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

			ElGamalParameters pr1 = pu1.Parameters;
			ElGamalParameters pr2 = new ElGamalParameters(pr1.P, pr1.G);
			ElGamalParameters pr3 = new ElGamalParameters(pr1.G, pr1.P);

			doTest(pr1, pr2, pr3);

			pu2 = new ElGamalPublicKeyParameters(pu1.Y, pr2);
			pv2 = new ElGamalPrivateKeyParameters(pv1.X, pr2);

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

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

			doTest(k1, k2, k3);
		}