public AsymmetricCipherKeyPair generateKeyPair() { BigInteger p, g, x, y; int qLength = param.getStrength() - 1; ElGamalParameters elParams = param.getParameters(); p = elParams.getP(); g = elParams.getG(); // // calculate the private key // x = new BigInteger(qLength, param.getRandom()); // // calculate the public key. // y = g.modPow(x, p); return new AsymmetricCipherKeyPair( new ElGamalPublicKeyParameters(y, elParams), new ElGamalPrivateKeyParameters(x, elParams)); }
private void testInvalidP() { ElGamalParameters dhParams = new ElGamalParameters(pPgpBogusPSamp, gPgpBogusPSamp, lPgpBogusPSamp); ElGamalPublicKeyParameters pu = new ElGamalPublicKeyParameters(yPgpBogusPSamp, dhParams); ElGamalPrivateKeyParameters pv = new ElGamalPrivateKeyParameters(xPgpBogusPSamp, dhParams); ElGamalEngine e = new ElGamalEngine(); e.init(true, pu); byte[] message = Hex.decode("5468697320697320612074657374"); byte[] pText = message; byte[] cText = e.processBlock(pText, 0, pText.length); e.init(false, pv); pText = e.processBlock(cText, 0, cText.length); if (Arrays.areEqual(message, pText)) { fail("invalid test failed"); } }
public AsymmetricCipherKeyPair generateKeyPair() { DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE; ElGamalParameters egp = param.getParameters(); DHParameters dhp = new DHParameters(egp.getP(), egp.getG(), null, egp.getL()); BigInteger x = helper.calculatePrivate(dhp, param.getRandom()); BigInteger y = helper.calculatePublic(dhp, x); return new AsymmetricCipherKeyPair( new ElGamalPublicKeyParameters(y, egp), new ElGamalPrivateKeyParameters(x, egp)); }
static public AsymmetricKeyParameter generatePrivateKeyParameter( PrivateKey key) throws InvalidKeyException { if (key instanceof ElGamalPrivateKey) { ElGamalPrivateKey k = (ElGamalPrivateKey)key; return new ElGamalPrivateKeyParameters(k.getX(), new ElGamalParameters(k.getParams().getP(), k.getParams().getG())); } throw new InvalidKeyException("can't identify ElGamal private key."); }
private void checkKeySize( int privateValueSize, ElGamalPrivateKeyParameters priv) { if (privateValueSize != 0) { if (priv.getX().bitLength() != privateValueSize) { fail("limited key check failed for key size " + privateValueSize); } } }
@Override public byte[] decryptWithPrivateKey(byte[] data) { ElGamalParameters params = new ElGamalParameters(keys.getP(), keys.getG()); ElGamalPrivateKeyParameters privKey = new ElGamalPrivateKeyParameters(keys.getPrivateKey(), params); ElGamalEngine e = new ElGamalEngine(); e.init(false, privKey); return e.processBlock(data, 0, data.length) ; }
/** * This method is used to generate Public Key and Private Key * @param params */ private void GenerateKeys(ElGamalParameters params, String password){ ElGamalKeyGenerationParameters elGP = new ElGamalKeyGenerationParameters(random,params); ElGamalKeyPairGenerator KeyPair = new ElGamalKeyPairGenerator(); KeyPair.init(elGP); AsymmetricCipherKeyPair cipher1 = KeyPair.generateKeyPair(); publicKey = ((ElGamalPublicKeyParameters) cipher1.getPublic()).getY(); privateKey = ((ElGamalPrivateKeyParameters)cipher1.getPrivate()).getX(); wellGenerated = true; encryptPrivateKey(password); }
@Test public void generates1536bitKeys() throws Exception { final AsymmetricCipherKeyPair pair = ElgamalKeyGenerator.elgamal1536().generate(random); assertThat(pair.getPrivate()) .isInstanceOf(ElGamalPrivateKeyParameters.class); final ElGamalPrivateKeyParameters privateKeys = (ElGamalPrivateKeyParameters) pair.getPrivate(); assertThat(privateKeys.getParameters().getP().toByteArray().length) .isEqualTo(193); }
@Test public void generates2048bitKeys() throws Exception { final AsymmetricCipherKeyPair pair = ElgamalKeyGenerator.elgamal2048().generate(random); assertThat(pair.getPrivate()) .isInstanceOf(ElGamalPrivateKeyParameters.class); final ElGamalPrivateKeyParameters privateKeys = (ElGamalPrivateKeyParameters) pair .getPrivate(); assertThat(privateKeys.getParameters().getP().toByteArray().length) .isEqualTo(257); }
@Test public void generates4096bitKeys() throws Exception { final AsymmetricCipherKeyPair pair = ElgamalKeyGenerator.elgamal4096().generate(random); assertThat(pair.getPrivate()) .isInstanceOf(ElGamalPrivateKeyParameters.class); final ElGamalPrivateKeyParameters privateKeys = (ElGamalPrivateKeyParameters) pair .getPrivate(); assertThat(privateKeys.getParameters().getP().toByteArray().length) .isEqualTo(513); }
@Test public void generates8192bitKeys() throws Exception { final AsymmetricCipherKeyPair pair = ElgamalKeyGenerator.elgamal8192().generate(random); assertThat(pair.getPrivate()) .isInstanceOf(ElGamalPrivateKeyParameters.class); final ElGamalPrivateKeyParameters privateKeys = (ElGamalPrivateKeyParameters) pair .getPrivate(); assertThat(privateKeys.getParameters().getP().toByteArray().length) .isEqualTo(1025); }
JCEElGamalPrivateKey( ElGamalPrivateKeyParameters params) { this.x = params.getX(); this.elSpec = new ElGamalParameterSpec(params.getParameters().getP(), params.getParameters().getG()); }
BCElGamalPrivateKey( ElGamalPrivateKeyParameters params) { this.x = params.getX(); this.elSpec = new ElGamalParameterSpec(params.getParameters().getP(), params.getParameters().getG()); }
/** * this test is can take quiet a while * * @param size size of key in bits. */ private void testGeneration( int size) { ElGamalParametersGenerator pGen = new ElGamalParametersGenerator(); pGen.init(size, 10, new SecureRandom()); ElGamalParameters elParams = pGen.generateParameters(); if (elParams.getL() != 0) { fail("ElGamalParametersGenerator failed to set L to 0 in generated ElGamalParameters"); } ElGamalKeyGenerationParameters params = new ElGamalKeyGenerationParameters(new SecureRandom(), elParams); ElGamalKeyPairGenerator kpGen = new ElGamalKeyPairGenerator(); kpGen.init(params); // // generate first pair // AsymmetricCipherKeyPair pair = kpGen.generateKeyPair(); ElGamalPublicKeyParameters pu = (ElGamalPublicKeyParameters)pair.getPublic(); ElGamalPrivateKeyParameters pv = (ElGamalPrivateKeyParameters)pair.getPrivate(); ElGamalEngine e = new ElGamalEngine(); e.init(true, new ParametersWithRandom(pu, new SecureRandom())); byte[] message = Hex.decode("5468697320697320612074657374"); byte[] pText = message; byte[] cText = e.processBlock(pText, 0, pText.length); e.init(false, pv); pText = e.processBlock(cText, 0, cText.length); if (!Arrays.areEqual(message, pText)) { fail("generation test failed"); } }