Imported GNU Classpath 0.90

Imported GNU Classpath 0.90
       * scripts/makemake.tcl: LocaleData.java moved to gnu/java/locale.

       * sources.am: Regenerated.
       * gcj/javaprims.h: Regenerated.
       * Makefile.in: Regenerated.
       * gcj/Makefile.in: Regenerated.
       * include/Makefile.in: Regenerated.
       * testsuite/Makefile.in: Regenerated.

       * gnu/java/lang/VMInstrumentationImpl.java: New override.
       * gnu/java/net/local/LocalSocketImpl.java: Likewise.
       * gnu/classpath/jdwp/VMMethod.java: Likewise.
       * gnu/classpath/jdwp/VMVirtualMachine.java: Update to latest
       interface.
       * java/lang/Thread.java: Add UncaughtExceptionHandler.
       * java/lang/reflect/Method.java: Implements GenericDeclaration and
       isSynthetic(),
       * java/lang/reflect/Field.java: Likewise.
       * java/lang/reflect/Constructor.java
       * java/lang/Class.java: Implements Type, GenericDeclaration,
       getSimpleName() and getEnclosing*() methods.
       * java/lang/Class.h: Add new public methods.
       * java/lang/Math.java: Add signum(), ulp() and log10().
       * java/lang/natMath.cc (log10): New function.
       * java/security/VMSecureRandom.java: New override.
       * java/util/logging/Logger.java: Updated to latest classpath
       version.
       * java/util/logging/LogManager.java: New override.

From-SVN: r113887
This commit is contained in:
Mark Wielaard 2006-05-18 17:29:21 +00:00
parent eaec4980e1
commit 4f9533c772
1640 changed files with 126485 additions and 104808 deletions

View file

@ -1,5 +1,6 @@
/* SecureRandom.java --- Secure Random class implementation
Copyright (C) 1999, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
Copyright (C) 1999, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -37,11 +38,19 @@ exception statement from your version. */
package java.security;
import gnu.classpath.SystemProperties;
import gnu.java.security.Engine;
import gnu.java.security.action.GetSecurityPropertyAction;
import gnu.java.security.jce.prng.Sha160RandomSpi;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* An interface to a cryptographically secure pseudo-random number
@ -71,6 +80,9 @@ public class SecureRandom extends Random
int randomBytesUsed = 0;
SecureRandomSpi secureRandomSpi = null;
byte[] state = null;
private String algorithm;
private boolean isSeeded = false;
// Constructors.
// ------------------------------------------------------------------------
@ -111,6 +123,7 @@ public class SecureRandom extends Random
secureRandomSpi = (SecureRandomSpi) Class.
forName(classname).newInstance();
provider = p[i];
algorithm = key.substring(13); // Minus SecureRandom.
return;
}
catch (ThreadDeath death)
@ -128,6 +141,7 @@ public class SecureRandom extends Random
// Nothing found. Fall back to SHA1PRNG
secureRandomSpi = new Sha160RandomSpi();
algorithm = "Sha160";
}
/**
@ -158,9 +172,19 @@ public class SecureRandom extends Random
@param provider A Provider class
*/
protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
{
this(secureRandomSpi, provider, "unknown");
}
/**
* Private constructor called from the getInstance() method.
*/
private SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider,
String algorithm)
{
this.secureRandomSpi = secureRandomSpi;
this.provider = provider;
this.algorithm = algorithm;
}
// Class methods.
@ -243,7 +267,7 @@ public class SecureRandom extends Random
{
return new SecureRandom((SecureRandomSpi)
Engine.getInstance(SECURE_RANDOM, algorithm, provider),
provider);
provider, algorithm);
}
catch (java.lang.reflect.InvocationTargetException ite)
{
@ -268,6 +292,18 @@ public class SecureRandom extends Random
return provider;
}
/**
* Returns the algorithm name used or "unknown" when the algorithm
* used couldn't be determined (as when constructed by the protected
* 2 argument constructor).
*
* @since 1.5
*/
public String getAlgorithm()
{
return algorithm;
}
/**
Seeds the SecureRandom. The class is re-seeded for each call and
each seed builds on the previous seed so as not to weaken security.
@ -277,6 +313,7 @@ public class SecureRandom extends Random
public void setSeed(byte[] seed)
{
secureRandomSpi.engineSetSeed(seed);
isSeeded = true;
}
/**
@ -304,6 +341,7 @@ public class SecureRandom extends Random
(byte) (0xff & seed)
};
secureRandomSpi.engineSetSeed(tmp);
isSeeded = true;
}
}
@ -315,6 +353,8 @@ public class SecureRandom extends Random
*/
public void nextBytes(byte[] bytes)
{
if (!isSeeded)
setSeed(getSeed(32));
randomBytesUsed += bytes.length;
counter++;
secureRandomSpi.engineNextBytes(bytes);
@ -360,10 +400,8 @@ public class SecureRandom extends Random
public static byte[] getSeed(int numBytes)
{
byte[] tmp = new byte[numBytes];
new Random().nextBytes(tmp);
generateSeed(tmp);
return tmp;
//return secureRandomSpi.engineGenerateSeed( numBytes );
}
/**
@ -378,4 +416,64 @@ public class SecureRandom extends Random
return secureRandomSpi.engineGenerateSeed(numBytes);
}
// Seed methods.
private static final String SECURERANDOM_SOURCE = "securerandom.source";
private static final String JAVA_SECURITY_EGD = "java.security.egd";
private static final Logger logger = Logger.getLogger(SecureRandom.class.getName());
private static int generateSeed(byte[] buffer)
{
return generateSeed(buffer, 0, buffer.length);
}
private static int generateSeed(byte[] buffer, int offset, int length)
{
URL sourceUrl = null;
String urlStr = null;
GetSecurityPropertyAction action = new GetSecurityPropertyAction(SECURERANDOM_SOURCE);
try
{
urlStr = (String) AccessController.doPrivileged(action);
if (urlStr != null)
sourceUrl = new URL(urlStr);
}
catch (MalformedURLException ignored)
{
logger.log(Level.WARNING, SECURERANDOM_SOURCE + " property is malformed: {0}",
urlStr);
}
if (sourceUrl == null)
{
try
{
urlStr = SystemProperties.getProperty(JAVA_SECURITY_EGD);
if (urlStr != null)
sourceUrl = new URL(urlStr);
}
catch (MalformedURLException mue)
{
logger.log(Level.WARNING, JAVA_SECURITY_EGD + " property is malformed: {0}",
urlStr);
}
}
if (sourceUrl != null)
{
try
{
InputStream in = sourceUrl.openStream();
return in.read(buffer, offset, length);
}
catch (IOException ioe)
{
logger.log(Level.FINE, "error reading random bytes", ioe);
}
}
// If we get here, we did not get any seed from a property URL.
return VMSecureRandom.generateSeed(buffer, offset, length);
}
}