diff -r 3b7fae360d04 -r 8a448b5b9006 jdk/src/share/classes/sun/security/provider/SHA5.java --- a/jdk/src/share/classes/sun/security/provider/SHA5.java Tue May 08 11:16:36 2012 -0700 +++ b/jdk/src/share/classes/sun/security/provider/SHA5.java Tue May 08 17:57:48 2012 -0700 @@ -82,10 +82,10 @@ }; // buffer used by implCompress() - private final long[] W; + private long[] W; // state of this object - private final long[] state; + private long[] state; // initial state value. different between SHA-384 and SHA-512 private final long[] initialHashes; @@ -101,16 +101,6 @@ implReset(); } - /** - * Creates a SHA object with state (for cloning) - */ - SHA5(SHA5 base) { - super(base); - this.initialHashes = base.initialHashes; - this.state = base.state.clone(); - this.W = new long[80]; - } - final void implReset() { System.arraycopy(initialHashes, 0, state, 0, state.length); } @@ -255,6 +245,13 @@ state[7] += h; } + public Object clone() throws CloneNotSupportedException { + SHA5 copy = (SHA5) super.clone(); + copy.state = copy.state.clone(); + copy.W = new long[80]; + return copy; + } + /** * SHA-512 implementation class. */ @@ -270,14 +267,6 @@ public SHA512() { super("SHA-512", 64, INITIAL_HASHES); } - - private SHA512(SHA512 base) { - super(base); - } - - public Object clone() { - return new SHA512(this); - } } /** @@ -295,14 +284,5 @@ public SHA384() { super("SHA-384", 48, INITIAL_HASHES); } - - private SHA384(SHA384 base) { - super(base); - } - - public Object clone() { - return new SHA384(this); - } } - }