summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--gnu/java/security/provider/DSAKeyPairGenerator.java119
-rw-r--r--java/security/KeyPairGenerator.java3
3 files changed, 88 insertions, 51 deletions
diff --git a/ChangeLog b/ChangeLog
index 88817625e..e3b69171e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2005-08-08 Casey Marshall <csm@gnu.org>
+
+ PR classpath/23120
+ * gnu/java/security/provider/DSAKeyPairGenerator.java
+ (<init>): made public; set default values.
+ (initialize): just call 'initialize(int,boolean,SecureRandom).'
+ (initialize): just call 'initialize(DSAParams,SecureRandom).'
+ (initialize): check all values for 'null' before overwriting.
+ (initialize): fill in defaults or generate new parameters here.
+ (generateKeyPair): don't create parameters; fill in 'random' if
+ 'null;' use 'random,' not a new Random object, when generating
+ random numbers.
+ (getDefaults): fix keysize check.
+
+ PR classpath/22990
+ * java/security/KeyPairGenerator.java (initialize): do nothing.
+
2005-08-08 Tom Tromey <tromey@redhat.com>
PR classpath/23285:
diff --git a/gnu/java/security/provider/DSAKeyPairGenerator.java b/gnu/java/security/provider/DSAKeyPairGenerator.java
index 2c643d5c3..d326d2bfe 100644
--- a/gnu/java/security/provider/DSAKeyPairGenerator.java
+++ b/gnu/java/security/provider/DSAKeyPairGenerator.java
@@ -1,5 +1,5 @@
/* GnuDSAKeyPairGenerator.java --- Gnu DSA Key Pair Generator
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,10 +45,12 @@ import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidParameterException;
import java.security.KeyPair;
import java.security.KeyPairGeneratorSpi;
+import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.DSAParams;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.DSAParameterSpec;
+import java.security.spec.InvalidParameterSpecException;
import java.util.Random;
public class DSAKeyPairGenerator extends KeyPairGeneratorSpi
@@ -60,18 +62,15 @@ private BigInteger q = null; // the small prime
private BigInteger p = null; // the big prime
private BigInteger g = null;
-DSAKeyPairGenerator()
+public DSAKeyPairGenerator()
{
keysize = 1024;
+ getDefaults ();
}
public void initialize(int keysize, SecureRandom random)
{
- //if( ((keysize % 64) != 0) || (keysize < 512) || (keysize > 1024) )
- // throw new InvalidAlgorithmParameterException("Invalid key size");
-
- this.keysize = keysize;
- this.random = random;
+ initialize (keysize, false, random);
}
public void initialize(AlgorithmParameterSpec params,
@@ -81,65 +80,87 @@ public void initialize(AlgorithmParameterSpec params,
if( !( params instanceof DSAParameterSpec ) )
throw new InvalidAlgorithmParameterException("Must be DSAParameterSpec");
+ try
+ {
+ initialize ((DSAParams) params, random);
+ }
+ catch (InvalidParameterException ipe)
+ {
+ InvalidAlgorithmParameterException iape =
+ new InvalidAlgorithmParameterException();
+ iape.initCause (ipe);
+ throw iape;
+ }
+}
+
+public void initialize (DSAParams params, SecureRandom random)
+{
DSAParameterSpec dsaparameterspec = (DSAParameterSpec)params;
+ if (dsaparameterspec.getP() == null
+ || dsaparameterspec.getQ() == null
+ || dsaparameterspec.getG() == null)
+ {
+ throw new InvalidParameterException ("none of p, q, or g may be null");
+ }
p = dsaparameterspec.getP();
q = dsaparameterspec.getQ();
g = dsaparameterspec.getG();
this.random = random;
}
-public void initialize(DSAParams params, SecureRandom random)
- throws InvalidParameterException
-{
- if(params.getP() != null)
- p = params.getP();
- else
- throw new InvalidParameterException();
-
- if(params.getQ() != null)
- q = params.getQ();
- else
- throw new InvalidParameterException();
-
- if(params.getG() != null)
- g = params.getG();
- else
- throw new InvalidParameterException();
-
- this.random = random;
-}
-
public void initialize(int modlen, boolean genParams, SecureRandom random)
throws InvalidParameterException
{
if( ((modlen % 64) != 0) || (modlen < 512) || (modlen > 1024) )
throw new InvalidParameterException();
- if( (genParams == false) && (modlen != 512) && (modlen != 768) && (modlen != 1024) )
- throw new InvalidParameterException();
- this.keysize = modlen;
- this.random = random;
- p = null;
- q = null;
- g = null;
+ this.keysize = keysize;
+ this.random = random;
+ if (this.random == null)
+ {
+ this.random = new SecureRandom ();
+ }
+ if (genParams)
+ {
+ try
+ {
+ AlgorithmParameterGenerator apgDSA = AlgorithmParameterGenerator.getInstance("DSA");
+ apgDSA.init (modlen, random);
+ AlgorithmParameters apDSA = apgDSA.generateParameters();
+ DSAParameterSpec dsaparameterspec = (DSAParameterSpec)apDSA.getParameterSpec( DSAParameterSpec.class );
+ p = dsaparameterspec.getP();
+ q = dsaparameterspec.getQ();
+ g = dsaparameterspec.getG();
+ }
+ catch (NoSuchAlgorithmException nsae)
+ {
+ InvalidParameterException ipe =
+ new InvalidParameterException ("can't generate DSA parameters");
+ ipe.initCause (nsae);
+ throw ipe;
+ }
+ catch (InvalidParameterSpecException ipse)
+ {
+ InvalidParameterException ipe =
+ new InvalidParameterException ("can't generate DSA parameters");
+ ipe.initCause (ipse);
+ throw ipe;
+ }
+ }
+ else if (!getDefaults ())
+ {
+ throw new InvalidParameterException ("unsupported key size: " + modlen);
+ }
}
public KeyPair generateKeyPair()
{
- if( getDefaults() == false) {
- try {
- AlgorithmParameterGenerator apgDSA = AlgorithmParameterGenerator.getInstance("DSA");
- AlgorithmParameters apDSA = apgDSA.generateParameters();
- DSAParameterSpec dsaparameterspec = (DSAParameterSpec)apDSA.getParameterSpec( DSAParameterSpec.class );
- p = dsaparameterspec.getP();
- q = dsaparameterspec.getQ();
- g = dsaparameterspec.getG();
- } catch ( Exception e ) {
- return null;
- }
- }
+ if (random == null)
+ {
+ random = new SecureRandom ();
+ }
- BigInteger x = new BigInteger( 159, new Random() );
+ BigInteger x = new BigInteger( 159, random );
BigInteger y = g.modPow( x, p );
@@ -160,7 +181,7 @@ private boolean getDefaults()
p = new BigInteger("e9e642599d355f37c97ffd3567120b8e25c9cd43e927b3a9670fbec5d890141922d2c3b3ad2480093799869d1e846aab49fab0ad26d2ce6a22219d470bce7d777d4a21fbe9c270b57f607002f3cef8393694cf45ee3688c11a8c56ab127a3daf", 16);
q = new BigInteger("9cdbd84c9f1ac2f38d0f80f42ab952e7338bf511", 16);
g = new BigInteger("30470ad5a005fb14ce2d9dcd87e38bc7d1b1c5facbaecbe95f190aa7a31d23c4dbbcbe06174544401a5b2c020965d8c2bd2171d3668445771f74ba084d2029d83c1c158547f3a9f1a2715be23d51ae4d3e5a1f6a7064f316933a346d3f529252", 16);
- } else if( keysize == 512) {
+ } else if( keysize == 1024) {
p = new BigInteger("fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7", 16);
q = new BigInteger("9760508f15230bccb292b982a2eb840bf0581cf5", 16);
g = new BigInteger("f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d0782675159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243bcca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a", 16);
diff --git a/java/security/KeyPairGenerator.java b/java/security/KeyPairGenerator.java
index e6f926e2b..a6e010be2 100644
--- a/java/security/KeyPairGenerator.java
+++ b/java/security/KeyPairGenerator.java
@@ -1,5 +1,5 @@
/* KeyPairGenerator.java --- Key Pair Generator Class
- Copyright (C) 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -300,7 +300,6 @@ public abstract class KeyPairGenerator extends KeyPairGeneratorSpi
*/
public void initialize(int keysize, SecureRandom random)
{
- initialize(keysize, random);
}
/**