--- old/test/jdk/javax/net/ssl/compatibility/UseCase.java 2019-01-17 15:19:30.000000000 +0800 +++ new/test/jdk/javax/net/ssl/compatibility/UseCase.java 2019-01-17 15:19:30.000000000 +0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,16 +32,119 @@ private static final boolean FULL_CASES = Utils.getBoolProperty("fullCases"); - private static final Parameter[][] PARAMS = new Parameter[][] { - FULL_CASES ? Protocol.values() : Protocol.getMandatoryValues(), - FULL_CASES ? CipherSuite.values() : CipherSuite.getMandatoryValues(), - FULL_CASES ? ClientAuth.values() : ClientAuth.getMandatoryValues(), - FULL_CASES ? ServerName.values() : ServerName.getMandatoryValues(), - FULL_CASES ? AppProtocol.values() : AppProtocol.getMandatoryValues() }; + public static final boolean FULL_CIPHER_SUITES + = Utils.getBoolProperty("fullCipherSuites"); + + public static final Protocol[] PROTOCOLS = new Protocol[] { + Protocol.TLSV1, + Protocol.TLSV1_1, + Protocol.TLSV1_2, + Protocol.TLSV1_3 }; + + public static final CipherSuite[] CIPHER_SUITES = new CipherSuite[] { + CipherSuite.TLS_AES_128_GCM_SHA256, + CipherSuite.TLS_AES_256_GCM_SHA384, + CipherSuite.TLS_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256, + CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, + CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, + CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 }; + + public static final CipherSuite[] MANDATORY_CIPHER_SUITES = new CipherSuite[] { + CipherSuite.TLS_AES_128_GCM_SHA256, + CipherSuite.TLS_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256, + CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, + CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, + CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 }; + + enum ServerName { + + NONE(null), + EXAMPLE("EXAMPLE"); + + final String name; + + private ServerName(String name) { + this.name = name; + } + } + + enum AppProtocol { + + NONE(null, null), + EXAMPLE(new String[] { Utils.HTTP_2, Utils.HTTP_1_1 }, Utils.HTTP_2); + + final String[] appProtocols; + + // Expected negotiated application protocol + final String negoAppProtocol; + + private AppProtocol(String[] appProtocols, String negoAppProtocol) { + this.appProtocols = appProtocols; + this.negoAppProtocol = negoAppProtocol; + } + } + + private static final Object[][] PARAMS = new Object[][] { + FULL_CASES ? PROTOCOLS : PROTOCOLS, + FULL_CASES ? CIPHER_SUITES : MANDATORY_CIPHER_SUITES, + FULL_CASES ? new Boolean[] { false, true } : new Boolean[] { true }, + FULL_CASES + ? new ServerName[] { ServerName.NONE, ServerName.EXAMPLE } + : new ServerName[] { ServerName.EXAMPLE }, + FULL_CASES + ? new AppProtocol[] { + AppProtocol.NONE, + AppProtocol.EXAMPLE } + : new AppProtocol[] { + AppProtocol.EXAMPLE } }; public final Protocol protocol; public final CipherSuite cipherSuite; - public final ClientAuth clientAuth; + public final Boolean clientAuth; public final ServerName serverName; public final AppProtocol appProtocol; @@ -50,7 +153,7 @@ public UseCase( Protocol protocol, CipherSuite cipherSuite, - ClientAuth clientAuth, + boolean clientAuth, ServerName serverName, AppProtocol appProtocol) { this.protocol = protocol; @@ -62,15 +165,10 @@ negativeCase = !cipherSuite.supportedByProtocol(protocol); } - // JDK 6 doesn't support EC key algorithm. - public boolean ignoredByJdk(JdkInfo jdkInfo) { - return cipherSuite.name().contains("_EC") && !jdkInfo.supportsECKey; - } - @Override public String toString() { return Utils.join(Utils.PARAM_DELIMITER, - "Protocol=" + protocol.version, + "Protocol=" + protocol.name, "CipherSuite=" + cipherSuite, "ClientAuth=" + clientAuth, "ServerName=" + serverName, @@ -79,12 +177,12 @@ public static List getAllUseCases() { List useCases = new ArrayList<>(); - getUseCases(PARAMS, 0, new Parameter[PARAMS.length], useCases); + getUseCases(PARAMS, 0, new Object[PARAMS.length], useCases); return useCases; } - private static void getUseCases(Parameter[][] params, int index, - Parameter[] currentValues, List useCases) { + private static void getUseCases(Object[][] params, int index, + Object[] currentValues, List useCases) { if (index == params.length) { Protocol protocol = (Protocol) currentValues[0]; CipherSuite cipherSuite = (CipherSuite) currentValues[1]; @@ -92,12 +190,12 @@ UseCase useCase = new UseCase( protocol, cipherSuite, - (ClientAuth) currentValues[2], + (Boolean) currentValues[2], (ServerName) currentValues[3], (AppProtocol) currentValues[4]); useCases.add(useCase); } else { - Parameter[] values = params[index]; + Object[] values = params[index]; for (int i = 0; i < values.length; i++) { currentValues[index] = values[i]; getUseCases(params, index + 1, currentValues, useCases);