summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasey Marshall <csm@gnu.org>2006-07-09 21:46:16 +0000
committerCasey Marshall <csm@gnu.org>2006-07-09 21:46:16 +0000
commit7b7589d526048282a55c5765b6fac08920c290b9 (patch)
tree6bc4e1c9b36a597b9e97dff96b98cfdd2d413bda
parenta429582805a521b007a5563212f44f1ab386a9bf (diff)
downloadclasspath-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-nio15
-rw-r--r--gnu/java/io/ByteBufferOutputStream.java14
-rw-r--r--gnu/java/security/Engine.java50
-rw-r--r--gnu/javax/crypto/jce/GnuCrypto.java2
-rw-r--r--gnu/javax/crypto/key/dh/GnuDHPrivateKey.java7
-rw-r--r--gnu/javax/crypto/key/dh/GnuDHPublicKey.java7
-rw-r--r--java/security/Security.java18
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(); )