Path: blob/master/test/jdk/sun/security/pkcs11/MessageDigest/ReinitDigest.java
41153 views
/*1* Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 4856966 824233226* @summary27* @author Andreas Sterbenz28* @library /test/lib ..29* @key randomness30* @modules jdk.crypto.cryptoki31* @run main/othervm ReinitDigest32* @run main/othervm -Djava.security.manager=allow ReinitDigest sm33*/3435import java.security.MessageDigest;36import java.security.Provider;37import java.util.Arrays;38import java.util.Random;39import java.util.List;4041public class ReinitDigest extends PKCS11Test {4243public static void main(String[] args) throws Exception {44main(new ReinitDigest(), args);45}4647@Override48public void main(Provider p) throws Exception {49List<String> ALGS = getSupportedAlgorithms("MessageDigest",50"SHA", p);51Random r = new Random();52byte[] data1 = new byte[10 * 1024];53byte[] data2 = new byte[10 * 1024];54r.nextBytes(data1);55r.nextBytes(data2);5657boolean success = true;58for (String alg : ALGS) {59try {60doTest(alg, p, data1, data2);61} catch (Exception e) {62System.out.println("Unexpected exception: " + e);63e.printStackTrace();64success = false;65}66}6768if (!success) {69throw new RuntimeException("Test failed");70}71System.out.println("All tests passed");72}7374private void doTest(String alg, Provider p, byte[] data1, byte[] data2)75throws Exception {76System.out.println("Testing " + alg);77MessageDigest md = MessageDigest.getInstance(alg, "SUN");78byte[] d1 = md.digest(data1);79md = MessageDigest.getInstance(alg, p);80byte[] d2 = md.digest(data1);81check(d1, d2);82byte[] d3 = md.digest(data1);83check(d1, d3);84md.update(data2);85md.update((byte)0);86md.reset();87byte[] d4 = md.digest(data1);88check(d1, d4);89}9091private static void check(byte[] d1, byte[] d2) throws Exception {92if (Arrays.equals(d1, d2) == false) {93throw new RuntimeException("Digest mismatch");94}95}96}979899