From dc6a0b2d949256fbdcdc7301044067e2cf45289f Mon Sep 17 00:00:00 2001 From: Andrew John Hughes Date: Wed, 25 Feb 2009 21:40:28 +0000 Subject: [PATCH] Sync libgcj with GNU Classpath 0.98. 2009-02-13 Andrew John Hughes Import GNU Classpath (classpath-0_98-release). * Makefile.am: Add natVMSecureRandom.cc. * Makefile.in: Regenerated. * classpath/ChangeLog, * classpath/Makefile.am: Merged. * classpath/Makefile.in: Regenerated. * classpath/NEWS: Merged. * classpath/config.guess, * classpath/config.sub, * classpath/configure: Regenerated. * classpath/configure.ac: Merged. * classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java, * classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java, * classpath/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.java, * classpath/gnu/javax/crypto/jce/prng/CSPRNGSpi.java, * classpath/gnu/javax/crypto/jce/prng/FortunaImpl.java, * classpath/gnu/javax/crypto/jce/prng/ICMRandomSpi.java, * classpath/gnu/javax/crypto/jce/prng/UMacRandomSpi.java, * classpath/gnu/javax/crypto/prng/ICMGenerator.java, * classpath/gnu/xml/stream/XMLParser.java, * classpath/java/security/SecureRandom.java, * classpath/native/jni/native-lib/cpproc.c, * classpath/native/plugin/gcjwebplugin.cc, * classpath/tools/gnu/classpath/tools/gjdoc/Main.java: Merged. * configure: Regenerated. * configure.ac: Add symlink for natVMSecureRandomPosix.cc to natVMSecureRandom.cc * gnu/classpath/Configuration.java: Change version to 0.98. * gnu/java/security/jce/prng/SecureRandomAdapter.h: Regenerated. * gnu/java/security/jce/prng/VMSecureRandom.h: Generated. * gnu/java/security/jce/prng/VMSecureRandom.java: Added native implementation. * gnu/java/security/jce/prng/natVMSecureRandomPosix.cc: Wrapper around /dev/random. * gnu/javax/crypto/jce/prng/CSPRNGSpi.h, * gnu/javax/crypto/jce/prng/FortunaImpl.h, * java/security/SecureRandom.h: Regenerated. * java/security/VMSecureRandom$Spinner.h, * java/security/VMSecureRandom.h, * java/security/VMSecureRandom.java: Removed. * sources.am: Move VMSecureRandom to gnu.java.security.jce.prng. From-SVN: r144434 --- libjava/ChangeLog | 42 ++++++ libjava/Makefile.am | 1 + libjava/Makefile.in | 37 ++++-- libjava/classpath/ChangeLog | 86 +++++++++++++ libjava/classpath/Makefile.am | 2 +- libjava/classpath/Makefile.in | 2 +- libjava/classpath/NEWS | 37 +++++- libjava/classpath/config.guess | 22 +++- libjava/classpath/config.sub | 24 +++- libjava/classpath/configure | 20 +-- libjava/classpath/configure.ac | 2 +- .../java/awt/peer/gtk/CairoGraphics2D.java | 4 +- .../jce/prng/SecureRandomAdapter.java | 121 ++++++++++++++---- .../crypto/jce/prng/ARCFourRandomSpi.java | 15 ++- .../gnu/javax/crypto/jce/prng/CSPRNGSpi.java | 17 +-- .../javax/crypto/jce/prng/FortunaImpl.java | 25 +++- .../javax/crypto/jce/prng/ICMRandomSpi.java | 21 +-- .../javax/crypto/jce/prng/UMacRandomSpi.java | 10 +- .../gnu/javax/crypto/prng/ICMGenerator.java | 9 ++ .../classpath/gnu/xml/stream/XMLParser.java | 14 +- .../classpath/java/security/SecureRandom.java | 65 +--------- .../lib/gnu/classpath/Configuration.class | Bin 908 -> 904 bytes .../lib/gnu/classpath/SystemProperties.class | Bin 2659 -> 2655 bytes .../lib/gnu/gcj/convert/Convert.class | Bin 4799 -> 4799 bytes .../lib/gnu/gcj/tools/gcj_dbtool/Main.class | Bin 10918 -> 10918 bytes .../java/awt/peer/gtk/CairoGraphics2D.class | Bin 39058 -> 39120 bytes .../gnu/java/rmi/registry/RegistryImpl.class | Bin 4240 -> 4240 bytes .../jce/prng/SecureRandomAdapter.class | Bin 1358 -> 3342 bytes .../crypto/jce/prng/ARCFourRandomSpi.class | Bin 1418 -> 1443 bytes .../gnu/javax/crypto/jce/prng/CSPRNGSpi.class | Bin 1499 -> 1516 bytes .../javax/crypto/jce/prng/FortunaImpl.class | Bin 1354 -> 1498 bytes .../javax/crypto/jce/prng/ICMRandomSpi.class | Bin 3712 -> 3735 bytes .../javax/crypto/jce/prng/UMacRandomSpi.class | Bin 3184 -> 3209 bytes .../gnu/javax/crypto/prng/ICMGenerator.class | Bin 4444 -> 4678 bytes .../stream/XMLParser$AnyContentModel.class | Bin 617 -> 617 bytes .../gnu/xml/stream/XMLParser$Attribute.class | Bin 2442 -> 2442 bytes .../xml/stream/XMLParser$AttributeDecl.class | Bin 897 -> 897 bytes .../xml/stream/XMLParser$ContentModel.class | Bin 787 -> 787 bytes .../stream/XMLParser$ContentParticle.class | Bin 595 -> 595 bytes .../gnu/xml/stream/XMLParser$Doctype.class | Bin 5914 -> 5914 bytes .../XMLParser$ElementContentModel.class | Bin 1059 -> 1059 bytes .../stream/XMLParser$EmptyContentModel.class | Bin 623 -> 623 bytes .../xml/stream/XMLParser$ExternalIds.class | Bin 556 -> 556 bytes .../lib/gnu/xml/stream/XMLParser$Input.class | Bin 6256 -> 6256 bytes .../stream/XMLParser$MixedContentModel.class | Bin 988 -> 988 bytes .../lib/gnu/xml/stream/XMLParser.class | Bin 68200 -> 68323 bytes .../lib/java/security/SecureRandom.class | Bin 7780 -> 5950 bytes .../classpath/native/jni/native-lib/cpproc.c | 3 +- .../tools/common/ClasspathToolParser.class | Bin 4032 -> 4028 bytes .../gnu/classpath/tools/gjdoc/Main.class | Bin 29565 -> 29564 bytes .../gnu/classpath/tools/orbd/Main.class | Bin 5476 -> 5476 bytes .../tools/gnu/classpath/tools/gjdoc/Main.java | 2 +- .../security/jce/prng}/VMSecureRandom.java | 2 +- libjava/configure | 6 + libjava/configure.ac | 4 + libjava/gnu/classpath/Configuration.java | 2 +- .../security/jce/prng/SecureRandomAdapter.h | 7 +- .../java/security/jce/prng/VMSecureRandom.h | 43 +++++++ .../security/jce/prng/VMSecureRandom.java | 78 +++++++++++ .../jce/prng/natVMSecureRandomPosix.cc | 54 ++++++++ libjava/gnu/javax/crypto/jce/prng/CSPRNGSpi.h | 1 + .../gnu/javax/crypto/jce/prng/FortunaImpl.h | 3 +- libjava/java/security/SecureRandom.h | 5 - .../java/security/VMSecureRandom$Spinner.h | 38 ------ libjava/java/security/VMSecureRandom.h | 33 ----- libjava/sources.am | 4 +- 66 files changed, 612 insertions(+), 249 deletions(-) rename libjava/{java/security => classpath/vm/reference/gnu/java/security/jce/prng}/VMSecureRandom.java (99%) create mode 100644 libjava/gnu/java/security/jce/prng/VMSecureRandom.h create mode 100644 libjava/gnu/java/security/jce/prng/VMSecureRandom.java create mode 100644 libjava/gnu/java/security/jce/prng/natVMSecureRandomPosix.cc delete mode 100644 libjava/java/security/VMSecureRandom$Spinner.h delete mode 100644 libjava/java/security/VMSecureRandom.h diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 3cb487a5b09..4eab8c23820 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,45 @@ +2009-02-13 Andrew John Hughes + + Import GNU Classpath (classpath-0_98-release). + + * Makefile.am: Add natVMSecureRandom.cc. + * Makefile.in: Regenerated. + * classpath/ChangeLog, + * classpath/Makefile.am: Merged. + * classpath/Makefile.in: Regenerated. + * classpath/NEWS: Merged. + * classpath/config.guess, + * classpath/config.sub, + * classpath/configure: Regenerated. + * classpath/configure.ac: Merged. + * classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java, + * classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java, + * classpath/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.java, + * classpath/gnu/javax/crypto/jce/prng/CSPRNGSpi.java, + * classpath/gnu/javax/crypto/jce/prng/FortunaImpl.java, + * classpath/gnu/javax/crypto/jce/prng/ICMRandomSpi.java, + * classpath/gnu/javax/crypto/jce/prng/UMacRandomSpi.java, + * classpath/gnu/javax/crypto/prng/ICMGenerator.java, + * classpath/gnu/xml/stream/XMLParser.java, + * classpath/java/security/SecureRandom.java, + * classpath/native/jni/native-lib/cpproc.c, + * classpath/native/plugin/gcjwebplugin.cc, + * classpath/tools/gnu/classpath/tools/gjdoc/Main.java: Merged. + * configure: Regenerated. + * configure.ac: Add symlink for natVMSecureRandomPosix.cc to natVMSecureRandom.cc + * gnu/classpath/Configuration.java: Change version to 0.98. + * gnu/java/security/jce/prng/SecureRandomAdapter.h: Regenerated. + * gnu/java/security/jce/prng/VMSecureRandom.h: Generated. + * gnu/java/security/jce/prng/VMSecureRandom.java: Added native implementation. + * gnu/java/security/jce/prng/natVMSecureRandomPosix.cc: Wrapper around /dev/random. + * gnu/javax/crypto/jce/prng/CSPRNGSpi.h, + * gnu/javax/crypto/jce/prng/FortunaImpl.h, + * java/security/SecureRandom.h: Regenerated. + * java/security/VMSecureRandom$Spinner.h, + * java/security/VMSecureRandom.h, + * java/security/VMSecureRandom.java: Removed. + * sources.am: Move VMSecureRandom to gnu.java.security.jce.prng. + 2009-02-10 Mark Mitchell * Makefile.am (AM_MAKEFLAGS): Pass down datadir. diff --git a/libjava/Makefile.am b/libjava/Makefile.am index 2078a8734df..49685896878 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -1091,6 +1091,7 @@ gnu/java/nio/natVMSelector.cc \ gnu/java/nio/natNIOServerSocket.cc \ gnu/java/nio/natVMChannel.cc \ gnu/java/nio/channels/natFileChannelImpl.cc \ +gnu/java/security/jce/prng/natVMSecureRandom.cc \ java/io/natFile.cc \ java/io/natVMObjectInputStream.cc \ java/io/natVMObjectStreamClass.cc \ diff --git a/libjava/Makefile.in b/libjava/Makefile.in index cea890f04d5..c7b22721c7f 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -117,7 +117,8 @@ CONFIG_CLEAN_FILES = libgcj.pc libgcj.spec libgcj-test.spec \ gnu/java/net/natPlainSocketImpl.cc \ gnu/java/net/natPlainDatagramSocketImpl.cc \ gnu/java/nio/natVMPipe.cc gnu/java/nio/natVMSelector.cc \ - gnu/java/nio/channels/natFileChannelImpl.cc sysdep/locks.h \ + gnu/java/nio/channels/natFileChannelImpl.cc \ + gnu/java/security/jce/prng/natVMSecureRandom.cc sysdep/locks.h \ sysdep/backtrace.h sysdep/descriptor.h am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ @@ -342,8 +343,9 @@ am__libgcj_la_SOURCES_DIST = prims.cc jni.cc exception.cc \ gnu/java/nio/natVMPipe.cc gnu/java/nio/natVMSelector.cc \ gnu/java/nio/natNIOServerSocket.cc \ gnu/java/nio/natVMChannel.cc \ - gnu/java/nio/channels/natFileChannelImpl.cc java/io/natFile.cc \ - java/io/natVMObjectInputStream.cc \ + gnu/java/nio/channels/natFileChannelImpl.cc \ + gnu/java/security/jce/prng/natVMSecureRandom.cc \ + java/io/natFile.cc java/io/natVMObjectInputStream.cc \ java/io/natVMObjectStreamClass.cc java/lang/natCharacter.cc \ java/lang/natClass.cc java/lang/natClassLoader.cc \ java/lang/natConcreteProcess.cc java/lang/natVMDouble.cc \ @@ -406,8 +408,9 @@ am__objects_5 = $(am__objects_3) gnu/classpath/natConfiguration.lo \ gnu/java/nio/natVMPipe.lo gnu/java/nio/natVMSelector.lo \ gnu/java/nio/natNIOServerSocket.lo \ gnu/java/nio/natVMChannel.lo \ - gnu/java/nio/channels/natFileChannelImpl.lo java/io/natFile.lo \ - java/io/natVMObjectInputStream.lo \ + gnu/java/nio/channels/natFileChannelImpl.lo \ + gnu/java/security/jce/prng/natVMSecureRandom.lo \ + java/io/natFile.lo java/io/natVMObjectInputStream.lo \ java/io/natVMObjectStreamClass.lo java/lang/natCharacter.lo \ java/lang/natClass.lo java/lang/natClassLoader.lo \ java/lang/natConcreteProcess.lo java/lang/natVMDouble.lo \ @@ -2267,6 +2270,7 @@ classpath/gnu/java/security/jce/prng/Sha256RandomSpi.java \ classpath/gnu/java/security/jce/prng/Sha384RandomSpi.java \ classpath/gnu/java/security/jce/prng/Sha512RandomSpi.java \ classpath/gnu/java/security/jce/prng/TigerRandomSpi.java \ +gnu/java/security/jce/prng/VMSecureRandom.java \ classpath/gnu/java/security/jce/prng/WhirlpoolRandomSpi.java gnu_java_security_jce_prng_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_jce_prng_source_files))) @@ -4748,8 +4752,7 @@ classpath/java/security/Signer.java \ classpath/java/security/UnrecoverableKeyException.java \ classpath/java/security/UnresolvedPermission.java \ java/security/VMAccessControlState.java \ -java/security/VMAccessController.java \ -java/security/VMSecureRandom.java +java/security/VMAccessController.java java_security_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_source_files))) java_security_acl_source_files = \ @@ -8513,6 +8516,7 @@ gnu/java/nio/natVMSelector.cc \ gnu/java/nio/natNIOServerSocket.cc \ gnu/java/nio/natVMChannel.cc \ gnu/java/nio/channels/natFileChannelImpl.cc \ +gnu/java/security/jce/prng/natVMSecureRandom.cc \ java/io/natFile.cc \ java/io/natVMObjectInputStream.cc \ java/io/natVMObjectStreamClass.cc \ @@ -9006,6 +9010,15 @@ gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp): gnu/java/nio/channels/natFileChannelImpl.lo: \ gnu/java/nio/channels/$(am__dirstamp) \ gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp) +gnu/java/security/jce/prng/$(am__dirstamp): + @$(mkdir_p) gnu/java/security/jce/prng + @: > gnu/java/security/jce/prng/$(am__dirstamp) +gnu/java/security/jce/prng/$(DEPDIR)/$(am__dirstamp): + @$(mkdir_p) gnu/java/security/jce/prng/$(DEPDIR) + @: > gnu/java/security/jce/prng/$(DEPDIR)/$(am__dirstamp) +gnu/java/security/jce/prng/natVMSecureRandom.lo: \ + gnu/java/security/jce/prng/$(am__dirstamp) \ + gnu/java/security/jce/prng/$(DEPDIR)/$(am__dirstamp) java/io/$(am__dirstamp): @$(mkdir_p) java/io @: > java/io/$(am__dirstamp) @@ -9471,6 +9484,8 @@ mostlyclean-compile: -rm -f gnu/java/nio/natVMPipe.lo -rm -f gnu/java/nio/natVMSelector.$(OBJEXT) -rm -f gnu/java/nio/natVMSelector.lo + -rm -f gnu/java/security/jce/prng/natVMSecureRandom.$(OBJEXT) + -rm -f gnu/java/security/jce/prng/natVMSecureRandom.lo -rm -f java/io/natFile.$(OBJEXT) -rm -f java/io/natFile.lo -rm -f java/io/natVMObjectInputStream.$(OBJEXT) @@ -9645,6 +9660,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/natVMPipe.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/$(DEPDIR)/natVMSelector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/nio/channels/$(DEPDIR)/natFileChannelImpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gnu/java/security/jce/prng/$(DEPDIR)/natVMSecureRandom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natFile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natVMObjectInputStream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@java/io/$(DEPDIR)/natVMObjectStreamClass.Plo@am__quote@ @@ -9951,6 +9967,7 @@ clean-libtool: -rm -rf gnu/java/net/protocol/core/.libs gnu/java/net/protocol/core/_libs -rm -rf gnu/java/nio/.libs gnu/java/nio/_libs -rm -rf gnu/java/nio/channels/.libs gnu/java/nio/channels/_libs + -rm -rf gnu/java/security/jce/prng/.libs gnu/java/security/jce/prng/_libs -rm -rf java/io/.libs java/io/_libs -rm -rf java/lang/.libs java/lang/_libs -rm -rf java/lang/ref/.libs java/lang/ref/_libs @@ -10359,6 +10376,8 @@ distclean-generic: -rm -f gnu/java/nio/$(am__dirstamp) -rm -f gnu/java/nio/channels/$(DEPDIR)/$(am__dirstamp) -rm -f gnu/java/nio/channels/$(am__dirstamp) + -rm -f gnu/java/security/jce/prng/$(DEPDIR)/$(am__dirstamp) + -rm -f gnu/java/security/jce/prng/$(am__dirstamp) -rm -f java/io/$(DEPDIR)/$(am__dirstamp) -rm -f java/io/$(am__dirstamp) -rm -f java/lang/$(DEPDIR)/$(am__dirstamp) @@ -10400,7 +10419,7 @@ clean-am: clean-binPROGRAMS clean-dbexecLTLIBRARIES clean-generic \ distclean: distclean-multi distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) classpath/tools/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/classpath/jdwp/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/jvmti/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/management/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/security/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/concurrent/atomic/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) sun/misc/$(DEPDIR) + -rm -rf ./$(DEPDIR) classpath/tools/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/classpath/jdwp/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/jvmti/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/management/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/security/jce/prng/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/security/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/concurrent/atomic/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) sun/misc/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-local distclean-tags @@ -10433,7 +10452,7 @@ installcheck-am: maintainer-clean: maintainer-clean-multi maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) classpath/tools/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/classpath/jdwp/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/jvmti/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/management/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/security/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/concurrent/atomic/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) sun/misc/$(DEPDIR) + -rm -rf ./$(DEPDIR) classpath/tools/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/classpath/jdwp/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/jvmti/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/management/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/security/jce/prng/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/security/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/concurrent/atomic/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/zip/$(DEPDIR) sun/misc/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index b76807c13c6..169c2f64c7b 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,10 +1,96 @@ +2009-02-05 Andrew John Hughes + + * NEWS: Add VM updates. + +2009-02-05 Andrew John Hughes + + * NEWS: Updated. + * configure.ac: + Bump to 0.98 proper. + 2009-02-05 Andrew Haley + PR libgcj/38861 * native/plugin/gcjwebplugin.cc: Cope with the changed header file format. https://bugzilla.mozilla.org/show_bug.cgi?id=455458 (GCJ_GetJavaClass): Likewise. (NP_Initialize): Likewise. +2009-02-05 Mark Wielaard + + PR classpath/38912: + * gnu/xml/stream/XMLParser.java: + (getLocalName()): Respect stringInterning. + (getName()): Likewise. + (getPrefix()): Likewise. + +2009-02-04 Andrew John Hughes + + * native/jni/native-lib/cpproc.c: + (cpproc_forkAndExec): Don't return on a -1 + result from chdir as this may be valid in + some cases. A better fix is needed. + +2009-02-03 Andrew John Hughes + + * native/jni/native-lib/cpproc.c: + (cpproc_forkAndExec): Handle return of + chdir. + +2009-02-03 Andrew John Hughes + + PR classpath/38417: + * gnu/java/security/jce/prng/SecureRandomAdapter.java: + Remove unneeded import. + * gnu/javax/crypto/jce/prng/FortunaImpl.java: + Fix typo. + * java/security/SecureRandom.java: + Remove duplicate use of VMSecureRandom, + call SecureRandomAdapter instead. + * vm/reference/gnu/java/security/jce/prng/VMSecureRandom.java: + Moved from java/security so SecureRandomAdapter can + access it. + +2009-01-22 Mario Torre + + PR classpath/38417: + * gnu/java/security/jce/prng/SecureRandomAdapter.java: + (getSeed(int)): New; retrieve seed from source specified + by securerandom.source property or failing that, use + VMSecureRandom. + * gnu/javax/crypto/jce/prng/ARCFourRandomSpi.java: + (engineGenerateSeed(int)): Use SecureRandomAdapter. + (engineNextBytes(byte[])): Initialise using new seed. + * gnu/javax/crypto/jce/prng/CSPRNGSpi.java: + (engineGenerateSeed(int)): Use SecureRandomAdapter. + (engineNextBytes(byte[])): Initialise using new seed. + * gnu/javax/crypto/jce/prng/FortunaImpl.java: + (engineSetSeed(byte[])): Initialise with new seed if unused. + (engineGenerateSeed(int)): Use SecureRandomAdapter. + * gnu/javax/crypto/jce/prng/ICMRandomSpi.java: + (engineGenerateSeed(int)): Use SecureRandomAdapter. + (engineNextBytes(byte[])): Initialise using new seed. + * gnu/javax/crypto/jce/prng/UMacRandomSpi.java: + (engineGenerateSeed(int)): Use SecureRandomAdapter. + (engineNextBytes(byte[])): Initialise using new seed. + * gnu/javax/crypto/prng/ICMGenerator.java: + (setup(Map)): Call fillBlock(). + +2009-01-22 Mark Wielaard + + * tools/gnu/classpath/tools/gjdoc/Main.java (getGjdocVersion): + Read version.properties from package. + +2009-01-05 Robert Schuster + + * gnu/java/awt/peer/gtk/CairoGraphics2D.java: + (drawPolyline): Rewritten. + +2009-01-05 Andrew John Hughes + + * Makefile.am: + Add ChangeLog-2008 to EXTRA_DIST. + 2009-01-02 Andrew John Hughes * ChangeLog-2008: New file. diff --git a/libjava/classpath/Makefile.am b/libjava/classpath/Makefile.am index af47684b185..454b2e96023 100644 --- a/libjava/classpath/Makefile.am +++ b/libjava/classpath/Makefile.am @@ -14,7 +14,7 @@ native: lib EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE ChangeLog-2007 \ ChangeLog-2003 ChangeLog-2004 ChangeLog-2005 ChangeLog-2006 \ ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \ - autogen.sh + autogen.sh ChangeLog-2008 DISTCHECK_CONFIGURE_FLAGS = --with-gjdoc --enable-gstreamer-peer \ --enable-xmlj --enable-qt-peer diff --git a/libjava/classpath/Makefile.in b/libjava/classpath/Makefile.in index dcc346b7743..35f1dd788e5 100644 --- a/libjava/classpath/Makefile.in +++ b/libjava/classpath/Makefile.in @@ -395,7 +395,7 @@ ACLOCAL_AMFLAGS = -I m4 -I ../.. -I ../../config ${LOCAL_AUTORECONF_FLAGS} EXTRA_DIST = HACKING BUGS THANKYOU mauve-classpath LICENSE ChangeLog-2007 \ ChangeLog-2003 ChangeLog-2004 ChangeLog-2005 ChangeLog-2006 \ ChangeLog.gnujaxp.1 ChangeLog.gnujaxp.2 ChangeLog.libxmlj \ - autogen.sh + autogen.sh ChangeLog-2008 DISTCHECK_CONFIGURE_FLAGS = --with-gjdoc --enable-gstreamer-peer \ --enable-xmlj --enable-qt-peer diff --git a/libjava/classpath/NEWS b/libjava/classpath/NEWS index 4be4d60434c..4ae10d710d9 100644 --- a/libjava/classpath/NEWS +++ b/libjava/classpath/NEWS @@ -1,4 +1,4 @@ -New in release 0.98 +New in release 0.98 (Feb 05, 2009) * Native support for BigInteger is now provided using the GMP library. A new option, --enable/disable-gmp is provided, and @@ -11,8 +11,41 @@ always retain their own array, which is only altered during resizing, CPStringBuilder gives away its array when the result is generated by toString()/substring() and starts afresh. The default capacity of CPStringBuilder can also be configured using the -gnu.classpath.cpstringbuilder.capacity property. +gnu.classpath.cpstringbuilder.capacity property. (PR21869) * gjdoc is now built as part of tools.zip. +* Import of the Java Activation Framework from ClasspathX to provide +javax.activation (part of 1.6). +* Preliminary version of java.util.Scanner (PR30436) +* Reduce cost of ThreadLocal(s) to improve Jython performance (PR33690) +* Updated to use CLDR 1.5.1 (PR35237) +* Many bug fixes including: + - PR22851: zoneStrings in gnu/java/locale/LocaleInformation* + - PR31895: setCurrency(Currency) does not actually change the currency. + - PR32028: Make fails at gjdoc + - PR34840: Mismatch between Sun and Classpath's java.lang.Appendable + - PR35487: gcj causes ConcurrentModificationException during tomcat5 + - PR35690: javax.tools.FileObject.toUri is in wrong case + - PR36085: java.util.regex escape-sequence handling + - PR36147: Apache Tomcat fails to read descriptors using GNU XML + - PR36219: gnu.xml.transform.SortKey isn't subclass + - PR36220: NPEs in gnu.xml.transform.* clone methods + - PR36221: DomDOMException running SPEC jvm 2008 xml.transform + - PR36477: OOME in CPStringBuilder when running Eclipse + - PR36522: Policy file is not read at all + - PR36636: gjar -u doesn't work + - PR36637: --without-fastjar doesn't wor + - PR36677: Omission bug in JDWP VirtualMachineCommandSet + - PR38417: gnu.java.security.util.PRNG produces easily predictable values + - PR38473: Segmentation fault in retrieving font outline decomposition + - PR38861: Support XULRunner 1.9.1. + - PR38912: XMLParser not interning element names + +Runtime interface changes: + + * VMSecureRandom has moved to gnu.java.security.jce.prng.VMSecureRandom + as part of the fix for PR38417. + * gnu.java.lang.VMCPStringBuilder has been added and should be added to + avoid the inefficency of reflection when creating non-copied String objects. Bug fixes in release 0.97.2 (Jun 06, 2007) diff --git a/libjava/classpath/config.guess b/libjava/classpath/config.guess index c7607c74f1b..aeb53233ecb 100755 --- a/libjava/classpath/config.guess +++ b/libjava/classpath/config.guess @@ -4,7 +4,7 @@ # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. -timestamp='2008-04-14' +timestamp='2008-12-18' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -331,7 +331,20 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -796,7 +809,7 @@ EOF x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd) + EM64T | authenticamd | genuineintel) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) @@ -935,6 +948,9 @@ EOF if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in diff --git a/libjava/classpath/config.sub b/libjava/classpath/config.sub index 63bfff03070..9489dc7867b 100755 --- a/libjava/classpath/config.sub +++ b/libjava/classpath/config.sub @@ -4,7 +4,7 @@ # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. -timestamp='2008-04-14' +timestamp='2008-12-11' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -249,6 +249,7 @@ case $basic_machine in | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ @@ -279,7 +280,7 @@ case $basic_machine in | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -288,7 +289,7 @@ case $basic_machine in | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) @@ -331,6 +332,7 @@ case $basic_machine in | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ @@ -362,7 +364,7 @@ case $basic_machine in | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ @@ -375,7 +377,7 @@ case $basic_machine in | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) @@ -463,6 +465,10 @@ case $basic_machine in basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -1136,6 +1142,10 @@ case $basic_machine in basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1174,7 +1184,7 @@ case $basic_machine in we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1256,7 +1266,7 @@ case $os in | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ + | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ diff --git a/libjava/classpath/configure b/libjava/classpath/configure index 8a4c6b1ded9..8f520cdcf53 100755 --- a/libjava/classpath/configure +++ b/libjava/classpath/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for GNU Classpath 0.98-pre. +# Generated by GNU Autoconf 2.59 for GNU Classpath 0.98. # # Report bugs to . # @@ -418,8 +418,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='GNU Classpath' PACKAGE_TARNAME='classpath' -PACKAGE_VERSION='0.98-pre' -PACKAGE_STRING='GNU Classpath 0.98-pre' +PACKAGE_VERSION='0.98' +PACKAGE_STRING='GNU Classpath 0.98' PACKAGE_BUGREPORT='classpath@gnu.org' ac_unique_file="java/lang/System.java" @@ -943,7 +943,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Classpath 0.98-pre to adapt to many kinds of systems. +\`configure' configures GNU Classpath 0.98 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1014,7 +1014,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Classpath 0.98-pre:";; + short | recursive ) echo "Configuration of GNU Classpath 0.98:";; esac cat <<\_ACEOF @@ -1231,7 +1231,7 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -GNU Classpath configure 0.98-pre +GNU Classpath configure 0.98 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1245,7 +1245,7 @@ cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Classpath $as_me 0.98-pre, which was +It was created by GNU Classpath $as_me 0.98, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -2117,7 +2117,7 @@ fi # Define the identity of the package. PACKAGE='classpath' - VERSION='0.98-pre' + VERSION='0.98' cat >>confdefs.h <<_ACEOF @@ -30773,7 +30773,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by GNU Classpath $as_me 0.98-pre, which was +This file was extended by GNU Classpath $as_me 0.98, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -30839,7 +30839,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -GNU Classpath config.status 0.98-pre +GNU Classpath config.status 0.98 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" diff --git a/libjava/classpath/configure.ac b/libjava/classpath/configure.ac index b3187cca7e7..faf3ab7ce36 100644 --- a/libjava/classpath/configure.ac +++ b/libjava/classpath/configure.ac @@ -6,7 +6,7 @@ dnl ----------------------------------------------------------- dnl define([AC_CACHE_LOAD], )dnl dnl define([AC_CACHE_SAVE], )dnl -AC_INIT([GNU Classpath],[0.98-pre],[classpath@gnu.org],[classpath]) +AC_INIT([GNU Classpath],[0.98],[classpath@gnu.org],[classpath]) AC_CONFIG_SRCDIR(java/lang/System.java) dnl GCJ LOCAL diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java b/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java index bc8c91a2b03..8f8d7ea8bbb 100644 --- a/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java +++ b/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java @@ -1246,7 +1246,9 @@ public abstract class CairoGraphics2D extends Graphics2D public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) { - draw(new Polygon(xPoints, yPoints, nPoints)); + for (int i = 1; i < nPoints; i++) + draw(new Line2D.Double(xPoints[i - 1], yPoints[i - 1], + xPoints[i], yPoints[i])); } public void drawOval(int x, int y, int width, int height) diff --git a/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java b/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java index 5be402ff005..5877e3edb6c 100644 --- a/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java +++ b/libjava/classpath/gnu/java/security/jce/prng/SecureRandomAdapter.java @@ -38,35 +38,57 @@ exception statement from your version. */ package gnu.java.security.jce.prng; +import gnu.java.security.action.GetSecurityPropertyAction; +import gnu.classpath.SystemProperties; import gnu.java.security.prng.LimitReachedException; import gnu.java.security.prng.MDGenerator; +import java.security.AccessController; +import java.security.SecureRandom; import java.security.SecureRandomSpi; + import java.util.Collections; +import java.util.logging.Level; +import java.util.logging.Logger; + +import java.io.InputStream; +import java.io.IOException; + +import java.net.MalformedURLException; +import java.net.URL; /** - * The implementation of a generic {@link java.security.SecureRandom} adapter - * class to wrap GNU PRNG instances based on Message Digest algorithms. - *

- * This class defines the Service Provider Interface (SPI) for + *

The implementation of a generic {@link java.security.SecureRandom} adapter + * class to wrap gnu.crypto prng instances based on Message Digest algorithms.

+ * + *

This class defines the Service Provider Interface (SPI) for * the {@link java.security.SecureRandom} class, which provides the - * functionality of a cryptographically strong pseudo-random number generator. - *

- * All the abstract methods in the {@link SecureRandomSpi} class are implemented - * by this class and all its sub-classes. + * functionality of a cryptographically strong pseudo-random number generator.

+ * + *

All the abstract methods in the {@link SecureRandomSpi} class are + * implemented by this class and all its sub-classes.

*/ -abstract class SecureRandomAdapter - extends SecureRandomSpi +public abstract class SecureRandomAdapter + extends SecureRandomSpi { + + private boolean isSeeded = false; + /** Our underlying prng instance. */ private MDGenerator adaptee = new MDGenerator(); /** The name of the message digest algorithm used by the adaptee. */ private String mdName; + private static final Logger logger = + Logger.getLogger(SecureRandom.class.getName()); + + private static final String SECURERANDOM_SOURCE = "securerandom.source"; + private static final String JAVA_SECURITY_EGD = "java.security.egd"; + /** - * Trivial protected constructor. - * + *

Trivial protected constructor.

+ * * @param mdName the canonical name of the underlying hash algorithm. */ protected SecureRandomAdapter(String mdName) @@ -74,23 +96,77 @@ abstract class SecureRandomAdapter super(); this.mdName = mdName; - adaptee.init(Collections.singletonMap(MDGenerator.MD_NAME, mdName)); + adaptee.init (Collections.singletonMap (MDGenerator.MD_NAME, mdName)); + } + + public static final byte[] getSeed(int numBytes) + { + URL sourceUrl = null; + String urlStr = null; + + byte[] buffer = new byte[numBytes]; + + 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(); + in.read(buffer); + return buffer; + } + 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. + VMSecureRandom.generateSeed(buffer, 0, buffer.length); + return buffer; } public byte[] engineGenerateSeed(int numBytes) { - if (numBytes < 1) - return new byte[0]; - - byte[] result = new byte[numBytes]; - this.engineNextBytes(result); - return result; + return getSeed(numBytes); } public void engineNextBytes(byte[] bytes) { - if (! adaptee.isInitialised()) - this.engineSetSeed(new byte[0]); + if (!isSeeded) + { + engineSetSeed(engineGenerateSeed(32)); + } try { adaptee.nextBytes(bytes, 0, bytes.length); @@ -102,6 +178,7 @@ abstract class SecureRandomAdapter public void engineSetSeed(byte[] seed) { - adaptee.addRandomBytes(seed); + adaptee.addRandomBytes (seed); + isSeeded = true; } } diff --git a/libjava/classpath/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.java b/libjava/classpath/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.java index 652793b04ff..1129d5dfb1b 100644 --- a/libjava/classpath/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.java +++ b/libjava/classpath/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.java @@ -39,12 +39,17 @@ exception statement from your version. */ package gnu.javax.crypto.jce.prng; import gnu.java.security.Registry; -import gnu.javax.crypto.prng.ARCFour; + +import gnu.java.security.jce.prng.SecureRandomAdapter; + import gnu.java.security.prng.IRandom; import gnu.java.security.prng.LimitReachedException; + +import gnu.javax.crypto.prng.ARCFour; import gnu.javax.crypto.prng.PRNGFactory; import java.security.SecureRandomSpi; + import java.util.HashMap; /** @@ -71,17 +76,13 @@ public class ARCFourRandomSpi public byte[] engineGenerateSeed(int numBytes) { - if (numBytes < 1) - return new byte[0]; - byte[] result = new byte[numBytes]; - this.engineNextBytes(result); - return result; + return SecureRandomAdapter.getSeed(numBytes); } public void engineNextBytes(byte[] bytes) { if (virgin) - this.engineSetSeed(new byte[0]); + this.engineSetSeed(engineGenerateSeed(32)); try { adaptee.nextBytes(bytes, 0, bytes.length); diff --git a/libjava/classpath/gnu/javax/crypto/jce/prng/CSPRNGSpi.java b/libjava/classpath/gnu/javax/crypto/jce/prng/CSPRNGSpi.java index 6ded636aaf3..96d66f05200 100644 --- a/libjava/classpath/gnu/javax/crypto/jce/prng/CSPRNGSpi.java +++ b/libjava/classpath/gnu/javax/crypto/jce/prng/CSPRNGSpi.java @@ -40,6 +40,7 @@ package gnu.javax.crypto.jce.prng; import gnu.java.security.prng.IRandom; import gnu.java.security.prng.LimitReachedException; +import gnu.java.security.jce.prng.SecureRandomAdapter; import gnu.javax.crypto.prng.CSPRNG; import java.net.MalformedURLException; @@ -53,6 +54,7 @@ public class CSPRNGSpi extends SecureRandomSpi { private final IRandom adaptee; + private boolean virgin = true; public CSPRNGSpi() throws ClassNotFoundException, MalformedURLException, NumberFormatException @@ -62,21 +64,19 @@ public class CSPRNGSpi adaptee = CSPRNG.getSystemInstance(); } - protected byte[] engineGenerateSeed(final int count) + protected byte[] engineGenerateSeed(final int numBytes) { - if (count < 0) - throw new IllegalArgumentException("count must be nonnegative"); - byte[] buf = new byte[count]; - if (count == 0) - return buf; - engineNextBytes(buf); - return buf; + return SecureRandomAdapter.getSeed(numBytes); } protected void engineNextBytes(final byte[] buffer) { if (buffer == null) throw new NullPointerException(); + if (virgin) + { + engineSetSeed(engineGenerateSeed(32)); + } try { adaptee.nextBytes(buffer, 0, buffer.length); @@ -92,5 +92,6 @@ public class CSPRNGSpi if (seed == null) throw new NullPointerException(); adaptee.addRandomBytes(seed, 0, seed.length); + virgin = false; } } diff --git a/libjava/classpath/gnu/javax/crypto/jce/prng/FortunaImpl.java b/libjava/classpath/gnu/javax/crypto/jce/prng/FortunaImpl.java index 8e3782ef055..b18410c09f0 100644 --- a/libjava/classpath/gnu/javax/crypto/jce/prng/FortunaImpl.java +++ b/libjava/classpath/gnu/javax/crypto/jce/prng/FortunaImpl.java @@ -39,6 +39,9 @@ exception statement from your version. */ package gnu.javax.crypto.jce.prng; import gnu.java.security.prng.LimitReachedException; + +import gnu.java.security.jce.prng.SecureRandomAdapter; + import gnu.javax.crypto.prng.Fortuna; import java.security.SecureRandomSpi; @@ -47,19 +50,27 @@ import java.util.Collections; public final class FortunaImpl extends SecureRandomSpi { + private boolean virgin = true; private final Fortuna adaptee; public FortunaImpl() { adaptee = new Fortuna(); - adaptee.init(Collections.singletonMap(Fortuna.SEED, new byte[0])); } protected void engineSetSeed(byte[] seed) { synchronized (adaptee) { - adaptee.addRandomBytes(seed); + if (virgin) + { + adaptee.init (Collections.singletonMap (Fortuna.SEED, seed)); + virgin = false; + } + else + { + adaptee.addRandomBytes (seed); + } } } @@ -67,6 +78,10 @@ public final class FortunaImpl { synchronized (adaptee) { + if (virgin) + { + this.engineSetSeed(engineGenerateSeed(32)); + } try { adaptee.nextBytes(buffer); @@ -78,10 +93,8 @@ public final class FortunaImpl } } - protected byte[] engineGenerateSeed(int numbytes) + protected byte[] engineGenerateSeed(int numBytes) { - byte[] seed = new byte[numbytes]; - engineNextBytes(seed); - return seed; + return SecureRandomAdapter.getSeed(numBytes); } } diff --git a/libjava/classpath/gnu/javax/crypto/jce/prng/ICMRandomSpi.java b/libjava/classpath/gnu/javax/crypto/jce/prng/ICMRandomSpi.java index 9855f95bd98..a02fd147e89 100644 --- a/libjava/classpath/gnu/javax/crypto/jce/prng/ICMRandomSpi.java +++ b/libjava/classpath/gnu/javax/crypto/jce/prng/ICMRandomSpi.java @@ -40,6 +40,7 @@ package gnu.javax.crypto.jce.prng; import gnu.java.security.Configuration; import gnu.java.security.Registry; +import gnu.java.security.jce.prng.SecureRandomAdapter; import gnu.java.security.prng.LimitReachedException; import gnu.javax.crypto.cipher.IBlockCipher; import gnu.javax.crypto.prng.ICMGenerator; @@ -107,19 +108,7 @@ public class ICMRandomSpi public byte[] engineGenerateSeed(int numBytes) { - if (Configuration.DEBUG) - log.entering(this.getClass().getName(), "engineGenerateSeed"); - if (numBytes < 1) - { - if (Configuration.DEBUG) - log.exiting(this.getClass().getName(), "engineGenerateSeed"); - return new byte[0]; - } - byte[] result = new byte[numBytes]; - this.engineNextBytes(result); - if (Configuration.DEBUG) - log.exiting(this.getClass().getName(), "engineGenerateSeed"); - return result; + return SecureRandomAdapter.getSeed(numBytes); } public void engineNextBytes(byte[] bytes) @@ -127,7 +116,7 @@ public class ICMRandomSpi if (Configuration.DEBUG) log.entering(this.getClass().getName(), "engineNextBytes"); if (! adaptee.isInitialised()) - this.engineSetSeed(new byte[0]); + this.engineSetSeed(engineGenerateSeed(32)); while (true) { try @@ -207,8 +196,8 @@ public class ICMRandomSpi System.arraycopy(material, 16, offset, 0, 16); attributes.put(ICMGenerator.OFFSET, offset); // specify the index - byte[] index = new byte[8]; - System.arraycopy(material, 32, index, 0, 8); + byte[] index = new byte[4]; + System.arraycopy(material, 32, index, 0, 4); attributes.put(ICMGenerator.SEGMENT_INDEX, new BigInteger(1, index)); adaptee.init(attributes); if (Configuration.DEBUG) diff --git a/libjava/classpath/gnu/javax/crypto/jce/prng/UMacRandomSpi.java b/libjava/classpath/gnu/javax/crypto/jce/prng/UMacRandomSpi.java index f6949dd8d71..2faebe8eb04 100644 --- a/libjava/classpath/gnu/javax/crypto/jce/prng/UMacRandomSpi.java +++ b/libjava/classpath/gnu/javax/crypto/jce/prng/UMacRandomSpi.java @@ -41,6 +41,7 @@ package gnu.javax.crypto.jce.prng; import gnu.java.security.Configuration; import gnu.java.security.Registry; import gnu.java.security.prng.LimitReachedException; +import gnu.java.security.jce.prng.SecureRandomAdapter; import gnu.javax.crypto.cipher.IBlockCipher; import gnu.javax.crypto.prng.UMacGenerator; @@ -57,6 +58,7 @@ public class UMacRandomSpi extends SecureRandomSpi { private static final Logger log = Logger.getLogger(UMacRandomSpi.class.getName()); + /** Class-wide prng to generate random material for the underlying prng. */ private static final UMacGenerator prng; // blank final static @@ -88,17 +90,13 @@ public class UMacRandomSpi public byte[] engineGenerateSeed(int numBytes) { - if (numBytes < 1) - return new byte[0]; - byte[] result = new byte[numBytes]; - this.engineNextBytes(result); - return result; + return SecureRandomAdapter.getSeed(numBytes); } public void engineNextBytes(byte[] bytes) { if (! adaptee.isInitialised()) - this.engineSetSeed(new byte[0]); + engineSetSeed(engineGenerateSeed(32)); while (true) { try diff --git a/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java b/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java index 5b0bd4f8b1e..d8205cfb4ad 100644 --- a/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java +++ b/libjava/classpath/gnu/javax/crypto/prng/ICMGenerator.java @@ -263,6 +263,15 @@ public class ICMGenerator // C[0] = (s * (256^BLOCK_INDEX_LENGTH) + r) modulo (256^BLOCK_LENGTH) C0 = segmentNdx.multiply(TWO_FIFTY_SIX.pow(blockNdxLength)) .add(r).modPow(BigInteger.ONE, counterRange); + try + { + fillBlock(); + } + catch (LimitReachedException impossible) + { + throw (InternalError) + new InternalError().initCause(impossible); + } } public void fillBlock() throws LimitReachedException diff --git a/libjava/classpath/gnu/xml/stream/XMLParser.java b/libjava/classpath/gnu/xml/stream/XMLParser.java index 27aaa734dd6..6072a9c730f 100644 --- a/libjava/classpath/gnu/xml/stream/XMLParser.java +++ b/libjava/classpath/gnu/xml/stream/XMLParser.java @@ -725,7 +725,10 @@ public class XMLParser case XMLStreamConstants.END_ELEMENT: String qName = buf.toString(); int ci = qName.indexOf(':'); - return (ci == -1) ? qName : qName.substring(ci + 1); + String localName = (ci == -1) ? qName : qName.substring(ci + 1); + if (stringInterning) + localName = localName.intern(); + return localName; default: return null; } @@ -745,9 +748,13 @@ public class XMLParser String qName = buf.toString(); int ci = qName.indexOf(':'); String localName = (ci == -1) ? qName : qName.substring(ci + 1); + if (stringInterning) + localName = localName.intern(); String prefix = (ci == -1) ? (namespaceAware ? XMLConstants.DEFAULT_NS_PREFIX : null) : qName.substring(0, ci); + if (stringInterning && prefix != null) + prefix = prefix.intern(); String namespaceURI = getNamespaceURI(prefix); return new QName(namespaceURI, localName, prefix); default: @@ -831,9 +838,12 @@ public class XMLParser case XMLStreamConstants.END_ELEMENT: String qName = buf.toString(); int ci = qName.indexOf(':'); - return (ci == -1) ? + String prefix = (ci == -1) ? (namespaceAware ? XMLConstants.DEFAULT_NS_PREFIX : null) : qName.substring(0, ci); + if (stringInterning && prefix != null) + prefix = prefix.intern(); + return prefix; default: return null; } diff --git a/libjava/classpath/java/security/SecureRandom.java b/libjava/classpath/java/security/SecureRandom.java index f965782369c..0c7183879ce 100644 --- a/libjava/classpath/java/security/SecureRandom.java +++ b/libjava/classpath/java/security/SecureRandom.java @@ -42,6 +42,7 @@ import gnu.classpath.SystemProperties; import gnu.java.lang.CPStringBuilder; import gnu.java.security.Engine; import gnu.java.security.action.GetSecurityPropertyAction; +import gnu.java.security.jce.prng.SecureRandomAdapter; import gnu.java.security.jce.prng.Sha160RandomSpi; import java.io.IOException; @@ -401,9 +402,7 @@ public class SecureRandom extends Random */ public static byte[] getSeed(int numBytes) { - byte[] tmp = new byte[numBytes]; - generateSeed(tmp); - return tmp; + return SecureRandomAdapter.getSeed(numBytes); } /** @@ -418,64 +417,4 @@ 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); - } } diff --git a/libjava/classpath/lib/gnu/classpath/Configuration.class b/libjava/classpath/lib/gnu/classpath/Configuration.class index 1b3fe05043c7c2531a5d043d717b80ba8d45cc5c..27c31f26e17ee33ae6db0183ed3c2348c5e51894 100644 GIT binary patch delta 16 XcmeBS?_i%WftAHT&(dP!%+E{!De(nb delta 20 bcmeBR?_r-Xfs?~P&(cD-peS|Y)Xz)+Khg%$ diff --git a/libjava/classpath/lib/gnu/classpath/SystemProperties.class b/libjava/classpath/lib/gnu/classpath/SystemProperties.class index b430d0761a564ae2d38b847fea83f19c3b43a409..b0359303db5d22b4f5e2ad3084d63007ae98126e 100644 GIT binary patch delta 18 ZcmaDXa$jVF4kIgzfu5zsW>ZEzP5?J~1i%0Q delta 22 dcmcaF@>pbp4kIUrfu5y>Zb4D%Wo! diff --git a/libjava/classpath/lib/gnu/gcj/convert/Convert.class b/libjava/classpath/lib/gnu/gcj/convert/Convert.class index 89dc4556c236fec4c22699a1c999373ffd6023d7..15917dba993a99bd5dbaa4937dafd7508cb3fc4e 100644 GIT binary patch delta 489 zcmWNLOGuOf6otQgWlU(Mnk>`a*-T}QX4V8srfE}+D1{l5Lt3UOJ~F65qlH3{)kK^A z9*d->Iys>ZOh{H>Eoxx|En2m#WwdD_1QA{C;&RV9ocqoB=lrP?E-6blxjHh%W3`!DZ=VP~u#X zQLajYVM%gLCb=Og;*#d3%y3KI5RwnvmU-^TXYR@u?#Wjk$PY&3r|n-nlm#BiKb~k7 z&(zJR<}#-FJXIeFtt{ZV2AR+*#-_P4{0|DXW=a46 delta 489 zcmWNLOGuOf6otQgV^nCS92J`$_OKbn>|v#$;-tx>jYi>ve3T(2Q^+t-nbIOfFtMRc z{6$a{mgeN3B@R8rg}JbWA+%`KvX;@Ng%Ct^xr@s^=Wy<~6j%z(wY#J|)!~YyiQD}SEK+9x_4eeH)rC1mBMk=8#TlZUrH>}YXyK7TjdPA9?JUs2GUxeh zsc&55JKd}s>|c5$lZfPURrb*&Q z$%rJlBS}VOmNA**uB3>|JMPIMAz9(Rtm4QT59A9ESjWHOlm&Q)z6ex7m?61UTF<4wU%iOGo#JSY8$V$lQ-H!Qm-(tQBvB+TkYq)4)Q@q MSCxa@G$}UJZlME)(i%U-#^r zdM)$8czs8J0oQe~>juJIHxaEEqkbRPE#zxH@z)lZjso?xneP&F6-KSdzP@E@`aBPo zqZ@qniTBA-%LU`R%;{Lt!RcS@p=JcS{^?{FSI`4QxPEY&imT|6#vW@d#o1DlLceJI zKN=tFjaszZR1#VcBbW%GBEw?L#gP<%TnfZw3c?&}fpQ8)HF;1= zA$W^Iv71`sJqp7K3P&Tg#T{ygyA+9^sgnV9HvZJrL{K*qMcqw2#hNsVGuhP36u2qg zlu&}s(Z`#;n2aYGZW@3v8mKc2Ku;Rv6qV+g!A@FsYv)4go1HRr-eG7%nTVnhNK#Cu zETqzCWYQQEP>!>9$xD<6OXHu{JYCY;Omgb8LY%a+)d^D(NYj*|0PSc7I#3~EsYtub z#sHdwK{O8|Xg;!NAtq9>Zu_$HQ(0l?3J9%K#!A(x3LR+;;;7m?zx<)8d>t;@0H%#P z_9nEXchQ!1DETfOzYd9t$+TC;`y+A(8u`A15P~`y-Q6Fosi+$AdAQhhQEL#Uf6}3Lb{FoQYZcWdP=V zekN%<{P`UO@Vf}(-y@oLAeMKj3UwI4A84yRn5(75sv*6Z0 z&;v|&j;!78cU#rFgVuc4nNqXR{NVhxX0UnU1gsmX*Cc1%jszE6LLd>e5Q{eAMws}c zg9IQ(?Kla-3(^7u#e;OkQ4-=rt}pa!1CcPal5l6k`c>^aDo1AoOBb}0C`2p9Nwn5= zLz+Z8-Co=7iGxRaqLcJOg2Zbk&U^8-?WXcYEldSV8UkbpT1vVSWN7o@=q#B^G*XGO z&|5~KzhvV@$-z(=i%iMIXc>oG$-@MhfT=PGGi4g)O958O47@5cu|;vG%*KA1gO6n{ z8WqpUB77~2aZO5bN6PS1A1TLwrPR2k!UW556QS5uR+{dz%Jh*+lPXnajI1$}6{pB= zO@Y)n?SJ==&`mn_7WhdmLc~F&yn!g$=6E(P58bJmI?e3X%zK*ogJ$-4>ozu;%0I(L z4ye%e@E0$_<)H3*NOwG}q8>rMG@w9^Vu2h(i5$l=`4rW10-K}}wQ>^g%a=GJr_m&5 za8u6WzMR7oX)^wD-UP{4CQL4xE^^5v$k%3oTsA}Hipf?#SH3ahD_{ryDEFLp8H*$_MV>ozYw9=LGG*k571RHMt($3d8kM5BNF8ilI5}9g-1x0 zpB+za)9C*x%QLvGK`ZNn*4BmgmJn$LQPvOrtQ&)^KZe*qjIcq-vcbr=9!#_$m|wzQRM--wS%hl4 p7@KS66aAtYqo#hp7YC~Aix6Y=DT6&1Mphu3oa-vh{ zO`|9J{;9staISbW=tqq`_q!|qZG3@%ulBb9j+i~EhXa~h+s-b2O6wBq$7ofIPX&Mr zRXL_O2|=6;W{-ZHqN%BxkcMvD7pdG2{kcB|@<3$rAdKOmn7|pB%)>C7v#^MVqmoCU zo^!CCN1>6&U?=C|DCePt$Kf20$7P=2zu_x2W{Q94ngwQIi4IVTa9)6pybwKj5q_og za2W=0Ifk(pd0dGp%IRE5sd-lZ-yBbWcErS@QkvV`~QFz;h2@5gdJ z;N&$_(IL3_uydxNNH2+tKk_H8n`C^)^axI<#Vsm(QjPxvUHKG}__TWT83u7HMk@>W zb4=s2DtiuIK96O50Y1KnH~13XiyTFMI>1m94tJ%s24`{}Z?PD?H#^ zc*M6c6+kJ1_4ydHo#*SDT=&$yZxF-xot>|hn@5goLza2wl0c9U zB7_ku79GTecnL<5u00ZpK@x_c5`i4$IB`3L8|S&AArgc366>7bxT;IMYIH-SbVq0D zfkdT85;U(DhD(A|@_Lgy8E)x~?&3ioNzq8MKk~Ot#`mHoW`HFVp^}AmGC~EiwfIQ% zkWnf$Mul>bCV3bv<1tJoAY1Y=Mqa{rnTP@@z%-eHSuzcCr4Wmy2rFea)=Dw9DVwDP z2c;B8Wj@X*FG&S%NG0yb60}Jbp7xb${3J_Eu)Ja-Wrc}T_L4gDg4CP7veIOV&rFcj zW`?p*)|z5j=lo{V?dVO~_7=EgE23l@x=JGwWV@5Uxi0z-8fn(ZI~sXcBfB-S$A5eC z8RPpC0_2byeHbBf1Rdq5&iawg__3OL3{&Meisb~#qy=6%i52n*8st-KkyB`tR_u|_ zaYD}GvYf*`Igdwj0ng>436V=CT&|c7a@F*dYo?F<-3*cICR=WpeBBqwKg<;Q(iE~B zHD&UZleq1hk@xiU?!wA_wY^Qx{l0elK+pa=#3|$Dd$s=|dMT6SF;e6QJ%Y#RFHevz zPxUT5L8ko2$#1+o{wG!WAA;p)w6{Qv4L}zgh_059U*>t>Y2W#38 zc#v(RiuV4uy#K|9jF|94>~B~K;BBHWHcv>lJmHXq6MC8XPlTD?H4O~xua z1)J?Oyk%eZ-`l>+_-27@5hCquMA>4*+BrJNTy(ed;ISo0v-4487hsWHgi5=L|bm*QPph4*bWKCm_Tvt5pp_7$A7D{w`>yJ_ox`8{_dQh(1M0&+}+ NQdh=zV`#FLZsax6u2`*- z7z!mcZ7HP>D5bnx`U;)tbO>!^Pt(ctCpyzVs?+b@UEA{5z)byvwR_LG=kcBIoU{M= z?>}wN?PX4mpk7G+UDJSAXQ`mPkXZ(_SQ?P>DVxOAjv`K~u4&{ipCtqS!M6WUYR zQo;D1?Ua6X*=2b>A+h)fvU<2`!`6{`}bJOl~YUoIN!)c`iRSlN%iq*gfhx zHQ#dlS*u)^G3=$H&YQkfmZ_Rs_X_m9@67P*@HuTGGd+K9Z2VLV`+2P5Nv$K5k|m}X zJ5eaxj_p4t(AwQID-aoVi_*ZIjPQ$rilY;U4BREKXEVpqvQ?{@xEqIwT1ol=3b%Ln zY{wyvB<;gzd;|y|O61 zX=|~ptK$}|@~q|A>ODMcI}u`WU?*3zakQe}L=O%q+bI)Kv>7-maPL<$BaSrs)wPFA z7>KE-hfVB4Jch3e9HN0#!CR^NZc1?~RVk*HtlCn_A(i5I6hj6E1rBVYHR_hjvf$gK zgozV4DPY#fp|bQ{XVR+DdUFa>i_26VYQir(X~vJ&hE$l}H1RlwNd*N4c^n$j7%Lr3 z6MxCB2^`&_C%&u$$!$dq)nEeA?o7|Zh=Fl|W7`3=baLr&r5*J4SeFd=YwD`kfZ1zD@HYkW_k<(bH0ia-_Jvz~p?F3XY%<9L|gdSj$Fg@LD` zW(J428TgjK-c9lc4Q?P$^ZL}0etIT15l0T0U6{qU4a^DLp=DdyDlf{iiFv4DGdG;e zX0imNBPi8&&7l~cCiiye`(!o5Cu!G`6{~!~^(wMBn0(>ri>lwgW8xgnv&}he1RifL z>c;$0p)`{u99uikhP|+eqJaWISG6ms=C4}*QaZm<^JOKhl`Y9mi3j-UV!Y+*T=xX{V>Z)Lo)0ym843{`9rRTX`QYo?xlfgtzF0S~prqEwe z=szzo`hVg+z2v!<)TCnf#qnLdWZ*@Cp6zY3(S5U%x^Kb_XySW#ncOS|n@R>9Xml@( zWHLP&1Fx(%kK*m*I(bOovC9QnRb$4$)n<&QHUwNEPQ5asGUdw5aApU4XvSj=+5_%{ z-Jlj=-76D%J}lNRTu_^^WnqMGLA$dXcbF(&H4139#dbIz17}-HNMWn(a^g2hH-o1% zAsudC8SZe6Oq|pCEfc4}t-B`>XXRx-%rQ#TR22l?G4UqG)YE$=-pAYA(Sde8m~m>F zerVz&{D!DFn-)UcXAOKzes3?L{;Zg=E4H7LR$)mNo4}5SoJ!*lCjO{=wp+zw@SPI| z7^&&`8qe$RfzupxT(r$>2)~C?it&*yhTqDMsy4K!g~q2AwW0Jc_Y;3R)e_aeyZKIs zTDFJh`K zYNCf0T?Yn{Fy?@8C#3Oxc_(lVdZ5r>?X`H9A zC%Iy?3~CV_DBuW++R?$lEJiR&^K_sVF`ag(k_XPkOT4YXcwJ10$76V6-DT&_HEw;M2jVwo^-7?1(mSd7yRR)*4=*fPm~LK>fIalQ>K0t}r7HHGDsW z^?4j-%u9T;8UM3{*I|(=y!9LoQ8P*1e$K7|T*5=RjEAv;NBI0GXUa*uOgyfz7_ZRs zRZQcDcnUwl(|8rn@cBGmr?+2V8E??qo3!*6Exk?c_wgD&(8xYP>JT&hfcmP`ukrq? zL^Q(xKPJX4jOZ#)f1)#4q2^C1TPFTL!_P^-I(E~;8+;O~wSrnOI(9hiMeka}FF)0W z6^Gh*41C;F(&$D>qdEi*B>ajY28^uGl`_*s+6=sh-MzhglMVd3fp-;;`da&LHSobT zMCPvZ!am}44}QxF%GE(e1pJBFeL~4!DETX~yx!!xYr}OHe#iWjYmS7_^%>exuG_Vz l27ccgA)PlF8??g>qSGJ(t4(&>H|)04e_;0-Ew$j2{{cCbSlj>r delta 777 zcmY+C%Wl&^6o&t?)5JCop-EaGNs~BSn%Ln|uBAXr(r%0>LIhHkf>f#um7z7FNhR12 zwrr3h?^v>7+e*|$Q1t;=u;eLt1rTS98;VBqT+W>T`_CD_%Y4_gZ@<6n0vN+gPn++p z-SHNs{0Kv2`gx0MkP+9R;vj=ut~6sf#8B$JF6A^N5LdyF(lLOjSPkijK~Zqn`ym<8 zqsYdP@qS4eIfoH1Bil*>1sz2g-ZMGxjZ356TY18}r=*e$17*9iP}fMMqQivcy-+e; z2E|=pt-tEBv@Ytn1dHO_ zU3OgF;GG8NEs;5{;|eAiRF}W(goIdmp>Erv$ZHJMWw-Zc$or`j$o7QPng@Xs8g_1GIZWw5oKOvbMwm##CkNjq! zQKIiKDFQc1XOb-5LK?F$a2v;hSfJL$ah#wn35#YEjNv3kL+BDAg}HP#@&Pe*MlAMCLXrVGubKaP>bI52;~~D6&YACHgn`zG98O3j^1Q pEoyDjdxq>92?@3upnOdJYorzg9O}>0eR^tNPem=%s|Q_~{sS5BX0!kR diff --git a/libjava/classpath/lib/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.class b/libjava/classpath/lib/gnu/javax/crypto/jce/prng/ARCFourRandomSpi.class index 1adddb1be0c30075e84781d4e9b8413b39db602c..6993b3a0f3e692281949b11385261a7eb15c1505 100644 GIT binary patch delta 606 zcmYk2OHUJF6o#K~TI{5k2rOzNU<*a<&5n32iXz2J!JyHqsKmwCPHKq^O*=KR>c*AZ zS-E!M)+Sm-6J+hb@edeJX9zK0a`Mf4-g%$%o%fNCk?`-oKlXq*R{P<7)te?AVn$JH z*j;1Od}A6NtJZBdogHJdW*M!v-7u;{#d>Jk_3f>ty4iB9c9dC?icrIHs+Lt(=yrFj zyyI9Mg<4S@wd_XIw(ePPodb0wvr*1I38TnGIYDxGD?}$bLq-wv?NvW5g27yfvu<8X z2hMTceV`?R7sc)twPWr(ZE9AbZInaIE5^K;yH4}9Q87EO*34Fz5;2_xcVEluC9X$V z}#wz37b@gDfH!l-uvYL^J@1#D?_};y-%&ke=oemp!^H@qlg6csOOM8|*p`f(k`Z1BszL8pn_Vf%1Mhv=AU{f{3cJz@-)xLWGEeKrFgv zhrD77NNgJkf(lh(&5r`cEkfCxtC_j?oHOTs$h^tezkYw)0FE&?uzxB`vCm;YlSxUN z2ozSg|1@|NM?HmVD7HV3di_qU&=vw4McKh)Qjv|i50|@9D~elDw3NZ;sL2sU@$Hjh z(V@z;VyqjzjQ??&Qwu?(QNC+(Jo%{2luS-4c0CSXgw=k$+^Jpu`?q$+TX#d@ed%;&Sp@|BVP%Qy6YjkgmJ+o;~c9N|-pnLD@Kq$srC4gGyr(%*eDO z4m3Gk?=$&#tk|At4w;fNSJ5jQYg7zAVYCPGV2214CGb%bEup<5leSFeDRFPpL~e`p zzX_KUA}wE$rY@LDcg1MBs{5VV{8vsj{qdQoGUQA<75CS;pyBCX$PeVwsN{VtLUyt! cSv(NQrIEee5y>l?k`{Ra>cXHT>y&BsFETw-nE(I) diff --git a/libjava/classpath/lib/gnu/javax/crypto/jce/prng/CSPRNGSpi.class b/libjava/classpath/lib/gnu/javax/crypto/jce/prng/CSPRNGSpi.class index c10db7a1e0d2145dd0d7d260b79cc96eb3236459..b73add563099af0671c97b6343d6ac5f2cc9be20 100644 GIT binary patch delta 860 zcmYk3OHUJF6o%h#rtQ$_lzU4NX}L-}wH-lG3guR<$VC=lP{3Q$PMRSykakK+V$!wC zW>#+9xRodr#lTYIU+^!m@CO*^@`FlTWDW6At?Gl_2onY`v5YQmP zhbsa)%^}vycj2nJ$R?TJe8Y+*5!VnDFvJke>IG#hwU<)zYPyiqjD2M*ttz`YJ*%u* z8FeM4XLhz{GpSue%}EGhfI-Nr#;U4j7#j4#c4FU9^MpIk(4^{wt}d%Zqn@<~Hxr>X z0Sbe^I_FhNH$QT|kto_lVjYptj{(cOC1Dg126s(kwKl?qJBSGwqjqzf?=XLHPJSE{ z=5Nl&CQT0?VAJL(uk^<;Ywe$4@C29s4Wb>4oTg_dEP{LH7C-LhHWQZQ0}1n_@|B-1 zacG4d4!S>QosF!GXy}v_yC`Y^4+)KEraEAbvW#qtTtS;`JA_9*M#mw#4=BkYKyNDv z08{kFNM?o_XVF6$sn&>I^igE9_NGk9QjL+rk+pXnWAFnxH6=&2BU$bC)(Yy~R0S&QiAGFw(SEcpY7u3?$mPBh}4T|*#6-7cPKVUuvl>%P6@qwoDGR5;L@`!#yt8fR;fxDW*B~$*~vtU z88shG7K=QeDK2c~%bQ%)mMb~_NGp_73r;e)bEUGX`8LbjnlH)KX9&Cdo?Rxku@2qDbS!_|C2*ANw)}uW*hom2 z)Sn4{c>;=zvp6r|oc>er_g%mgL$}H+TH>+Bw;80sMk1LErX<^YZ{{x z=Jn^|jLY8kTj$z3=l2cRq76%!(!Y!IRR#rSbWw{Yib!oiKsQYmh_J#22aeDbr&C6| zEmX(R&<7lQ2lpP$0=%?3NDIsnAr2Yy=rfdUJ^C>~lL>?H(TTw-liJV^dSAj`ZD1&^ z`0E&HdOusPcwfLA*$qYBBM{joO`AVJxqwBYERokTCB6hFR^Y-a@slk-Uz>U0M|4Cm zPL2xfIE5&YOh)?$87edh#0*r!Um!Oyk*?!(GxQejuo&L|h%+X?1hMTQG&bC1(PyiPx1|$7KC&n%0+BrP`kC8Cp huw{jw0=H?sLxy)L%)Nh%JRKtsHDnkuYRPDD3`|DV=sY#ab?6xmcjy25?$#f~eRc2r*ifg;o=j3X@tQ0~rdDxM1hP zm33DBg1VGM3Xwz-+3^qb#~9x;ZM-bzeCK@UyFBlA=0y7$)=qwX{RSY7g^Knd9M~#3 z#gZ)`o>rdBwM2A;poJiCN=Fj{Do$6beUT_4($}g(MbLdG)|DW-DnEJyJxHiH_d&#! zUi7)$Vj&nsQpb5*aBb10X^7&Ij?0Lrze2-()_ za(26HZK$|Pf|bHn!F*M)i{`B3tT`ISF)8`3xi5X);=23R_a>(ygBcZBmM+?xrkAo| zEp0lb^0v9MWSQ#@^B1MZdQ`BN*H$yjh4r%K=(vrPfLgT5iZSElJmkNNM|8+jtaIQ1-8J+Z3L91tmd=41E)E`7 z5g0r^+GSf6LrAe`3d5eQgY?i3Omoek88hgl^nT1^fW8r`kx=c-W?u=#{@&JLfFR%C zAHGkdlbXi=!;2V3G*QD)4e18cNEMO$hZxTf?PKETFQ7uj3AUahib+K98})1*w9gy% zPL9_PNxI1J#|+OSiDy)n;~<}VvBJMlyArPpT!&l1nzhV^S=QXN_sK? delta 728 zcmYjN%T5zf82)CaGVRQikrogsx3*Ma7_1dUluC%!L=E*4!K6E@X|SeDNg0gBMIXU5 zv+)5;*g~SM5dw+qSoi?GgRfxx=Cq+K&iT*f|8D;u{Z!LV|NT4ykil|8d)C;(Zd zf-1s|qr^o6dI%C&FQ6xgi1$j0C;Ks|VnD*cyW;y|ddDqS()X*CO6iSTt~%QWE@8;~ zDm|JsFl-=(5eb2^Q+6dprdGR*V7o>G_-o}!%d{3dP+I}4mx zd+^U0!3XHE!(iUBn^?5>cx`L-imw;+zee=>Iez_&U&kFRiOi}BF>xe_Qr#TjrP~gpZ0ly%O@_lF zDqc`j&IW9KS&Mqzo!r<2{wzqrK6}Zo9cB5li+}Zf~|LyAtu%%1Fjz zZ;ZxUIy=_3M7xr9!s1!_4a`#mE(lCfxetUFV-#$8mr$&bOy7EjZkvG!TKN<^u%Z6dQTWSZ=^*vRX8wPw`S!42TcYIZp`9uj|%eoXmXpyAr2e3J7RGIPmwC>{M^T|#akS4e)g_1 zMxBtkxae(z1^-q?l8IQnwYDeL-eM>GjB(7OoZ|*T=R0%$vU)%7GH&voLE!&I7EPRR z4w$9BF-}^1z$xddxvFf8(-t35D3X$$v+ezia4a*@S&MTBUQSG`n0$P$%(unJTg?sB z6679kChQF6uFegU!+PfF_G9ih4?c{KdTyeD0v=%*jjUi36>OHQTd3wy?&2}-<#CN0 zRb3Mg(5#FmT4|vhn?AOZ((MhliKRB@Prse25&15yhG)?fyUxgPQKi!>H*~U6XTfX& zcT%I9QrSbV;s(zV(Ya8*J%XBPQ&MuC>NL*}lUGs_C`|KGnpZNuQg`X4G_Q^0Z~S_<^Yv&fJ7FMc4!um zt3V_8)osSvY89??s=cM|a(B=>#ZWLO=zXF(C+G=!TdF<5oKdRIQc*6qCkyb_uy>k~ z#%abH^Q}pahE()Un)lOuILR63TdV4hp^!KKp^%woZ9^b%(HHiW2Ld6VI}lKNh3Z4T zOvqFuw>(f7%5|FxIN`j7sfh{Ax`uVq=Y00RZEpI#(iBbN!V$#-;$l!6aZvgnCZ8e6 zFw7#3h>a1-5NfSyn4{`4u6`%f@gy5KMH{DS=eWfCM4U}anorr!Wp%tlYLw5E`ngiR zQ245>FS(}Q_k6{#T;~tI&QiP+D?{EK#WSR{6ubDHNlD}qtY4Ut&n<92saLNypnxB^ zAj>0=3-olaMA*P$E((HIV0tTrs!Qg8_VP&;n*wsT)J|yHYtne9tXwIW`B=HQ{12h4 B5+48n delta 1123 zcmZ9K+iz556vcmMrk!(oIAe!~7CLQXE76u-Km%!L!5EsDSYt)3wiJ*!*kc`92Aoc7 zA<;olK)e8+mI{?}x7>tQa9U}@i^d2V@q&r*!NeDhFUVh@uIZ4Pm@oM*dw+ZHwb$B% zCEH8v8-HKD20X;nnEglgQiInVk~ACSy0MOE%ze`BOEhdvxZMU;tY_2RYas4+_jDy} z7O>Od4c_$D2f{VG9rmO{gPG7~H_`06?deZ@9iHZG1G8dnLu2ED7L#|qOM$v2`+48w zfWbW*BfXJDU6EMFqNYgVB?pgw1OKLI%pki$5sfyFanNCq54>V?nQ_=#Z5CI2XfXG` z$mT>m8tZ82iFUQSahoBA9cnmgkne@8Ib|(2$2nw7Sq9nY)z5O18}Q+migSvxPGI_{tkI$=tEsX&#jDk$vin%9y?|`(TeK(0 zp_d@9kjFNb$Xc3-XDM}hDHGfELsDY$I&oz%(qo}LEN@ah`E-_7UZFNca>rrpN|jBq zD{ZOrS6xf-)(Cd%1P_k(IY%AZAPch&Y7NeNl!Q;|FAedst%878jef*lj8Z5_&-gNW@|oYsOGFRIY&Jg zl;soUyR3|#vXXH+`HU_uvY9XF<4ZC0mAbw`KVOp^<{O27EB8%(`;O1~f$RLpEv?`A ziNE-Hnz(H^X+~ydjq%be^~_=*>CJrSJLf&`dCxoF)5W7z z75AV2dk=VzTN*w^$er+ordB^F8Qw!$Bc)iLv~$s(M1LZhH9K<|%NdOJbehq=jGc_e zy^OgnVR!YWKkiEOIcCPd#!_fW(}|mAmm+BA(yfDznN`d;?WAR!o6G^Hn9+F$X~^Oz z%B^h7wj3*wva(*=hyKR!P8~(RK{u8c4Hyj4CeRt0_{;>4WWT{i4#?ETFIr=OL!NdHaN7(Ogf= zmc{HuYJDcto6$JwZVfE`D9^Y-h|`M7#*K5>xRbH$WJ|bR=R3aFa1|B*uNv&+2lrN> zDVXOcgEO3U9|c;XdCnXBOtpCC^v>|;j4|$Qc+ubzUn)v0F-haHqQ?DCtNGi~mZggGQ^$7RVFfgcN;yTb)HR2EXl-OXhU!@o?4nzd{YH-9aj-Lv|7s1|)WsrQQs`$X*k z21DZde%|1K{EI`>ik2{kS;2^SeN-4mg=>UqnpuyW~nl$`y%|BC(c5T$3mu TqnC1>8}1gPO8Y}NecXHrWH#j~ delta 1048 zcmZ9Ldv8=#6vcmM9`{bCx0crok2V%Hb*3$~D5ga#No`_u2*n3l0;n+1VLD}ctMh;s zDW%0ip$LU5C@3gJDH>y_;y|R~1Mrvr;kPixPav+gSQ2xReb3qZ?6uck``i;N|6Z}^ z{y)Fo1D@qO8=oQOo%O}0TmA@i8umG4=`d8L+;qlGZBF$U+6M}$ydmTkdmnDCTq|Sy*KH4DC^!_otHJ2f0}h+$H`wtV?TJKPr_Dj{ ze(;6o2N|+CYCL!?U|boAFzp<5_?S_z#cF;0xMBID zoP=9Q<=kZUm0YebXLG`vu&Ud}7e>@);262j(+p~ib)*Zh3L zt}+#^l+#9pms!Dj@3+u~vh@UbjY^%OWy7_b3Gq6Md4ni#@&s@3G+TIvw`t)WHQq^r zt=>%8hN0c~@N0U@ssfYP{+ZCts+mwn{hAUzYi`Q#qfs_WPvR$ly`(j(3T#~V2*J!g0@-DX4vD8v-&p-E)|MFRyF|ENWlQ8|Jq`YbdnNWy z5#D--`l$zhO)GCP)zmQXkjsONwHUAL1{sXk`iX6@NtW;H7uXXe=mSN8fB$&Cglr=$~CRDD6VEX h-)Lv4bhW^*Ygg3c+eK2lQT_V6m1_%eN_BkP_!mhv*Bbx; diff --git a/libjava/classpath/lib/gnu/javax/crypto/prng/ICMGenerator.class b/libjava/classpath/lib/gnu/javax/crypto/prng/ICMGenerator.class index 9c38cdf17992bc5b2aba28c33e330b7a75d39580..53776d6de501c780d90d019c091856527176d628 100644 GIT binary patch delta 943 zcmZva$#2tF6otS0Z08pb#72>o8Z#siP+|fmQj-Ny7=n<9$^t|yr62?**u}=Nk?pj& zn=D$SwnBjL1_(20Q|1PP83IY5kOF1uETl@^Rh7Eq51_qv5p247@80|Fx$nGl-tV&~ z8(j}y-WUT~`EA5?!5VNO9Q1IAIf645PbRyP>E7)YhlRRCRnN%dX zGLuPXTnv&ZFULF_=Y-5s*t`i6%*viM%`y`j4Y0Zh__6rH`Gq+1*ztkcUfktgYuZC44h-X8>>XwB{i_@acuO3eU~qf{ z!wJrDk&|YvdC&AHKSLN~9^J*ir_{=T$Mi^zSuayfOnfFGwJcIYCa5isr;{a`m7}j1 zR^rCQ`I^%@q{eLI4At0ZGwqyZhEnP>&3f5+9Q4UcF3?LAyW~&3{u?Zw%3($bDCW8B z=MqJn{FTrFm$m2;pKSOq;srCgqF}ewN)II+?Us6ZhpRf;BTJ=)Yg(HkyIIC{jcVjM z`?;Z0^dYLtC^zvcS^Y*z^p^6sYc^DP?5%4UQ++1JLzn5e!~)&kE|D+s=^*Y=hV<-q z!Ql&SzH^01J)9hCxBKnElQaZxRxfsxE4F|m=(lh6+pqB;6mV$YFmtqLh#9YYG~F6- z*n+QH6xdw>SC;EME$sEx57c4FTX-d)zkM3>B}ki0r&DIJM(XL21~$oTqS8o0=JK&x z_K7s{xrEpw^Es$89Mb)WEZ~%cDaj)4N^8ZvRjM}Jd*xmm`zrp3=ATs@Fsz|}AwQ{N bHZ~EfsAwml`Om7mgFX0PMZzy-|M~S_JnP}b delta 747 zcmX|;Nl%ku6osGrb^fTOK&sYSWvGf6Q#ELe28Tu$?oeamkcbGa0TB!oW8JV&6E%iS z6C=(F&I*=783hLr$G9eO;l{+3CjJ29ZDZKHcRJ_1cX${2R%(9yJ30ZZ<#WpHbyys9 zB{w=l=}xCz7P(>#O-+%emb&ADx$|^g^klrDrMb;Pf3n6IR_s9XyDM}sO`}OF`z&MF z%?P7HUc4oeh)1`#w$>&DYx&AU5f{R^o0rrH_M`2wShUq-lGhGi3EsxqQ?=oy+U8^7 zy@|GX^n{x?yiFc9tL)Qm-Z7KDYhDu97Odohu_s;W-fj3&DtVV@^l=q~Fvxs%rpG)* z(qXbj$I4KcMN`EVjk4Y~t}Dqfs=2{UC3%b;+`@^4^+u4}1oelA;pL7B+c+UVxJMm! z&dV3N>A}HQIm>e zNewsmvsz7MhD3&Q*In6SN{gA~Z*Rqsp+Uy9IySMv>azy!Q4$z;Zn9-F7QZdvv)22p z!%S58ZHjwHnPPef&S5mH_uDLiIfxQ><;b~bgsEhrpm?7LhvbtlUdp6^RZ_@$ov})9 zQY{PEFAJ#=KT!$LD2q8GLC(rjE=mcVQc9PUaZT+_3DGUf$;b+(q&)enV8Qn6SwxR` kA-8ygYT9|Pd$LeNEVnx=jT(Q@ZQJO?_umsfX0Ohte|^!V`~Uy| diff --git a/libjava/classpath/lib/gnu/xml/stream/XMLParser$AnyContentModel.class b/libjava/classpath/lib/gnu/xml/stream/XMLParser$AnyContentModel.class index 7e64954f56de01c4d4df45c5103dcae3d7a414de..31381bdd6a42c35e73031ebddf6e24f8717ad2c7 100644 GIT binary patch delta 25 gcmaFK@{(nP1`}^91FLWo1GjK9gMe_$WK$*+09;T8CjbBd delta 25 gcmaFK@{(nP1`}^J1FLWa1GjJ`gMe_=WK$*+09u#@{{R30 diff --git a/libjava/classpath/lib/gnu/xml/stream/XMLParser$Attribute.class b/libjava/classpath/lib/gnu/xml/stream/XMLParser$Attribute.class index 45f6ab83b811484f5acbb0377d1bb8929b0b52ee..bc9f56ce98fe330fca9a045311859fe54f8a5492 100644 GIT binary patch delta 186 zcmWN~ze+-J07vnoqSp(de18{&262g+TqH-8pg}Y@H$ft3@IgXw2;r_iMBqC}X_7aao=9mxR?n0)Z2K+C zclLs%R}S<>Ok`@|scAoJ)OjtuJo0psppiTG7-uE&aHKa6i2!s*NXX kiR;%BcHZodQ|-wZI5&QZCP3K)shAK~#-e7z?uDKG2Z$;&DgXcg delta 186 zcmWN~J4-?V06^hWP&Xlp!-c>hT*4-os4*jO2+hq+kPsUBArUx);M$J}TB9d96b@lo zT2T>1OD~czdeGeu->HO^aPxdH)nLGFV(u{FE}?tG-6!DzlOB@th$-u&JtptTR(}xm z&7Tt3WY{ytY%$>lNiU_LLzC^++ j=zfycym$qoMb;? z+$={oMal&i2jl4GO)meQ|NHyBPrd8jb??cZS=s>`n-RwxIOu_!1@N#KB`if1D^W*3 znplG%>(S2!46_xZY{LZG<;C2#x{$zbB(evo>_sm7P{e-JazNISF7iS!IR6}0w zCzVdY$7z&t1_92Zg>&fSyo8eXtwrrx(ynE=xB@T3YOks(@|uz9qK8cTf4{ASVDq(Ky;MobQtj4~HAvZWj>!_~fxrbg?Rk3YzaQ8STppU$ov^VL8T7)%eE3)lKmDj;IT~1n7S^Df zAw(I*Fq<&JHq5dei|mkB^T6swCi{@ZemFRQ5=K$UK{Rtn;@P*QBQQA%avWYxpp;We zrxD}~YB`GtW9Z==hBz;=oMUTATg%#7frqOIa82!XH8{^tWlOvWNRi909k?s*8l(j diff --git a/libjava/classpath/lib/gnu/xml/stream/XMLParser$ExternalIds.class b/libjava/classpath/lib/gnu/xml/stream/XMLParser$ExternalIds.class index e2d9b966367b154050addd2a9c5d053c7495638f..97ac508cfdf6be68daeed5bdb730eb005de16f6a 100644 GIT binary patch delta 12 TcmZ3(vW8{De?~^zNlZEb9)bi9 delta 12 TcmZ3(vW8{De?~^*NlZEb9$Ewi diff --git a/libjava/classpath/lib/gnu/xml/stream/XMLParser$Input.class b/libjava/classpath/lib/gnu/xml/stream/XMLParser$Input.class index 0a37ec3d4fcc8d863225b12c58be9ab4245eb13e..2e283aee151c675803ea93af8b4df7eeab577d57 100644 GIT binary patch delta 720 zcmWNNdrS^s7{$+PwMz9}`p)xJO7)d4Uo|S#hH5q$QBA3+#Vo{-$@))YOB2=>y&EH2 zTVvByY(=>gavA25HsmtPZ7w5WE^8z2U+=qT=Q-zhp7Esdq%&Xq3VPtpZus&X96Spr z`w+%nxOf3>o<|}tVID6civ!4GKbG+dR`D{{a1d3zifz1(242H{-b5>Jpv^I%v;6xD z{NdsF2OrvDVE_W?KoE)P6hzT!oC7h7K}cgT<}d`A48CryVI{YkzSY>o z?cFErPE}lMB6gZn)ggqt5yyJWv&o^k~TQu_>j`BT@^8>p0 z5qGW(d{nmh zs$B6?MdGi@#iA<2sy2vSmpUu$0#6BqMS@@xL9k5IL(Y!m2>6N%ei8|hD7a(>A|)Db ti9x!=AyeGQG5l2DCM;@ia2$|D%GSVUL^hRlCAM-%;Hqlx=O24wdggIRV>y;{Jyvl8in&qe zuEHi(_qN-eqHw!DQKMhB1L53>1n$C2)*_R8beO$5OdX0?k23B@1sn9*0c_(z9i|bA zhjEfkXys9KvKf6mhMQV9#N*257v_@=2G|y=FHn`c|``6JS>TbiIcVOnA zmfY3H2Q}}I=6!%Ue26qYf`^Yaz%UB<1f?9&08g=*qp0CC)N%~__#BOVfo8tM3BE!b zU!$9EFu=FC#do;R_ZZ;^jPWDJ`3ax-1>g7;zd0fFt0sk!J`uw2B7#4~4E_>s{t*lK zS9qilUO7b+NIy{~{Y8Zg5LMEkN}QE;69Qx~EYbp-G{GfpYS`JC>V!##!Ysoer3*1~ zDq>|g5@iJD$w;KjC}itCM@A!G#-K>Xs;i diff --git a/libjava/classpath/lib/gnu/xml/stream/XMLParser$MixedContentModel.class b/libjava/classpath/lib/gnu/xml/stream/XMLParser$MixedContentModel.class index 28888f642f6cb0850b43e951c2dda9321d47af39..f5309b07ab696125ad675beeaa7a4d0efdd843b0 100644 GIT binary patch delta 37 tcmcb^eusSn3p3|-23Fy%4BW!oCi5~ovhHT!6y7sAnAwZ*z~p(%b^yzl3c&yX delta 37 tcmcb^eusSn3p3|h23FzK4BWzNCi5~ovTkJH6y7vBnAwYQ+vIu7b^yn73WWdw diff --git a/libjava/classpath/lib/gnu/xml/stream/XMLParser.class b/libjava/classpath/lib/gnu/xml/stream/XMLParser.class index f9f823ad36b0bcacfd6d71296805bbe291056762..84113a5baab03749c584c989f802eefeab71dc4c 100644 GIT binary patch delta 31679 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 ROJ@*`q2EKSSnDa%^Iv!?#IOJW delta 31605 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 F{s%nd&&>b; diff --git a/libjava/classpath/lib/java/security/SecureRandom.class b/libjava/classpath/lib/java/security/SecureRandom.class index e99049bbff0210244dc6f030a9ef7305c0871345..ef74e5aae7b9bbfa9cf91e3f0663f3f0192be0a0 100644 GIT binary patch literal 5950 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 YnJM6*G~edh`sPB4k}3L*^1-|R1sNl(Q~&?~ literal 7780 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 A$p8QV diff --git a/libjava/classpath/native/jni/native-lib/cpproc.c b/libjava/classpath/native/jni/native-lib/cpproc.c index bb34f6d6e38..0c80703d636 100644 --- a/libjava/classpath/native/jni/native-lib/cpproc.c +++ b/libjava/classpath/native/jni/native-lib/cpproc.c @@ -86,7 +86,8 @@ int cpproc_forkAndExec (char * const *commandLine, char * const * newEnviron, close_all_fds(local_fds, pipe_count * 2); - chdir(wd); + i = chdir(wd); + /* FIXME: Handle the return value */ if (newEnviron == NULL) execvp(commandLine[0], commandLine); else diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/common/ClasspathToolParser.class b/libjava/classpath/tools/classes/gnu/classpath/tools/common/ClasspathToolParser.class index 2c8a74dc3b51b97abd5fdea80af55cd0aa90e6ee..67c15788fc2c4243f422ffc74b00651f75cd562a 100644 GIT binary patch delta 18 ZcmX>gzej$9CL=40fu5zsW+TQvJ^(bu1n&R< delta 22 dcmdlZe?WeNCLZb4D%W * getSeed(jint); virtual JArray< jbyte > * engineGenerateSeed(jint); virtual void engineNextBytes(JArray< jbyte > *); virtual void engineSetSeed(JArray< jbyte > *); private: - ::gnu::java::security::prng::MDGenerator * __attribute__((aligned(__alignof__( ::java::security::SecureRandomSpi)))) adaptee; + jboolean __attribute__((aligned(__alignof__( ::java::security::SecureRandomSpi)))) isSeeded; + ::gnu::java::security::prng::MDGenerator * adaptee; ::java::lang::String * mdName; + static ::java::util::logging::Logger * logger; + static ::java::lang::String * SECURERANDOM_SOURCE; + static ::java::lang::String * JAVA_SECURITY_EGD; public: static ::java::lang::Class class$; }; diff --git a/libjava/gnu/java/security/jce/prng/VMSecureRandom.h b/libjava/gnu/java/security/jce/prng/VMSecureRandom.h new file mode 100644 index 00000000000..b24c805141a --- /dev/null +++ b/libjava/gnu/java/security/jce/prng/VMSecureRandom.h @@ -0,0 +1,43 @@ + +// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- + +#ifndef __gnu_java_security_jce_prng_VMSecureRandom__ +#define __gnu_java_security_jce_prng_VMSecureRandom__ + +#pragma interface + +#include +#include + +extern "Java" +{ + namespace gnu + { + namespace java + { + namespace security + { + namespace jce + { + namespace prng + { + class VMSecureRandom; + } + } + } + } + } +} + +class gnu::java::security::jce::prng::VMSecureRandom : public ::java::lang::Object +{ + +public: // actually package-private + VMSecureRandom(); + static jint generateSeed(JArray< jbyte > *, jint, jint); + static jint natGenerateSeed(JArray< jbyte > *, jint, jint); +public: + static ::java::lang::Class class$; +}; + +#endif // __gnu_java_security_jce_prng_VMSecureRandom__ diff --git a/libjava/gnu/java/security/jce/prng/VMSecureRandom.java b/libjava/gnu/java/security/jce/prng/VMSecureRandom.java new file mode 100644 index 00000000000..62ff8b7aa93 --- /dev/null +++ b/libjava/gnu/java/security/jce/prng/VMSecureRandom.java @@ -0,0 +1,78 @@ +/* VMSecureRandom.java -- random seed generator. + Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +This file is a part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 +USA + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.java.security.jce.prng; + +/** + * VM-specific methods for generating real (or almost real) random + * seeds. VM implementors should write a version of this class that + * reads random bytes from some system source. + */ +final class VMSecureRandom +{ + + /** + *

+ * Generate a random seed. Implementations are free to generate + * fewer random bytes than are requested, and leave the remaining + * bytes of the destination buffer as zeros. Implementations SHOULD, + * however, make a best-effort attempt to satisfy the request. + *

+ *

+ * The GCJ implementation uses a native method to read bytes from + * a system random source (e.g. /dev/random). + *

+ * + * @param buffer The destination buffer. + * @param offset The offset in the buffer to start putting bytes. + * @param length The number of random bytes to generate. + * @return the number of bytes generated. + */ + static int generateSeed(byte[] buffer, int offset, int length) + { + if (length < 0) + throw new IllegalArgumentException("length must be nonnegative"); + if (offset < 0 || offset + length > buffer.length) + throw new IndexOutOfBoundsException(); + + return natGenerateSeed(buffer, offset, length); + } + + static native int natGenerateSeed(byte[] buffer, int offset, int length); + +} \ No newline at end of file diff --git a/libjava/gnu/java/security/jce/prng/natVMSecureRandomPosix.cc b/libjava/gnu/java/security/jce/prng/natVMSecureRandomPosix.cc new file mode 100644 index 00000000000..a44f3f4573b --- /dev/null +++ b/libjava/gnu/java/security/jce/prng/natVMSecureRandomPosix.cc @@ -0,0 +1,54 @@ +// natVMSecureRandomPosix.cc - Native part of VMSecureRandom class for POSIX. + +/* Copyright (C) 2009 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +jint +gnu::java::security::jce::prng::VMSecureRandom::natGenerateSeed(jbyteArray byte_array, jint offset, jint length) +{ + int a, fd; + jbyte *bytes = elements (byte_array); + ssize_t count; + + for (a = 0; a < offset; ++a) + bytes++; + fd = open ("/dev/random", O_RDONLY); + + if (fd == -1) + { + jstring oserr = JvNewStringLatin1 (strerror (errno)); + throw new ::java::lang::InternalError + (JvNewStringLatin1 ("Error opening /dev/random: ")->concat(oserr)); + } + + count = read (fd, bytes, length); + close (fd); + + if (count == -1) + { + jstring oserr = JvNewStringLatin1 (strerror (errno)); + throw new ::java::lang::InternalError + (JvNewStringLatin1 ("Error reading /dev/random: ")->concat(oserr)); + } + + return count; +} + diff --git a/libjava/gnu/javax/crypto/jce/prng/CSPRNGSpi.h b/libjava/gnu/javax/crypto/jce/prng/CSPRNGSpi.h index c499fa86962..6abf9be9e3b 100644 --- a/libjava/gnu/javax/crypto/jce/prng/CSPRNGSpi.h +++ b/libjava/gnu/javax/crypto/jce/prng/CSPRNGSpi.h @@ -50,6 +50,7 @@ public: // actually protected virtual void engineSetSeed(JArray< jbyte > *); private: ::gnu::java::security::prng::IRandom * __attribute__((aligned(__alignof__( ::java::security::SecureRandomSpi)))) adaptee; + jboolean virgin; public: static ::java::lang::Class class$; }; diff --git a/libjava/gnu/javax/crypto/jce/prng/FortunaImpl.h b/libjava/gnu/javax/crypto/jce/prng/FortunaImpl.h index fefea283199..d684e366a1b 100644 --- a/libjava/gnu/javax/crypto/jce/prng/FortunaImpl.h +++ b/libjava/gnu/javax/crypto/jce/prng/FortunaImpl.h @@ -43,7 +43,8 @@ public: // actually protected void engineNextBytes(JArray< jbyte > *); JArray< jbyte > * engineGenerateSeed(jint); private: - ::gnu::javax::crypto::prng::Fortuna * __attribute__((aligned(__alignof__( ::java::security::SecureRandomSpi)))) adaptee; + jboolean __attribute__((aligned(__alignof__( ::java::security::SecureRandomSpi)))) virgin; + ::gnu::javax::crypto::prng::Fortuna * adaptee; public: static ::java::lang::Class class$; }; diff --git a/libjava/java/security/SecureRandom.h b/libjava/java/security/SecureRandom.h index 58561abbc1c..b54318c4406 100644 --- a/libjava/java/security/SecureRandom.h +++ b/libjava/java/security/SecureRandom.h @@ -47,8 +47,6 @@ public: static JArray< jbyte > * getSeed(jint); virtual JArray< jbyte > * generateSeed(jint); private: - static jint generateSeed(JArray< jbyte > *); - static jint generateSeed(JArray< jbyte > *, jint, jint); static ::java::lang::String * SECURE_RANDOM; static const jlong serialVersionUID = 4940670005562187LL; public: // actually package-private @@ -61,9 +59,6 @@ public: // actually package-private private: ::java::lang::String * algorithm; jboolean isSeeded; - static ::java::lang::String * SECURERANDOM_SOURCE; - static ::java::lang::String * JAVA_SECURITY_EGD; - static ::java::util::logging::Logger * logger; public: static ::java::lang::Class class$; }; diff --git a/libjava/java/security/VMSecureRandom$Spinner.h b/libjava/java/security/VMSecureRandom$Spinner.h deleted file mode 100644 index 0013a3fc8ca..00000000000 --- a/libjava/java/security/VMSecureRandom$Spinner.h +++ /dev/null @@ -1,38 +0,0 @@ - -// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- - -#ifndef __java_security_VMSecureRandom$Spinner__ -#define __java_security_VMSecureRandom$Spinner__ - -#pragma interface - -#include -extern "Java" -{ - namespace java - { - namespace security - { - class VMSecureRandom$Spinner; - } - } -} - -class java::security::VMSecureRandom$Spinner : public ::java::lang::Object -{ - -public: // actually package-private - VMSecureRandom$Spinner(jbyte); -public: - virtual void run(); -private: - void stop(); -public: // actually package-private - static void access$0(::java::security::VMSecureRandom$Spinner *); - jbyte volatile __attribute__((aligned(__alignof__( ::java::lang::Object)))) value; - jboolean volatile running; -public: - static ::java::lang::Class class$; -}; - -#endif // __java_security_VMSecureRandom$Spinner__ diff --git a/libjava/java/security/VMSecureRandom.h b/libjava/java/security/VMSecureRandom.h deleted file mode 100644 index 982bc0f1a88..00000000000 --- a/libjava/java/security/VMSecureRandom.h +++ /dev/null @@ -1,33 +0,0 @@ - -// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*- - -#ifndef __java_security_VMSecureRandom__ -#define __java_security_VMSecureRandom__ - -#pragma interface - -#include -#include - -extern "Java" -{ - namespace java - { - namespace security - { - class VMSecureRandom; - } - } -} - -class java::security::VMSecureRandom : public ::java::lang::Object -{ - -public: // actually package-private - VMSecureRandom(); - static jint generateSeed(JArray< jbyte > *, jint, jint); -public: - static ::java::lang::Class class$; -}; - -#endif // __java_security_VMSecureRandom__ diff --git a/libjava/sources.am b/libjava/sources.am index b108484277d..3f33a905738 100644 --- a/libjava/sources.am +++ b/libjava/sources.am @@ -1748,6 +1748,7 @@ classpath/gnu/java/security/jce/prng/Sha256RandomSpi.java \ classpath/gnu/java/security/jce/prng/Sha384RandomSpi.java \ classpath/gnu/java/security/jce/prng/Sha512RandomSpi.java \ classpath/gnu/java/security/jce/prng/TigerRandomSpi.java \ +gnu/java/security/jce/prng/VMSecureRandom.java \ classpath/gnu/java/security/jce/prng/WhirlpoolRandomSpi.java gnu_java_security_jce_prng_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(gnu_java_security_jce_prng_source_files))) @@ -5246,8 +5247,7 @@ classpath/java/security/Signer.java \ classpath/java/security/UnrecoverableKeyException.java \ classpath/java/security/UnresolvedPermission.java \ java/security/VMAccessControlState.java \ -java/security/VMAccessController.java \ -java/security/VMSecureRandom.java +java/security/VMAccessController.java java_security_header_files = $(patsubst classpath/%,%,$(patsubst %.java,%.h,$(java_security_source_files)))