diff options
author | Casey Marshall <csm@gnu.org> | 2006-04-22 17:57:18 +0000 |
---|---|---|
committer | Casey Marshall <csm@gnu.org> | 2006-04-22 17:57:18 +0000 |
commit | b533ee3377a19da635e4f89efe1938597b5e5af0 (patch) | |
tree | 49c70e68b04b77045c84e409757cf321529ace7f /gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java | |
parent | a4afaf34e4de7767915b42800c78b70e5c2e7753 (diff) | |
download | classpath-b533ee3377a19da635e4f89efe1938597b5e5af0.tar.gz |
2006-04-22 Casey Marshall <csm@gnu.org>
Fixes PR classpath/27228.
* gnu/javax/crypto/jce/sig/DHKeyPairGeneratorSpi.java
(initialize): also accept `DHParameterSpec.'
* gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java (setup):
handle a passed-in `DHParameterSpec' properly.
(generate): don't check if the random exponent is less than `q -
1' if no `q' was specified.
Diffstat (limited to 'gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java')
-rw-r--r-- | gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java b/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java index eafc8d01c..5626a2979 100644 --- a/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java +++ b/gnu/javax/crypto/key/dh/GnuDHKeyPairGenerator.java @@ -187,9 +187,19 @@ public class GnuDHKeyPairGenerator implements IKeyPairGenerator } else if (params instanceof DHParameterSpec) { + // FIXME: I'm not sure this is correct. It seems to behave the + // same way as Sun's RI, but I don't know if this behavior is + // documented anywhere. DHParameterSpec jceSpec = (DHParameterSpec) params; - l = jceSpec.getP().bitLength(); + p = jceSpec.getP(); + g = jceSpec.getG(); + l = p.bitLength(); m = jceSpec.getL(); + + // If no exponent size was given, generate an exponent as + // large as the prime. + if (m == 0) + m = l; } else { @@ -242,7 +252,12 @@ public class GnuDHKeyPairGenerator implements IKeyPairGenerator } // generate a private number x of length m such as: 1 < x < q - 1 - BigInteger q_minus_1 = q.subtract(BigInteger.ONE); + BigInteger q_minus_1 = null; + if (q != null) + q_minus_1 = q.subtract(BigInteger.ONE); + + // We already check if m is modulo 8 in `setup.' This could just + // be m >>> 3. byte[] mag = new byte[(m + 7) / 8]; BigInteger x; while (true) @@ -250,7 +265,7 @@ public class GnuDHKeyPairGenerator implements IKeyPairGenerator nextRandomBytes(mag); x = new BigInteger(1, mag); if (x.bitLength() == m && x.compareTo(BigInteger.ONE) > 0 - && x.compareTo(q_minus_1) < 0) + && (q_minus_1 == null || x.compareTo(q_minus_1) < 0)) { break; } |