Marco หงุ่ยตระกูล-Schulze
2014-09-17 04:13:03 UTC
Hello *,
I tried to sign (and verify) using ElGamal in analogy to RSA like this:
AsymmetricCipherKeyPairGenerator keyPairGenerator = new
ElGamalKeyPairGenerator();
// Found here:
http://stackoverflow.com/questions/13733260/generate-dsa-elgamal-key-pair-with-bouncy-castle-that-imports-in-gpg-without-err
// Generating a safe prime is a very long process so it's better to use
// a pre-generated safe prime, I took this from
http://www.cryptopp.com/fom-serve/cache/71.html
BigInteger primeModulous = new BigInteger("36F0255DDE....
BigInteger baseGenerator = new BigInteger("2", 16);
keyPairGenerator.init(new ElGamalKeyGenerationParameters(random, new
ElGamalParameters(primeModulous, baseGenerator)));
AsymmetricCipherKeyPair keyPair = keyPairGenerator.generateKeyPair();
Signer signer = new GenericSigner(new ElGamalEngine(), new SHA1Digest());
signer.init(true, keyPair.getPrivate());
The last line fails:
java.lang.IllegalArgumentException: ElGamalPublicKeyParameters are
required for encryption.
at org.bouncycastle.crypto.engines.ElGamalEngine.init(Unknown Source)
at org.bouncycastle.crypto.signers.GenericSigner.init(Unknown Source)
at
co.codewizards.bc20140916.BcSignerTest.signAndVerifyElGamalManyRoundsGeneratedKey(BcSignerTest.java:172)
...
Is this a bug or does this mean, I cannot use every
AsymmetricBlockCipher with a GenericSigner? Which are supported besides
RSAEngine?
Best regards, Marco :-)
I tried to sign (and verify) using ElGamal in analogy to RSA like this:
AsymmetricCipherKeyPairGenerator keyPairGenerator = new
ElGamalKeyPairGenerator();
// Found here:
http://stackoverflow.com/questions/13733260/generate-dsa-elgamal-key-pair-with-bouncy-castle-that-imports-in-gpg-without-err
// Generating a safe prime is a very long process so it's better to use
// a pre-generated safe prime, I took this from
http://www.cryptopp.com/fom-serve/cache/71.html
BigInteger primeModulous = new BigInteger("36F0255DDE....
BigInteger baseGenerator = new BigInteger("2", 16);
keyPairGenerator.init(new ElGamalKeyGenerationParameters(random, new
ElGamalParameters(primeModulous, baseGenerator)));
AsymmetricCipherKeyPair keyPair = keyPairGenerator.generateKeyPair();
Signer signer = new GenericSigner(new ElGamalEngine(), new SHA1Digest());
signer.init(true, keyPair.getPrivate());
The last line fails:
java.lang.IllegalArgumentException: ElGamalPublicKeyParameters are
required for encryption.
at org.bouncycastle.crypto.engines.ElGamalEngine.init(Unknown Source)
at org.bouncycastle.crypto.signers.GenericSigner.init(Unknown Source)
at
co.codewizards.bc20140916.BcSignerTest.signAndVerifyElGamalManyRoundsGeneratedKey(BcSignerTest.java:172)
...
Is this a bug or does this mean, I cannot use every
AsymmetricBlockCipher with a GenericSigner? Which are supported besides
RSAEngine?
Best regards, Marco :-)