diff options
author | Casey Marshall <csm@gnu.org> | 2006-07-09 21:46:16 +0000 |
---|---|---|
committer | Casey Marshall <csm@gnu.org> | 2006-07-09 21:46:16 +0000 |
commit | 7b7589d526048282a55c5765b6fac08920c290b9 (patch) | |
tree | 6bc4e1c9b36a597b9e97dff96b98cfdd2d413bda | |
parent | a429582805a521b007a5563212f44f1ab386a9bf (diff) | |
download | classpath-7b7589d526048282a55c5765b6fac08920c290b9.tar.gz |
2006-07-09 Casey Marshall <csm@gnu.org>
* gnu/java/io/ByteBufferOutputStream.java (write): new method.
(buffer): use flip() and slice() to get the buffer.
(toString): new method.
* gnu/java/security/Engine.java: merge mwringe's case-insensitive
algorithm name patch.
* gnu/javax/crypto/jce/GnuCrypto.java (<init>): qualify
PrivilegedAction.
* gnu/javax/crypto/key/dh/GnuDHPrivateKey.java (toString): new
method.
* gnu/javax/crypto/key/dh/GnuDHPublicKey.java (toString): new
method.
* java/security/Security.java: qualify generic types.
-rw-r--r-- | ChangeLog-ssl-nio | 15 | ||||
-rw-r--r-- | gnu/java/io/ByteBufferOutputStream.java | 14 | ||||
-rw-r--r-- | gnu/java/security/Engine.java | 50 | ||||
-rw-r--r-- | gnu/javax/crypto/jce/GnuCrypto.java | 2 | ||||
-rw-r--r-- | gnu/javax/crypto/key/dh/GnuDHPrivateKey.java | 7 | ||||
-rw-r--r-- | gnu/javax/crypto/key/dh/GnuDHPublicKey.java | 7 | ||||
-rw-r--r-- | java/security/Security.java | 18 |
7 files changed, 89 insertions, 24 deletions
diff --git a/ChangeLog-ssl-nio b/ChangeLog-ssl-nio index a3d6771f9..bd3a86232 100644 --- a/ChangeLog-ssl-nio +++ b/ChangeLog-ssl-nio @@ -1,5 +1,20 @@ 2006-07-09 Casey Marshall <csm@gnu.org> + * gnu/java/io/ByteBufferOutputStream.java (write): new method. + (buffer): use flip() and slice() to get the buffer. + (toString): new method. + * gnu/java/security/Engine.java: merge mwringe's case-insensitive + algorithm name patch. + * gnu/javax/crypto/jce/GnuCrypto.java (<init>): qualify + PrivilegedAction. + * gnu/javax/crypto/key/dh/GnuDHPrivateKey.java (toString): new + method. + * gnu/javax/crypto/key/dh/GnuDHPublicKey.java (toString): new + method. + * java/security/Security.java: qualify generic types. + +2006-07-09 Casey Marshall <csm@gnu.org> + * gnu/javax/net/ssl/AbstractSessionContext.java (newInstance): return `AbstractSessionContext.' (getSession): check if the session is null. diff --git a/gnu/java/io/ByteBufferOutputStream.java b/gnu/java/io/ByteBufferOutputStream.java index f6e8970ba..9d4bb20f8 100644 --- a/gnu/java/io/ByteBufferOutputStream.java +++ b/gnu/java/io/ByteBufferOutputStream.java @@ -80,6 +80,11 @@ public class ByteBufferOutputStream extends OutputStream growBuffer(); buffer.put(b, offset, length); } + + public @Override void write(byte[] b) + { + write(b, 0, b.length); + } /** * Get the current state of the buffer. The returned buffer will have @@ -90,9 +95,12 @@ public class ByteBufferOutputStream extends OutputStream */ public ByteBuffer buffer() { - ByteBuffer buf = buffer.slice(); - buf.position(0).limit(buf.capacity()); - return buf; + return ((ByteBuffer) buffer.duplicate().flip()).slice(); + } + + public String toString() + { + return super.toString() + " [ buffer: " + buffer + " ]"; } private void growBuffer() diff --git a/gnu/java/security/Engine.java b/gnu/java/security/Engine.java index 4b6bd10d9..80f374da9 100644 --- a/gnu/java/security/Engine.java +++ b/gnu/java/security/Engine.java @@ -42,6 +42,11 @@ import java.lang.reflect.InvocationTargetException; import java.security.NoSuchAlgorithmException; import java.security.Provider; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; /** * Generic implementation of the getInstance methods in the various @@ -141,26 +146,45 @@ public final class Engine || provider == null || initArgs == null) throw new IllegalArgumentException(); - // If there is no property "service.algorithm" - if (provider.getProperty(service + "." + algorithm) == null) + + Enumeration enumer = provider.propertyNames(); + String key; + String alias; + int count = 0; + boolean algorithmFound = false; + + while (enumer.hasMoreElements()) { - // Iterate through aliases, until we find the class name or resolve - // too many aliases. - String alias = null; - int count = 0; - while ((alias = provider.getProperty( - ALG_ALIAS + service + "." + algorithm)) != null) + key = (String) enumer.nextElement(); + + if (key.equalsIgnoreCase(service + "." + algorithm)) + { + // remove the service portion from the key + algorithm = key.substring(service.length() + 1); + + algorithmFound = true; + break; + + } + else if (key.equalsIgnoreCase(ALG_ALIAS + service + "." + algorithm)) { - if (algorithm.equals(alias)) // Refers to itself! - break; + + alias = (String) provider.getProperty(key); algorithm = alias; if (count++ > MAX_ALIASES) throw new NoSuchAlgorithmException("too many aliases"); + + // need to reset enumeration to now look for the alias + enumer = provider.propertyNames(); + } - if (provider.getProperty(service + "." + algorithm) == null) - throw new NoSuchAlgorithmException(algorithm); } - + + if (!algorithmFound) { + throw new NoSuchAlgorithmException(algorithm); + } + + // Find and instantiate the implementation. Class clazz = null; ClassLoader loader = provider.getClass().getClassLoader(); diff --git a/gnu/javax/crypto/jce/GnuCrypto.java b/gnu/javax/crypto/jce/GnuCrypto.java index b0e73b132..e0800afdc 100644 --- a/gnu/javax/crypto/jce/GnuCrypto.java +++ b/gnu/javax/crypto/jce/GnuCrypto.java @@ -71,7 +71,7 @@ public final class GnuCrypto extends Provider { super(Registry.GNU_CRYPTO, 2.1, "GNU Crypto JCE Provider"); - AccessController.doPrivileged(new PrivilegedAction() + AccessController.doPrivileged(new PrivilegedAction<Object>() { public Object run() { diff --git a/gnu/javax/crypto/key/dh/GnuDHPrivateKey.java b/gnu/javax/crypto/key/dh/GnuDHPrivateKey.java index 0e71623b9..736bcc9ca 100644 --- a/gnu/javax/crypto/key/dh/GnuDHPrivateKey.java +++ b/gnu/javax/crypto/key/dh/GnuDHPrivateKey.java @@ -193,4 +193,11 @@ public class GnuDHPrivateKey extends GnuDHKey implements DHPrivateKey DHPrivateKey that = (DHPrivateKey) obj; return super.equals(that) && x.equals(that.getX()); } + + public String toString() + { + return (super.toString() + " [ x: " + + (x == null ? "(nil)" : x.toString(16)) + + "; params: " + getParams() + " ]"); + } } diff --git a/gnu/javax/crypto/key/dh/GnuDHPublicKey.java b/gnu/javax/crypto/key/dh/GnuDHPublicKey.java index 56516c9d0..cab1b79d6 100644 --- a/gnu/javax/crypto/key/dh/GnuDHPublicKey.java +++ b/gnu/javax/crypto/key/dh/GnuDHPublicKey.java @@ -191,4 +191,11 @@ public class GnuDHPublicKey extends GnuDHKey implements DHPublicKey DHPublicKey that = (DHPublicKey) obj; return super.equals(that) && y.equals(that.getY()); } + + public String toString() + { + return (super.toString() + " [ y: " + + (y == null ? "(nil)" : y.toString(16)) + + "; params: " + getParams() + " ]"); + } } diff --git a/java/security/Security.java b/java/security/Security.java index d3d2c1ebc..6a239cd26 100644 --- a/java/security/Security.java +++ b/java/security/Security.java @@ -68,7 +68,7 @@ public final class Security { private static final String ALG_ALIAS = "Alg.Alias."; - private static Vector providers = new Vector(); + private static Vector<Provider> providers = new Vector<Provider>(); private static Properties secprops = new Properties(); static @@ -139,7 +139,7 @@ public final class Security try { ClassLoader sys = ClassLoader.getSystemClassLoader(); - providers.addElement(Class.forName(name, true, sys).newInstance()); + providers.addElement((Provider) Class.forName(name, true, sys).newInstance()); } catch (ClassNotFoundException x) { @@ -153,6 +153,10 @@ public final class Security { exception = x; } + catch (ClassCastException cce) + { + exception = cce; + } if (exception != null) { @@ -490,7 +494,7 @@ public final class Security if (filter == null || filter.length() == 0) return getProviders(); - HashMap map = new HashMap(1); + HashMap<String,String> map = new HashMap<String,String>(1); int i = filter.indexOf(':'); if (i == -1) // <service>.<algorithm> map.put(filter, ""); @@ -553,10 +557,10 @@ public final class Security if (querries == null || querries.isEmpty()) return getProviders(); - LinkedHashSet result = new LinkedHashSet(providers); // assume all + LinkedHashSet<Provider> result = new LinkedHashSet<Provider>(providers); // assume all int dot, ws; String querry, service, algorithm, attribute, value; - LinkedHashSet serviceProviders = new LinkedHashSet(); // preserve insertion order + LinkedHashSet<Provider> serviceProviders = new LinkedHashSet<Provider>(); // preserve insertion order for (Iterator i = querries.iterator(); i.hasNext(); ) { querry = (String) i.next(); @@ -622,12 +626,12 @@ public final class Security if (result.isEmpty()) return null; - return (Provider[]) result.toArray(new Provider[result.size()]); + return result.toArray(new Provider[result.size()]); } private static void selectProviders(String svc, String algo, String attr, String val, LinkedHashSet providerSet, - LinkedHashSet result) + LinkedHashSet<Provider> result) { result.clear(); // ensure we start with an empty result set for (Iterator i = providerSet.iterator(); i.hasNext(); ) |