Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/javax/net/ssl/compatibility/UseCase.java
38853 views
/*1* Copyright (c) 2017, 2019, 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*/2223import java.util.ArrayList;24import java.util.List;2526/*27* The TLS communication use case.28*/29public class UseCase {3031private static final boolean FULL_CASES32= Boolean.getBoolean("fullCases");3334public static final boolean FULL_CIPHER_SUITES35= Boolean.getBoolean("fullCipherSuites");3637public static final Protocol[] PROTOCOLS = new Protocol[] {38Protocol.TLSV1,39Protocol.TLSV1_1,40Protocol.TLSV1_2,41Protocol.TLSV1_3 };4243public static final CipherSuite[] CIPHER_SUITES = new CipherSuite[] {44CipherSuite.TLS_AES_128_GCM_SHA256,45CipherSuite.TLS_AES_256_GCM_SHA384,46CipherSuite.TLS_CHACHA20_POLY1305_SHA256,47CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,48CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,49CipherSuite.TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256,50CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,51CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,52CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256,53CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,54CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,55CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,56CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,57CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,58CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,59CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA,60CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,61CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,62CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA,63CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,64CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,65CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256,66CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,67CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,68CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,69CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,70CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,71CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,72CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA,73CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,74CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA,75CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,76CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,77CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,78CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384,79CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,80CipherSuite.TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,81CipherSuite.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,82CipherSuite.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,83CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,84CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,85CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,86CipherSuite.TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,87CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,88CipherSuite.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 };8990public static final CipherSuite[] MANDATORY_CIPHER_SUITES = new CipherSuite[] {91CipherSuite.TLS_AES_128_GCM_SHA256,92CipherSuite.TLS_CHACHA20_POLY1305_SHA256,93CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,94CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA,95CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,96CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,97CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256,98CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,99CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,100CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 };101102enum ServerName {103104NONE(null),105EXAMPLE("EXAMPLE");106107final String name;108109private ServerName(String name) {110this.name = name;111}112}113114enum AppProtocol {115116NONE(null, null),117EXAMPLE(new String[] { Utils.HTTP_2, Utils.HTTP_1_1 }, Utils.HTTP_2);118119final String[] appProtocols;120121// Expected negotiated application protocol122final String negoAppProtocol;123124private AppProtocol(String[] appProtocols, String negoAppProtocol) {125this.appProtocols = appProtocols;126this.negoAppProtocol = negoAppProtocol;127}128}129130private static final Object[][] PARAMS = new Object[][] {131PROTOCOLS,132FULL_CASES ? CIPHER_SUITES : MANDATORY_CIPHER_SUITES,133FULL_CASES ? new Boolean[] { false, true } : new Boolean[] { true },134FULL_CASES135? new ServerName[] { ServerName.NONE, ServerName.EXAMPLE }136: new ServerName[] { ServerName.EXAMPLE },137FULL_CASES138? new AppProtocol[] {139AppProtocol.NONE,140AppProtocol.EXAMPLE }141: new AppProtocol[] {142AppProtocol.EXAMPLE } };143144public final Protocol protocol;145public final CipherSuite cipherSuite;146public final Boolean clientAuth;147public final ServerName serverName;148public final AppProtocol appProtocol;149150public final boolean negativeCase;151152public UseCase(153Protocol protocol,154CipherSuite cipherSuite,155boolean clientAuth,156ServerName serverName,157AppProtocol appProtocol) {158this.protocol = protocol;159this.cipherSuite = cipherSuite;160this.clientAuth = clientAuth;161this.serverName = serverName;162this.appProtocol = appProtocol;163164negativeCase = !cipherSuite.supportedByProtocol(protocol);165}166167@Override168public String toString() {169return Utils.join(Utils.PARAM_DELIMITER,170"Protocol=" + protocol.name,171"CipherSuite=" + cipherSuite,172"ClientAuth=" + clientAuth,173"ServerName=" + serverName,174"AppProtocols=" + appProtocol);175}176177public static List<UseCase> getAllUseCases() {178List<UseCase> useCases = new ArrayList<>();179getUseCases(PARAMS, 0, new Object[PARAMS.length], useCases);180return useCases;181}182183private static void getUseCases(Object[][] params, int index,184Object[] currentValues, List<UseCase> useCases) {185if (index == params.length) {186Protocol protocol = (Protocol) currentValues[0];187CipherSuite cipherSuite = (CipherSuite) currentValues[1];188189UseCase useCase = new UseCase(190protocol,191cipherSuite,192(Boolean) currentValues[2],193(ServerName) currentValues[3],194(AppProtocol) currentValues[4]);195useCases.add(useCase);196} else {197Object[] values = params[index];198for (int i = 0; i < values.length; i++) {199currentValues[index] = values[i];200getUseCases(params, index + 1, currentValues, useCases);201}202}203}204}205206207