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 3cb487a5b096..4eab8c238206 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 2078a8734df1..496858968789 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 cea890f04d5e..c7b22721c7f3 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 b76807c13c61..169c2f64c7bf 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 af47684b185c..454b2e960236 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 dcc346b77435..35f1dd788e51 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 4be4d60434c8..4ae10d710d93 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 c7607c74f1b8..aeb53233ecbe 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 63bfff030700..9489dc7867b2 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 8a4c6b1ded9a..8f520cdcf53d 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 b3187cca7e77..faf3ab7ce363 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 bc8c91a2b035..8f8d7ea8bbbf 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 5be402ff0054..5877e3edb6cf 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 652793b04ff8..1129d5dfb1b4 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 6ded636aaf37..96d66f05200f 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 8e3782ef055e..b18410c09f0b 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 9855f95bd98b..a02fd147e89c 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 f6949dd8d71a..2faebe8eb04c 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 5b0bd4f8b1ef..d8205cfb4adc 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 27aaa734dd60..6072a9c730f4 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 f965782369c8..0c7183879cec 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 Xc-re>?_i%WftAHT&(dP!%+E{!De(nb delta 20 bc-re=?_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 Zc-ng`a$jVF4kIgzfu5zsW>ZEzP5?J~1i%0Q delta 22 dc-p%!@>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 zc-jq)OGuOf6otQgWlU(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 zc-jq)OGuOf6otQgV^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 MSyodf z)h?pjvSqu{UpXrrm9~l{l+x{K?Yhg_rBzOk?pbSR_5aWLo|$*Pd1mIB_k6YWUKi@U z4m2#Rd>eis0DWA2U3(DIy}`R^Qf!FJRoJs8?pILnx!tqou=ngk-qWjHCd3s{_w1W` zP4mKdeTIVp*LAS#2Etr75v>@bes9+;UF~@CMLPK*LvbYeBbNd&nF29~TA-YQP)%;s zQZU}45bUPbc#lGHg2K>9ZE=U%;VwnuXXrPq8MA;!HO6GzGpC zZ%QaZ`{?b-UQEWF3}5PxP#T~;^hXaG=oFRanZZt4c5CNC>6;xhwBKQ9Lz#%85lB)@ zrYxk=Xk^kD6i|+{cFBvB2TS9h=R94~%S>|Wvx1$pvegMw5kS+Fp#be@2HI00VyQ^0 z%tn8jgMl;;BWOOdXdxz2u}=Gv^HW)2$O;IpRK`lxsR|uv4dSTUGr#2q<7Jlb}0ESZNCnQipjKB+xr8C(LRi#{TNGs#5np0FH${bkVoY_h!XllB|U;F zYQPpcrjj1VPCB8oHex@0hCkC6D(y*}rBnExPU9M#!3{cxJNa}T|Dp?cNEeM4T{6CO z*|ec6rn6!+{nfxSx71QX6TE94NSLB(e&V!28ZZCMVH-ueqGod@PQ@Om##}_Tx53ShO z@maCd#|>X@sh-xUFVHAcfl_jU$|#mAg!o=i$n9QxFRm$AP)0 zz8tTq37XIw9XJv3oPVk)^a9lc_iN9 zEPTwP(7eE*0AI#ozJe2qpR3=*-{A^>kH7I%H1jpw=j+cuP_y8x z&j*<999g^F=eDYM2d(+8Go@ys`N8>1&0zDy@n1JouSw3j9SJVDgg_!_Ar@`K7op;Z z_TrBiwc{iZFGvdv5I52lM@g^~xxUb+4MalGO2V8C>sLi|P>xOrlFn!+QHWNIlW5KB ziZqFKy1usE9S67cKu76`1c}#3oaf?e+fC&lO-uz#8vJDlT1vVSWN7i>=p>m+G*XGO z&`U<4pJZc@oW@Eq1!N)Qe zjf&@F5x$nixF)5zBW3uhx0K^QQfhpq!UV~36Ry}rR+?_I%Jh~>lPXnajI1$}6{pCn zra)?(h~NG_WRteN1wK-XU~v#BZy-vxIqr?iLw0JUP9wWD@}5S1uaP~Tx{Zyd@=x%R z11fYq{KSJWIjFN9(isn{s7H`54JeSKSRltxBFC{zK1H>hz$R%#t(?UB@+FSQX*9_h z+?2DpFX!+?nv9>EH-Yk%36+bcvs^L>^0nzNm(5VQVzSlGm2b>=`PNKfIcOHhRi}CL zt&H2cy<4zyS7mS3z2DVt@9FOUiEzdCa$n_tfG&zL@*{f4LtVj-NR&rNmdAP*9wAkJ zcHFg1qyMWc&){nfT3Ii&wk||iLZlT$Ss(PZz8Gx%FvJF6gbhTN4MM(kW1BFrf53I79hyZK(L*OHnva)DMCj(3vqTfdfB;{X6Ip^U4TV)p;8p1!j>q_B2?SO p*kntw)h1c?9u delta 2107 zc-kG4c~n)`6~?~H~*U$sR1wC}!6%(8S zZyG((_fPeGhI84QK|gBjx!+y!FXIbD1O*|I0ufDwuEa$s(Iv7@^FiVB}K> zrc)^9Qy8i#9Q71|26AINMPV1U#rqV4QxuES)E=!AhwrEpo>6B5>S98uyNRP7CV>)7 zDkYg=lx*_IV~T<)#ds;z_$bZ4aS0iBe*{xH+R;GmAss0+$a%kVk{RL*%ZqWstG0E` z(tfiMOCym$qtH*8PC3Y=F&Ir_QAFdNmZ}+)4@(n&$r-#f%}jL;kBM@8OIP)pfiNmi zg+g?sS%|0E=t*<5N-+je30|c6$e{%oLyIttN_ASVlU6-9x&}hEs<=XZ@}Uc@f`?x9 z@2h@dd>ar%uY>7LZF?iyP$N3fJ1V|Y+iyZ&WjgKA_V!{V?Za5wj|uc4Cei`SphK8V zht=*xZ4pZg<|2VgW0#(2)aBp!lUJQNFg7%F%; z>Np$gcqAHlG_mn3-yw?_+x+K+KI+@RFB}eTHLI%C)D^)(V0&oiBG9VpJM>GV3abS zzra*Jqq1k=<#Sld=i%cEc#|*UExxQ>U%`I9ijVjj{>;~LO4*|OOMC-g@;`8szs7yO ziHCd(Qvj48Sf7tD%Xz-8(REkd`xY^L&)M->nR)2A)(#6k>(U!Wt>UR%MeE zLvX=Im1cKdH_ zI&FM^M1UMrqYoiO4x_ys(OEy%89z}|k79}(Ly;UusWihYC$L;TMZJ86&2kbA(t_Rc z1&+%ZT#~c6E9dY~&f~dUFd=f$gv({qPOg~la@F*bznMXD&1A`Slc)Q9`Ma4cUzq}y zBc@cob`rOKJL0aM-W^!Er?$81x!==n@9Wurk2qz#{Gj$fKo4b-JVJ^*)+2a?zVZa= z@>K7_6J*N2oxFxi<9$JNSltA?LbW% z1g{;8bv6@Q>`*k>;n-`laKMi6@B3|-Ny$}-F$lL~5pBnzqs>FIeF^Dyf>zJhYLl?i zPR1rX6>r;@{dc$RG`^W2TZl+I3sJTRv39l&G6!AlTzG6T((F7G+WA;$7ox&0Qi)R3 z*fNzVN4>4UX1f?~*(G?-R^kI&g%52t{$!Wognb2P?Q&e!?{3(-U;duE5UJ0{0okS; O|NlKU9z->4zw$p8ith*j diff --git a/libjava/classpath/lib/gnu/java/rmi/registry/RegistryImpl.class b/libjava/classpath/lib/gnu/java/rmi/registry/RegistryImpl.class index 95e721095bc40523504fcf8f8dc33869f08f9276..d8b3cae4250b1e75d8e434e882a6517cfa92d5a2 100644 GIT binary patch delta 14 Vc-otwI6-lP4hN&+r8#>eJ5ZcHd!esafX85BzJ@2h-E3r+7`UmaqyZ4@Z@3|k( zU;XFPn*bif-*vQUNR;e)a=|=jCTpTlcP(!*xljJW7*-%vB`C|kDWJ*J_(H zuB@u#6wGqobS?SaJnT5q!WSHMI@HmFq3X%*m)q9(cY7=kXs%bcw z{$>+6PSF**P%3zX26`hl=bs>9(f-9T*Md2sUt_^ulE)JRNK(=$+)1q&QcWyV4{ z&uuAO*Kwm#k&#FJ%0%ZDJyDbFFG}`b&@lRc@;){1I_Kq*Qq=zdFY9(r$EQ0R*oiD1-wM;dSygr z$}2O)o$dGIw96WFrdy{$UVwGC%=Gv&S3i4JuJyK4BmDBmozs~9=Bt3PZ5C~JZCGKp zyyb{nq-()b8WA?DAjVsm33EHYZQvMq>u&SK8F9gD=BU~rFLi!r;4;SK+q(v?;2qx4 zzIM*vadMmf!N4E!C$eI%AvAf<>v*62y~*W~wknpF6=q>x6kEs+HhU_G4-NcP`s_4| zMZd~T_&`lnH=I*-IBvP-hvrBmJIu6DAuH$h0-#8R`q;DDDY2dLn@NSjH8G=2@ z6fz8I4qYfFKu%98uewU=ovQQp+j+C=wfq09{&pN(u=!V`mm zuD~)*e2$Y7{a;}34P;DJvt9XZwCz_Wc{Vt*vE40BVpl2ZEuJ$(&W zgTb!gKm(PTfsY4+N}(1x*A;Bw!a)1L&1Jku0SVbjg8Fe0M{$zWU1UZsYWQI@^B1s> zzw`XE82@vm*JhC_w0a(UsTrkiKX=yv&f_6mz{6O?BYc09JLM=|B_9`AjMs>KiN*Ob zp2kn`3|_~xd_RLX>Fq5n;8#SuOr*Do^bWPJ;0?T|n0dR`pLHpOqXn?;z zCC6=y=n_wVrZQQi=FcfxApgI>FWG)|w%A+557OrHN-Y?jrYaV^dl|p}c(u$Os>9xI zDQR%Eq(Kz|7ZQHM5Pg^mT}iDTw#~r1*cy*-k2dhz27WL5sIR^6W&`hCMPTL{4R(;P zd-3O{tK9?y{>JP+qU0Zx{F7W>YjNGP>beJiVSdu}l~va#s3WyHm8S+ihzHotw~xbh XveO^~OD(vatGJ!?@8e!ob|3v0Ih9!4 literal 1358 zc-oayYflqF6g@)=eYgdw1yMjKqV{DAD)<0V3TkTFnoxx(nz-$bFwJ(i+1(oWD}MBg zUm=lVl<))mQN}ylro1%9Y_dB$_ug~PJ$L5kukVKdrm^fp7eji(Xk@DDM>S*fO2ZP) zcBWe4nYv|cWJ+>}uc(G*))qCj?r_ToFT?1`{Nrh*x?u3BZZc<>%%6pKp$p5;xWO&e zF|9d4WG)C;)~F3cArFR|5)s@cVI*VT1tE6>Gchm}yy=u4(B_)!s}Sq&J9581~^Z zRk$1tN9dU)Q`dRL5vE})7{MrmVv|svJEl=k>kKo;yLeHqQu5r{op}BTlFH_!%rOPy zh*H1O4>BuuDo1+Jmlp;vHfm*Vy;RG(>#12$^;Ojp^1r?5bvA{~FqQwm@zXTI+}I$B zwtu|DxyH~P%f;8TLGmuHAb}+5Xr&eTmXqCfxGi(mvr?hoXw=$UEJxF|xZTjHoh}K` zhiL`3aGN0{>>RZzR9)DTf@br!;65HO1dJn6ACcyA@-)md zr2cXm@}ef36|Pn`x%OnM!s~K+B)BXwB=RE#k0ocXs%b4h+VEc6Z9iBt8&-us71G+F zKlqlGtln{w@1eWbMGqY{cSQ${zFv9)knNqLzYmnvMc;|UK9s}{^u69k{~p4LA}$Bi~;nR2AI z$guY_e4YdU&hUZ1kVrKVOYNLuS)q4{^u9s}s|aJwWf^bPcUU4w;U=Mnh%Jo_AuxF~ z+I%%qDpf^gKTS-1LNGzBP27nO>a^`6o#J}sNC=o+b)pUR%ofpSGm?ts?}QR2h>!fs8t&mSC}A;y(MrlcE!e( z+q-h@!mT8VR+HMb|HeOH94>~KNls4Q^UnL6nRlTNq2RAS-w%LA)_cK2(VZn3U`~*) z+Z}V;dTp6)RqeDI&YrnlRc5ng*Uid6Q4cJ;w!5=hvzm@-g_$QV2-KBRQK}{|?9NVc z&rxlGC<~4%yWX(XUG>KKr;eqzis{Ee1eq`=h!474c$x)Lg2>Qb8K#9WSqyN-&B~s;BzIiHAMY;djimmXv8it)KIuksT-PI7hI>ru8XX## zW(K_OB&YOTaGI2^A+7D|;DIZd`AqCRkxXVh(I?#}tA%LRmp#}g@8=`_&7Qt8p+94m z^T@78i|R~xNPtIr^hA%IF~{@&=*ba1$we-C^o0@K#-|S?eo%P&mCGBs$t&4DS2qXn x+&-(4jPDDv-spWpqQ#2A3&yExu|^!_Arr%}5i-F|4`~qN7PobTpyWlB{{mbSWJ~}6 delta 575 zc-mc&OK;Oq5QV>M8|)@Ff(k`Z14*Dz8pn_Vf%1MhZ6QF|1QAtbK}szs1PhS_fmn3U z4td2Ekk~d71Qn{nnjb}(xD|@J8C}n4&UeoEQ}SIh@#pW44d5hmy~J;2DGu2jW<1Ji zW4^))yU+bMouI8yRmJX?LA%@PD6|DXfudmJGOlof@bPjO)Pqhv2$qs~oG>}A$i9D; z&DxZhQjCPb>&~{8Il16htA+a}r=ri=bk5|AV&Bu|t7fU&S#FhXHrr2X%@+yEI2Pxk zO|4*+xnOgVOVN~Gu{^HWT;*EyR{!NxFqpw%mQm)S8%Azr5e;2Z?avq=G4*w8HM4Hj zT(3{wTa~`XnA8-zq~4Nxn-T7aLQNFzl96tHYo7xgg!pxYqmtOcWP)R&pay4>nv`iv z9B6|r_bcfStR!4v_L-E=R8cQ(tWh-hg3;*7!X5!+<>136>LPnjCJmX)ljA{bBDE#@ z-$b6%f|g$~xcW9a6r%&H`Ja^MzjLTwVx`%CGCfn7 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 zc-l>nOHUJF6o%h#rZDYv%B9d!L?}>@c4|9M!3EI;2EPOW zP7wiI5zuZ9upYhxSIs##!Me=1Y_BNd8o~kw7~*+-M_JGAW|eIbs?*-ZEmF2vRj5)kPty1gOFE^MO9s6aOyi7>3u`pCfr$uMpY+tbza>ws@1yi zYC5tcKw;>zb6#h4^Ai^silbE|)*%TY^jWuC5{40D@Kih&D-mwoK|;U?$;}PE&HT-| z_)(0Rf4BgfFnxTGO`5~J5*kO!nm^6p3upcZ(F{gG)AM5%!98=GAN6pnY0L6~gjsU= z#!nVGcu|LX+COKljZO#A&?@Qerk4{uBs8Fj`hXd#GCG^(W3l@Jz%~fd z*GmRKlD-MDnId5d-Bgh(LiC{54xzcJQnXwXbm8c%>o`IG$C^{Ut(dme{z^ktZQW!< z>AwTl5u?+xDbdU7N<_cIeTw+aLQ&+xs2N0ytqk1%+In^fqG^3k&|xb47)A{w5Y zVtm<~JjPV{fSfwXIflDchF*Im56O9sCdi-#^VG3G9gh*m5=QX!5?`Xmmmu!@Hs5fK zFIVLYUgBFRU+~O0AoH}+i(UF@PT(2oo>Te@wBseZ@aj@xu$CAkN-L2Osin{S1C`H> AxBvhE delta 811 zc-n1{OK%cU9L3L_fevMWDq7^x2Nc`#s+uLMH}(+&+r6TX0n zA+s|s+_|((R8&k^nz+}EiJ!nP;KukLAk>AMd*^@ex#xH0{E~mj=C6M~9RQfZdd>W_ zrg@lLdo#+cwQqjbSNlC-vs)m+WX5qgB=l=B<`YlAsb$#$b8D|yr7B^BVdPpM4wNO$_ILYA3mCB0h-74>>-YoYjB}E~zTG-`g_%Nok z#u@qpmk<4t>UKfN&jnLvFa#|KASw zs67{Foz^xl$<-w1_jR*n3sx|#eHRz240agNLoFI8BDDnpy)>C1!VC*+I6_m5P8sc% zP#s4@A8_m)T>CT&@X%@_Eig|GG00fNfUa!oF^Hj-_b|M4qI;D|t?P$9FJY}V;7i;6 zb&NJWpG{XhFJO%9g(B|}i0pO!hbR}YOfD5X2iG2r-J;!F3)>rjSp$7RG_zb_LMxT3>E+7(LA#E_1&h|7$ujuFHKnr-V% zd1|w4t*f|7g5|&%N*r@$DWIdO(}83*GSVAY$wzn%_ms4r1H9@S)8s_VXO$IU=FaiV3tc zq8}II3_85l+(M)A2R2r)1!Rq{h~@A9pox4!hkR@49N0smjy^--z#2j_I8evM!NVE? zgNFy(9IGOQG#jNc5y24luN_sK? delta 728 zc-l=+-A)rh6#jNw*>-nIr3FL^NL#8<7Hb6&r4pl7qEiRz<3Tl0Yto4T0Gg0K?4IC2Hq9l7c<*#xsthGtyD^H+;Y{~61adN z@2mD`LSR@Rh7k?^vQu_7L?&0dBl+Uy;?&E=-%Znm0Gm@tcriUYE07kLMnXf-DSdG7 zeRNA(24*yb)o`WgtY;q7YSo$v8yTtgnzyTuYS+Er`X_HykB4pvOv?Fyv%T@!`{K*i z$t@kwsGoM|k8hB_HTakTm(nem>3xVo3%%bFPJcr<(&sw}{6Msci+gO*G0HbW0AP;q zJi@q%F)Z+c4ipT}xFU%o(WZFI$-0lpkOVE{f5|Z2MAAOqL63cWw8sVmeduQoSF7S# zvK*^RB+GHJcNN(n>%?o5$?P(&kj^h{w`o7qnVe2Zx_Xy(Y6qbw`>+c$EnGe7YVeUI zOvWtZ80CXEsp6@YVYR(wRv)tKF``((2>%m!sx*y5dQ5dRr7){BMX6?P12>eMd2Z}f w-gCmr0V{S8$fxZl7VO;)SFb9);J_-I*UsQu9efM7v8X&7%Dv7!rx5P^2OCOeO8@`> diff --git a/libjava/classpath/lib/gnu/javax/crypto/jce/prng/ICMRandomSpi.class b/libjava/classpath/lib/gnu/javax/crypto/jce/prng/ICMRandomSpi.class index 747f0032817b2ec792f47207e983efba128fc3b2..5fca78ef17735fe3c7885914b4a12546ab62f5eb 100644 GIT binary patch delta 1212 zc-mc(`)^Zq7{))RU3xe_GTj{DrCSfBFuK`wli{$4 ziWd--vjLlI6HteU$N;;^aA1^(B*x26CTje}#9ws(fQkCFi_@4U-@fO)KJW9qyB8f^ zB*Y>)eq}^#S$Bsv1ar=IIM>6a2Q_Kq%dwJ0y zFVVABRl(4Q|ZhZwm|Z+Hi7<#bJ&ZxVOjR2A(2S)cd)QL5nvz>ipzgVGKJV zb79e22J`-{Y)B?z@n~IFtSw?E{ETqiqMQ>3LFZd@?vh47?=Wieu0i1cMHVfbbPk%O zz7bAYyw7Rps=172!R1TQBhR!lxRU*_9nIiZV zH&g5M=dR4HC5N@l(bo^TUqARTJ{q}+CJK0jB{Z{)4OFmEvTmZ9N4bl~xR=MZZdi3K zJV2{5T8I*%6Pq43lhW7gY!OS_oIm__sz&6ybQ+!o6YM%G!$p-|uiVhia=isJ3EW8y zWUW1PD{k-{4SMIxw?|MjStTVGs7~|zAbBMvfxzW)F!nFUnBK@wR&`~LytD$ojk z#ipIjR^b|_+FR-_cL%)_3%Q1BsRiBgUc#3tLR>w26aYEvKEY2n+%_kh-vN~QNHO!|<{Y)vJD|}Vf z7hKctJHF%>uJb!zWhvf?l_77I;%U-Zie3E1xFm83*3V4H=N7mh)vH?7PnC=Rp>X6x|yL?i`rhwcnwG-O*nl#=iD_3KtvWIy2Z=tIa9{>OV delta 1123 zc-mc(>u(fg6vltE+wRN`vvz4{p|{vdl+p`mAPp@T!zL!ySP`o&1tbF%lnZYX#Ng54u+*o@w=05KBBqG}rZl{42>)LY148+~eu8xGw zLUuX4#_QgOKwi7~!;+ zWi787;;h3tO2s{~b^4{vL59K3`^jB!#Sp5_hPcxe)@@b}wHQYxFi&(1(tfPkYtl$|QW`pQHO9QPuA!uuLxAPpG zw6Psm1A3l)@(i-ctDEH}H{!#uDb6X%I*#d|vPO%htcHrJ6fake%I{-|&U~_UZqu0{ zNH-x~B9~s4%3C^}&oXKuW9`rjjS`briK~Kx{ z)1FFy<<%5#j9@oUaR12Px5kt=n_}+ftvgumkq)S`%}z!3DAuRwUg6l!e0E8d0~uWT z(|u-eE#MuYG4%EQi^ez4BA`NW+e;nISjKWwFotqv6? zKN=IFhj>)88O_|AXE^QFJmIkZhNbZlF+8emIHuX3kj^K?7)gig8u^lnySimCxzn3n}!aSYM}~uSgE_wbH*)_=cW+%V&JgHGbfxzTfzf zKlv#mTrW;qks0A`t4UfoAGg%1TXzn>a#=pV!2P1u-5P2>Ka-M`Es%2srCZ9b(r_l! mDHB%(cvi|sW{r&m@`ZLVatZt@?x0rnaI diff --git a/libjava/classpath/lib/gnu/javax/crypto/jce/prng/UMacRandomSpi.class b/libjava/classpath/lib/gnu/javax/crypto/jce/prng/UMacRandomSpi.class index 214773133bf00aaa6571be6190a6427a83b39775..9c760ea3324cfd9b141b9538ad6693d7e8198397 100644 GIT binary patch delta 1037 zc-mc(TTE0}6o$Xez?|`LP^_YYRxS-4W{8fxq=urY(wJr%@irEV#x&z_Ivkui(3vv` zctNzV(m@78M77PZ<)v?I~P_}urVuYK)H)5ktl*BlHaec5~Mwg2_6fBk#^vuw1w z^0)tMoO_dY3Cw6@&0%uYbJ6T%NdOHB+N)(#!g0J z#f-TlZg=&jH+IGQ95Z8JV=1(x>BLO4OA)Yh>9#?~%qkX`cG9xVE#`pZWpv&^3bHtg z3M(76Eys$dtZcFD17A~Uw~nIUpc|_g4Hyj4F3=g8*i45a$w7n79Fne0d)lJWP>045 z_f%QSyCWReIHs8I=}*N)a(mqAHu#bg3SZi?6=h9Q5!GqqD}%2Yb^k4EU3p5ebgm|9 z%V2gqwJDS7&1ih%ZuhU)kZ0T=$Qead)8;vB%*j}GvNhD9^DSpJTt(&oZw+>H&b{w% z4&=FDaFI*ypZ?ZJo+}35Q6ru?y)#IiF~*A%UNgAPXNpowOwzcasCA!fwGS|hBo>e;g2Julw-%knqIzAFNfAIG1S$#d!$eNQ=znE}9)DB=U zB(5K15r^b0j!-9BLL6lcBjWXOVHg#TF=5Ngk3B7HXJo1qq_`qXR|S1dPS+WiZkM>p z-h15QSAO&c{ambo!t9_00VKQ!dnBl&>;`uQo4_X`CizKnr6T2~#7U7@$5L)f@;3uF2T)Wc#iY2M__dEfJ%=RD^*?+ncUcixO= zum64ue9G@S9!1za?+K6Bz3??F_L(GUQWVGSgk{G!#yg$HE+?K=1nf-vJ6B7^)0w1W z@Dck>4v4IaVxbrQrYYvMnjE7?VA?HP;g3j0)S!{$CMW1~>$LiXrxbJF=R|EM zp0Z=fFH)(Fl+J)Vq?I=GGiVa#j3OA>@c!;5CuP}*`if?Qvkd8+Q_T2()MOjy-IrQb zpdZ)dBA47Uy}qWOD<)T2AaXbzQ#TDxGB_#4PbNRJQ{l5j2%Ql{nfpdB`|FNgqKfJ% zq=6u7n8ynDpTO#Z75G?3vFt(xJ>?q-@Fg?(iV$D(A>Z&ZoA`upsbjM=-b|D&?nJ@r z>~1`GWqNZ;e52^ziNO7mi9l23k{oSI?#sD{YOx{wVz-OkK>^=U#P`f%ry#`VOaILt%c>;;c=o8nYx2P+|fmQj-HwSb~s<$^k?xr62?**u}=Nk?pj& zmmFH8wnBjL1qeH7Q}zafSprF*kOF1vE~HAmRh4?<51<{p2rj+Mo0&J?dEc4u`+fFg zqwC?z8)HB#zm2#qSOYGEgB}hsM{vgC$z)eD-Mii5uuzwXd>9EQBdHI<-KktOlZqr) zW-{rFi$M})bIikWPAD#(isx2D`m<4?rD^pW*t^>@>5n2?lF^Rl|IJ#+sluq$XtVgT z@K1HP_=i;`URS(tM>?C0YlX0Ib-_4WrgjLfl{)|f<1a~gomCr?&XEKqzU~g*P(B;$_zw>aPUZHABe=HW&86NV;;(NjOhS<7%HW%&l z@R%osi_XrfXC8jw$Kng;7vjug#|LJ6ahH3oX%Ce+FpPh(ca*{RuW}^dEpc>$!SN9c zCpgDNPMWpmJ=3H73}KLYbQk}gQY!-<(<3!zy-YPR@tK6wvPcD)ptjtePL^m?_P%0R zi5nB=YffvE8nclzRAZyfv~!jjN~y~<>tp9}&?hgsKrdD7l0WtNZ?JeOhZ!NDnCG&e zOB8YPS3(N+_W*OJjtC8pI z=Z0c+5Z%itH}NW2{YFakmh!i2G*o!(t!o(5{Y;F9F4J*|1$w+)B46UuLENJZ>D}#u z!x!3o=L(a0IXTvD_uGRfX$an|UhF7mYyn5mZ{O;-U*kb2;Ly5Z=4j0jGhWwdxHaIg z1z(qFvbzGVnCm<(?Df?T)M3e6cqO2}eH!y6NSjQjQ)aP7>gkaNHpy(F(nvz)^07+x zi8S%KgxDkVIjCzmq~{S?z$pn+l11E=){1(oblY(6m3nRLtLP&de^ybzu!jDH{G_gp aO~fi&w3E>IXWhGlJ@{XF!Y^h0`So8s>*2)! delta 747 zc-lRYNl%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_uDLiIfy2A<;b~bgsEhrpm?7LhvbtlUdp6^RZ_@$ov})9 zQY{PEFAJ#=KT!$LD2q8GLC(rjE=mcVQc9PUaZT+_3DGUf$;b+(q&)enV8Qn6SwxR` kA-8ygYT9|Po`o7>x!qZ5)cAvL+eRn8|DNzMdv!kj1AWn@`~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 gc-ni(@{(nP1`}^91FLWo1GjK9gMe_$WK$*+09;T8CjbBd delta 25 gc-ni(@{(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 zc-jrkze+-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 zc-jrkJ4-?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 Tc-mXTvW8{De?~^zNlZEb9)bi9 delta 12 Tc-mXTvW8{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 zc-jq+drS^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 tc-p(eeusSn3p3|-23Fy%4BW!oCi5~ovhHT!6y7sAnAwZ*z~p(%b^yzl3c&yX delta 37 tc-p(eeusSn3p3|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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 ZV3hsO845;&spTjbqn<|^vBopH^M80N#IOJW delta 31605 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 W;f01#;50HdjMmqKtr)A0>G~f$6j 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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 delta 17 Yc-s5(jPdU?#tlv`Ov3t`on0*T0ZjV_ * 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 000000000000..b24c805141ac --- /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 000000000000..62ff8b7aa93f --- /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 000000000000..a44f3f4573bb --- /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 c499fa869621..6abf9be9e3b2 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 fefea2831997..d684e366a1b8 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 58561abbc1c8..b54318c4406a 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 0013a3fc8ca9..000000000000 --- 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 982bc0f1a888..000000000000 --- 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 b108484277de..3f33a905738e 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))) -- 2.47.2