11/*
2- * Copyright (c) 2003, 2020 , Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 2003, 2021 , Oracle and/or its affiliates. All rights reserved.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * This code is free software; you can redistribute it and/or modify it
2121 * questions.
2222 */
2323
24- /*
24+ /*
2525 * @test
26- * @bug 4856966 8242332
26+ * @bug 4856966 8242332 8269276
2727 * @summary
2828 * @author Andreas Sterbenz
2929 * @library /test/lib ..
3232 * @run main/othervm ReinitDigest
3333 * @run main/othervm -Djava.security.manager=allow ReinitDigest sm
3434 */
35-
3635import java .security .MessageDigest ;
3736import java .security .Provider ;
3837import java .util .Arrays ;
@@ -47,8 +46,7 @@ public static void main(String[] args) throws Exception {
4746
4847 @ Override
4948 public void main (Provider p ) throws Exception {
50- List <String > ALGS = getSupportedAlgorithms ("MessageDigest" ,
51- "SHA" , p );
49+ List <String > ALGS = getSupportedAlgorithms ("MessageDigest" , "SHA" , p );
5250 Random r = new Random ();
5351 byte [] data1 = new byte [10 * 1024 ];
5452 byte [] data2 = new byte [10 * 1024 ];
@@ -75,17 +73,18 @@ public void main(Provider p) throws Exception {
7573 private void doTest (String alg , Provider p , byte [] data1 , byte [] data2 )
7674 throws Exception {
7775 System .out .println ("Testing " + alg );
78- MessageDigest md = MessageDigest .getInstance (alg , "SUN" );
79- byte [] d1 = md .digest (data1 );
80- md = MessageDigest .getInstance (alg , p );
81- byte [] d2 = md .digest (data1 );
76+ MessageDigest md1 = MessageDigest .getInstance (alg , "SUN" );
77+ byte [] d1 = md1 .digest (data1 );
78+ MessageDigest md2 = MessageDigest .getInstance (alg , p );
79+ checkInstances (md1 , md2 );
80+ byte [] d2 = md2 .digest (data1 );
8281 check (d1 , d2 );
83- byte [] d3 = md .digest (data1 );
82+ byte [] d3 = md2 .digest (data1 );
8483 check (d1 , d3 );
85- md .update (data2 );
86- md .update ((byte )0 );
87- md .reset ();
88- byte [] d4 = md .digest (data1 );
84+ md2 .update (data2 );
85+ md2 .update ((byte ) 0 );
86+ md2 .reset ();
87+ byte [] d4 = md2 .digest (data1 );
8988 check (d1 , d4 );
9089 }
9190
@@ -94,4 +93,17 @@ private static void check(byte[] d1, byte[] d2) throws Exception {
9493 throw new RuntimeException ("Digest mismatch" );
9594 }
9695 }
96+
97+ private static void checkInstances (MessageDigest md1 , MessageDigest md2 )
98+ throws Exception {
99+ if (md1 .equals (md2 )) {
100+ throw new RuntimeException ("MD instances should be different" );
101+ }
102+ if (!md1 .getAlgorithm ().equals (md2 .getAlgorithm ())) {
103+ throw new RuntimeException ("Algorithm name should equal" );
104+ }
105+ if (md1 .getProvider ().getName ().equals (md2 .getProvider ().getName ())) {
106+ throw new RuntimeException ("Provider name should be different" );
107+ }
108+ }
97109}
0 commit comments