Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/security/pkcs11/tls/TestMasterSecret.java
38855 views
/*1* Copyright (c) 2005, 2016, 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 631653926* @summary Known-answer-test for TlsMasterSecret generator27* @author Andreas Sterbenz28* @library ..29* @run main/othervm TestMasterSecret30* @run main/othervm TestMasterSecret sm TestMasterSecret.policy31*/3233import java.io.BufferedReader;34import java.nio.file.Files;35import java.nio.file.Paths;36import java.security.Provider;37import java.util.Arrays;38import javax.crypto.KeyGenerator;39import javax.crypto.SecretKey;40import javax.crypto.spec.SecretKeySpec;41import sun.security.internal.interfaces.TlsMasterSecret;42import sun.security.internal.spec.TlsMasterSecretParameterSpec;4344public class TestMasterSecret extends PKCS11Test {4546private static final int PREFIX_LENGTH = "m-premaster: ".length();4748public static void main(String[] args) throws Exception {49main(new TestMasterSecret(), args);50}5152@Override53public void main(Provider provider) throws Exception {54if (provider.getService("KeyGenerator", "SunTlsMasterSecret") == null) {55System.out.println("Not supported by provider, skipping");56return;57}5859try (BufferedReader reader = Files.newBufferedReader(60Paths.get(BASE, "masterdata.txt"))) {6162int n = 0;63int lineNumber = 0;6465String algorithm = null;66byte[] premaster = null;67byte[] clientRandom = null;68byte[] serverRandom = null;69int protoMajor = 0;70int protoMinor = 0;71int preMajor = 0;72int preMinor = 0;73byte[] master = null;7475while (true) {76String line = reader.readLine();77lineNumber++;78if (line == null) {79break;80}81if (line.startsWith("m-") == false) {82continue;83}84String data = line.substring(PREFIX_LENGTH);85if (line.startsWith("m-algorithm:")) {86algorithm = data;87} else if (line.startsWith("m-premaster:")) {88premaster = parse(data);89} else if (line.startsWith("m-crandom:")) {90clientRandom = parse(data);91} else if (line.startsWith("m-srandom:")) {92serverRandom = parse(data);93} else if (line.startsWith("m-protomajor:")) {94protoMajor = Integer.parseInt(data);95} else if (line.startsWith("m-protominor:")) {96protoMinor = Integer.parseInt(data);97} else if (line.startsWith("m-premajor:")) {98preMajor = Integer.parseInt(data);99} else if (line.startsWith("m-preminor:")) {100preMinor = Integer.parseInt(data);101} else if (line.startsWith("m-master:")) {102master = parse(data);103104System.out.print(".");105n++;106107KeyGenerator kg =108KeyGenerator.getInstance("SunTlsMasterSecret", provider);109SecretKey premasterKey =110new SecretKeySpec(premaster, algorithm);111TlsMasterSecretParameterSpec spec =112new TlsMasterSecretParameterSpec(premasterKey,113protoMajor, protoMinor, clientRandom, serverRandom,114null, -1, -1);115kg.init(spec);116TlsMasterSecret key = (TlsMasterSecret)kg.generateKey();117byte[] enc = key.getEncoded();118if (Arrays.equals(master, enc) == false) {119throw new Exception("mismatch line: " + lineNumber);120}121if ((preMajor != key.getMajorVersion()) ||122(preMinor != key.getMinorVersion())) {123throw new Exception("version mismatch line: " + lineNumber);124}125} else {126throw new Exception("Unknown line: " + line);127}128}129if (n == 0) {130throw new Exception("no tests");131}132System.out.println();133System.out.println("OK: " + n + " tests");134}135}136137}138139140