diff options
author | Raif S. Naffah <raif@swiftdsl.com.au> | 2006-04-29 06:53:06 +0000 |
---|---|---|
committer | Raif S. Naffah <raif@swiftdsl.com.au> | 2006-04-29 06:53:06 +0000 |
commit | 37b4a4e2d0ad88e80da69614aa5b2d89aca0a1e1 (patch) | |
tree | af0b99c93ce16330d460a171ac4ed8d7b986c781 | |
parent | 21a158af006d84e924da49403ee95fea418ce856 (diff) | |
download | classpath-37b4a4e2d0ad88e80da69614aa5b2d89aca0a1e1.tar.gz |
2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au>
* gnu/java/security/provider/Gnu.java (run):
Add "RSA" as an alias to MD5withRSA.
* gnu/java/security/key/rsa/RSAKeyPairX509Codec.java (encodePublicKey):
Always encode a NULL as the value of an algorithm parameters field.
* gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java (log): New field.
(encodePrivateKey): Added trace/log statements.
(decodePrivateKey): Likewise.
* gnu/java/security/key/rsa/RSAKeyPairGenerator.java (log): New field.
(setup): Added trace/log statements.
(generate): Likewise.
* gnu/java/security/key/rsa/GnuRSAPublicKey.java (str): New field.
(toString): New method.
* gnu/java/security/key/rsa/GnuRSAPrivateKey.java (DEBUG): New constant.
(str): New field.
(toString): New method.
* gnu/java/security/key/rsa/GnuRSAKey.java (str): New field.
(getEncoded): Use defaultFormat.
(toString): New method.
* gnu/java/security/key/dss/DSSKey.java (toString):
Include defaultFormat in string.
* gnu/java/security/jce/sig/RSAKeyFactory.java (engineGeneratePublic):
Break if successfully decoded public key.
(engineGeneratePrivate): Break if successfully decoded private key.
-rw-r--r-- | ChangeLog | 26 | ||||
-rw-r--r-- | gnu/java/security/jce/sig/RSAKeyFactory.java | 4 | ||||
-rw-r--r-- | gnu/java/security/key/dss/DSSKey.java | 1 | ||||
-rw-r--r-- | gnu/java/security/key/rsa/GnuRSAKey.java | 21 | ||||
-rw-r--r-- | gnu/java/security/key/rsa/GnuRSAPrivateKey.java | 25 | ||||
-rw-r--r-- | gnu/java/security/key/rsa/GnuRSAPublicKey.java | 17 | ||||
-rw-r--r-- | gnu/java/security/key/rsa/RSAKeyPairGenerator.java | 14 | ||||
-rw-r--r-- | gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java | 13 | ||||
-rw-r--r-- | gnu/java/security/key/rsa/RSAKeyPairX509Codec.java | 3 | ||||
-rw-r--r-- | gnu/java/security/provider/Gnu.java | 1 |
10 files changed, 114 insertions, 11 deletions
@@ -1,5 +1,31 @@ 2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au> + * gnu/java/security/provider/Gnu.java (run): + Add "RSA" as an alias to MD5withRSA. + * gnu/java/security/key/rsa/RSAKeyPairX509Codec.java (encodePublicKey): + Always encode a NULL as the value of an algorithm parameters field. + * gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java (log): New field. + (encodePrivateKey): Added trace/log statements. + (decodePrivateKey): Likewise. + * gnu/java/security/key/rsa/RSAKeyPairGenerator.java (log): New field. + (setup): Added trace/log statements. + (generate): Likewise. + * gnu/java/security/key/rsa/GnuRSAPublicKey.java (str): New field. + (toString): New method. + * gnu/java/security/key/rsa/GnuRSAPrivateKey.java (DEBUG): New constant. + (str): New field. + (toString): New method. + * gnu/java/security/key/rsa/GnuRSAKey.java (str): New field. + (getEncoded): Use defaultFormat. + (toString): New method. + * gnu/java/security/key/dss/DSSKey.java (toString): + Include defaultFormat in string. + * gnu/java/security/jce/sig/RSAKeyFactory.java (engineGeneratePublic): + Break if successfully decoded public key. + (engineGeneratePrivate): Break if successfully decoded private key. + +2006-04-29 Raif S. Naffah <raif@swiftdsl.com.au> + * java/security/Security.java <clinit>: Add our Callback provider. * resource/java/security/classpath.security: Likewise diff --git a/gnu/java/security/jce/sig/RSAKeyFactory.java b/gnu/java/security/jce/sig/RSAKeyFactory.java index fecf54cb8..674e2afb6 100644 --- a/gnu/java/security/jce/sig/RSAKeyFactory.java +++ b/gnu/java/security/jce/sig/RSAKeyFactory.java @@ -84,7 +84,7 @@ public class RSAKeyFactory PublicKey result; try { - result = new RSAKeyPairX509Codec().decodePublicKey(encoded); + return new RSAKeyPairX509Codec().decodePublicKey(encoded); } catch (RuntimeException x) { @@ -131,7 +131,7 @@ public class RSAKeyFactory PrivateKey result; try { - result = new RSAKeyPairPKCS8Codec().decodePrivateKey(encoded); + return new RSAKeyPairPKCS8Codec().decodePrivateKey(encoded); } catch (RuntimeException x) { diff --git a/gnu/java/security/key/dss/DSSKey.java b/gnu/java/security/key/dss/DSSKey.java index c4d3847a5..40aaea893 100644 --- a/gnu/java/security/key/dss/DSSKey.java +++ b/gnu/java/security/key/dss/DSSKey.java @@ -185,6 +185,7 @@ public abstract class DSSKey implements Key, DSAKey { String ls = SystemProperties.getProperty("line.separator"); str = new StringBuilder().append(ls) + .append("defaultFormat=").append(defaultFormat).append(",").append(ls) .append("p=0x").append(p.toString(16)).append(",").append(ls) .append("q=0x").append(q.toString(16)).append(",").append(ls) .append("g=0x").append(g.toString(16)) diff --git a/gnu/java/security/key/rsa/GnuRSAKey.java b/gnu/java/security/key/rsa/GnuRSAKey.java index 098d372dc..3009dd71f 100644 --- a/gnu/java/security/key/rsa/GnuRSAKey.java +++ b/gnu/java/security/key/rsa/GnuRSAKey.java @@ -38,8 +38,8 @@ exception statement from your version. */ package gnu.java.security.key.rsa; +import gnu.classpath.SystemProperties; import gnu.java.security.Registry; -import gnu.java.security.key.IKeyPairCodec; import gnu.java.security.util.FormatUtil; import java.math.BigInteger; @@ -67,6 +67,9 @@ public abstract class GnuRSAKey implements Key, RSAKey */ protected final int defaultFormat; + /** String representation of this key. Cached for speed. */ + private transient String str; + // Constructor(s) // ------------------------------------------------------------------------- @@ -111,7 +114,7 @@ public abstract class GnuRSAKey implements Key, RSAKey /** @deprecated see getEncoded(int). */ public byte[] getEncoded() { - return getEncoded(IKeyPairCodec.RAW_FORMAT); + return getEncoded(defaultFormat); } public String getFormat() @@ -173,6 +176,20 @@ public abstract class GnuRSAKey implements Key, RSAKey return n.equals(that.getModulus()); } + public String toString() + { + if (str == null) + { + String ls = SystemProperties.getProperty("line.separator"); + str = new StringBuilder().append(ls) + .append("defaultFormat=").append(defaultFormat).append(",").append(ls) + .append("n=0x").append(n.toString(16)).append(",").append(ls) + .append("e=0x").append(e.toString(16)) + .toString(); + } + return str; + } + // abstract methods to be implemented by subclasses ------------------------ public abstract byte[] getEncoded(int format); diff --git a/gnu/java/security/key/rsa/GnuRSAPrivateKey.java b/gnu/java/security/key/rsa/GnuRSAPrivateKey.java index 7d3144bcd..920534487 100644 --- a/gnu/java/security/key/rsa/GnuRSAPrivateKey.java +++ b/gnu/java/security/key/rsa/GnuRSAPrivateKey.java @@ -38,6 +38,7 @@ exception statement from your version. */ package gnu.java.security.key.rsa; +import gnu.classpath.SystemProperties; import gnu.java.security.Registry; import gnu.java.security.key.IKeyPairCodec; @@ -60,10 +61,11 @@ import java.security.interfaces.RSAPrivateKey; public class GnuRSAPrivateKey extends GnuRSAKey implements PrivateKey, RSAPrivateCrtKey { - // Constants and variables // ------------------------------------------------------------------------- + private static final boolean DEBUG = false; + /** The first prime divisor of the modulus. */ private final BigInteger p; @@ -84,6 +86,9 @@ public class GnuRSAPrivateKey extends GnuRSAKey implements PrivateKey, /** The CRT (Chinese Remainder Theorem) coefficient. */ private final BigInteger qInv; + /** String representation of this key. Cached for speed. */ + private transient String str; + // Constructor(s) // ------------------------------------------------------------------------- @@ -294,4 +299,22 @@ public class GnuRSAPrivateKey extends GnuRSAKey implements PrivateKey, } return false; } + + public String toString() + { + if (str == null) + { + String ls = SystemProperties.getProperty("line.separator"); + str = new StringBuilder(this.getClass().getName()).append("(") + .append(super.toString()).append(",").append(ls) + .append("d=0x").append(DEBUG ? d.toString(16) : "**...*").append(ls) + .append("p=0x").append(DEBUG ? p.toString(16) : "**...*").append(ls) + .append("q=0x").append(DEBUG ? q.toString(16) : "**...*").append(ls) + .append("dP=0x").append(DEBUG ? dP.toString(16) : "**...*").append(ls) + .append("dQ=0x").append(DEBUG ? dQ.toString(16) : "**...*").append(ls) + .append("qInv=0x").append(DEBUG ? qInv.toString(16) : "**...*").append(ls) + .append(")").toString(); + } + return str; + } } diff --git a/gnu/java/security/key/rsa/GnuRSAPublicKey.java b/gnu/java/security/key/rsa/GnuRSAPublicKey.java index bb5d0a49f..8badede14 100644 --- a/gnu/java/security/key/rsa/GnuRSAPublicKey.java +++ b/gnu/java/security/key/rsa/GnuRSAPublicKey.java @@ -38,6 +38,7 @@ exception statement from your version. */ package gnu.java.security.key.rsa; +import gnu.classpath.SystemProperties; import gnu.java.security.Registry; import gnu.java.security.key.IKeyPairCodec; @@ -59,10 +60,12 @@ import java.security.interfaces.RSAPublicKey; public class GnuRSAPublicKey extends GnuRSAKey implements PublicKey, RSAPublicKey { - // Constants and variables // ------------------------------------------------------------------------- + /** String representation of this key. Cached for speed. */ + private transient String str; + // Constructor(s) // ------------------------------------------------------------------------- @@ -180,4 +183,16 @@ public class GnuRSAPublicKey extends GnuRSAKey implements PublicKey, return super.equals(that) && getPublicExponent().equals(that.getPublicExponent()); } + + public String toString() + { + if (str == null) + { + String ls = SystemProperties.getProperty("line.separator"); + str = new StringBuilder(this.getClass().getName()).append("(") + .append(super.toString()).append(",").append(ls) + .append(")").toString(); + } + return str; + } } diff --git a/gnu/java/security/key/rsa/RSAKeyPairGenerator.java b/gnu/java/security/key/rsa/RSAKeyPairGenerator.java index 9c7338f66..39063381f 100644 --- a/gnu/java/security/key/rsa/RSAKeyPairGenerator.java +++ b/gnu/java/security/key/rsa/RSAKeyPairGenerator.java @@ -50,6 +50,7 @@ import java.security.PublicKey; import java.security.SecureRandom; import java.security.spec.RSAKeyGenParameterSpec; import java.util.Map; +import java.util.logging.Logger; /** * <p>A key-pair generator for asymetric keys to use in conjunction with the RSA @@ -68,10 +69,11 @@ import java.util.Map; */ public class RSAKeyPairGenerator implements IKeyPairGenerator { - // Constants and variables // ------------------------------------------------------------------------- + private static final Logger log = Logger.getLogger(RSAKeyPairGenerator.class.getName()); + /** The BigInteger constant 1. */ private static final BigInteger ONE = BigInteger.ONE; @@ -150,6 +152,8 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator */ public void setup(Map attributes) { + log.entering(this.getClass().getName(), "setup", attributes); + // do we have a SecureRandom, or should we use our own? rnd = (SecureRandom) attributes.get(SOURCE_OF_RANDOMNESS); @@ -177,6 +181,8 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator Integer formatID = (Integer) attributes.get(PREFERRED_ENCODING_FORMAT); preferredFormat = formatID == null ? DEFAULT_ENCODING_FORMAT : formatID.intValue(); + + log.exiting(this.getClass().getName(), "setup"); } /** @@ -187,6 +193,8 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator */ public KeyPair generate() { + log.entering(this.getClass().getName(), "generate"); + BigInteger p, q, n, d; // 1. Generate a prime p in the interval [2**(M-1), 2**M - 1], where @@ -234,7 +242,9 @@ public class RSAKeyPairGenerator implements IKeyPairGenerator PublicKey pubK = new GnuRSAPublicKey(preferredFormat, n, e); PrivateKey secK = new GnuRSAPrivateKey(preferredFormat, p, q, e, d); - return new KeyPair(pubK, secK); + KeyPair result = new KeyPair(pubK, secK); + log.exiting(this.getClass().getName(), "generate", result); + return result; } // helper methods ---------------------------------------------------------- diff --git a/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java b/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java index a7f65b610..0b9809032 100644 --- a/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java +++ b/gnu/java/security/key/rsa/RSAKeyPairPKCS8Codec.java @@ -45,6 +45,7 @@ import java.security.InvalidParameterException; import java.security.PrivateKey; import java.security.PublicKey; import java.util.ArrayList; +import java.util.logging.Logger; import gnu.java.security.OID; import gnu.java.security.Registry; @@ -62,6 +63,7 @@ import gnu.java.security.util.DerUtil; public class RSAKeyPairPKCS8Codec implements IKeyPairCodec { + private static final Logger log = Logger.getLogger(RSAKeyPairPKCS8Codec.class.getName()); private static final OID RSA_ALG_OID = new OID(Registry.RSA_OID_STRING); // implicit 0-arguments constructor @@ -120,6 +122,8 @@ public class RSAKeyPairPKCS8Codec */ public byte[] encodePrivateKey(PrivateKey key) { + log.entering(this.getClass().getName(), "encodePrivateKey()", key); + if (! (key instanceof GnuRSAPrivateKey)) throw new InvalidParameterException("Wrong key type"); @@ -187,6 +191,7 @@ public class RSAKeyPairPKCS8Codec throw y; } + log.exiting(this.getClass().getName(), "encodePrivateKey()", result); return result; } @@ -208,6 +213,8 @@ public class RSAKeyPairPKCS8Codec */ public PrivateKey decodePrivateKey(byte[] input) { + log.entering(this.getClass().getName(), "decodePrivateKey()", input); + if (input == null) throw new InvalidParameterException("Input bytes MUST NOT be null"); @@ -278,7 +285,9 @@ public class RSAKeyPairPKCS8Codec throw y; } - return new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID, n, e, d, p, q, - dP, dQ, qInv); + PrivateKey result = new GnuRSAPrivateKey(Registry.PKCS8_ENCODING_ID, n, e, + d, p, q, dP, dQ, qInv); + log.exiting(this.getClass().getName(), "decodePrivateKey()", result); + return result; } } diff --git a/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java b/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java index 1c362784b..882d9c7b2 100644 --- a/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java +++ b/gnu/java/security/key/rsa/RSAKeyPairX509Codec.java @@ -128,8 +128,9 @@ public class RSAKeyPairX509Codec DERValue derN = new DERValue(DER.INTEGER, n); DERValue derE = new DERValue(DER.INTEGER, e); - ArrayList algorithmID = new ArrayList(1); + ArrayList algorithmID = new ArrayList(2); algorithmID.add(derOID); + algorithmID.add(new DERValue(DER.NULL, null)); DERValue derAlgorithmID = new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, algorithmID); diff --git a/gnu/java/security/provider/Gnu.java b/gnu/java/security/provider/Gnu.java index 061356644..6ea96c1e4 100644 --- a/gnu/java/security/provider/Gnu.java +++ b/gnu/java/security/provider/Gnu.java @@ -86,6 +86,7 @@ public final class Gnu extends Provider put("Alg.Alias.Signature.md5WithRSAEncryption", "MD5withRSA"); put("Alg.Alias.Signature.OID.1.2.840.113549.1.1.4", "MD5withRSA"); put("Alg.Alias.Signature.1.2.840.113549.1.1.4", "MD5withRSA"); + put("Alg.Alias.Signature.RSA", "MD5withRSA"); put("Signature.SHA160withRSA", gnu.java.security.jce.sig.SHA160withRSA.class.getName()); |