private void doTest(ECPrivateKeyParameters priKey, ParametersWithRandom pRandom, BigInteger value) { ECPoint data = priKey.getParameters().getG().multiply(value); ECEncryptor encryptor = new ECElGamalEncryptor(); encryptor.init(pRandom); ECPair pair = encryptor.encrypt(data); ECKeyPairGenerator ecGen = new ECKeyPairGenerator(); ecGen.init(new ECKeyGenerationParameters(priKey.getParameters(), new SecureRandom())); AsymmetricCipherKeyPair reEncKP = ecGen.generateKeyPair(); ECPairTransform ecr = new ECNewPublicKeyTransform(); ecr.init(reEncKP.getPublic()); ECPair srcPair = pair; // re-encrypt the message portion pair = ecr.transform(srcPair); ECDecryptor decryptor = new ECElGamalDecryptor(); decryptor.init(priKey); // decrypt out the original private key ECPoint p = decryptor.decrypt(new ECPair(srcPair.getX(), pair.getY())); decryptor.init(reEncKP.getPrivate()); // decrypt the fully transformed point. ECPoint result = decryptor.decrypt(new ECPair(pair.getX(), p)); if (!data.equals(result)) { fail("point pair failed to decrypt back to original"); } }