Skip to content

Instantly share code, notes, and snippets.

@swankjesse
Created October 11, 2014 00:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save swankjesse/c6c82bd88295a8a13cc9 to your computer and use it in GitHub Desktop.
Save swankjesse/c6c82bd88295a8a13cc9 to your computer and use it in GitHub Desktop.
package com.squareup.okhttp.recipes;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Ciphers {
public static final Map<String, String> OPENSSL_TO_JAVA = new LinkedHashMap<>();
public static final Map<String, String> JAVA_TO_OPENSSL = new LinkedHashMap<>();
public static final Map<String, String> NAME_TO_VERSION = new LinkedHashMap<>();
static {
// Source: http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml
NAME_TO_VERSION.put("TLS_NULL_WITH_NULL_NULL", "0x00,0x00");
NAME_TO_VERSION.put("TLS_RSA_WITH_NULL_MD5", "0x00,0x01");
NAME_TO_VERSION.put("TLS_RSA_WITH_NULL_SHA", "0x00,0x02");
NAME_TO_VERSION.put("TLS_RSA_EXPORT_WITH_RC4_40_MD5", "0x00,0x03");
NAME_TO_VERSION.put("TLS_RSA_WITH_RC4_128_MD5", "0x00,0x04");
NAME_TO_VERSION.put("TLS_RSA_WITH_RC4_128_SHA", "0x00,0x05");
NAME_TO_VERSION.put("TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", "0x00,0x06");
NAME_TO_VERSION.put("TLS_RSA_WITH_IDEA_CBC_SHA", "0x00,0x07");
NAME_TO_VERSION.put("TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", "0x00,0x08");
NAME_TO_VERSION.put("TLS_RSA_WITH_DES_CBC_SHA", "0x00,0x09");
NAME_TO_VERSION.put("TLS_RSA_WITH_3DES_EDE_CBC_SHA", "0x00,0x0A");
NAME_TO_VERSION.put("TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", "0x00,0x0B");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_DES_CBC_SHA", "0x00,0x0C");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", "0x00,0x0D");
NAME_TO_VERSION.put("TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", "0x00,0x0E");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_DES_CBC_SHA", "0x00,0x0F");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", "0x00,0x10");
NAME_TO_VERSION.put("TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", "0x00,0x11");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_DES_CBC_SHA", "0x00,0x12");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", "0x00,0x13");
NAME_TO_VERSION.put("TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", "0x00,0x14");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_DES_CBC_SHA", "0x00,0x15");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", "0x00,0x16");
NAME_TO_VERSION.put("TLS_DH_anon_EXPORT_WITH_RC4_40_MD5", "0x00,0x17");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_RC4_128_MD5", "0x00,0x18");
NAME_TO_VERSION.put("TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA", "0x00,0x19");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_DES_CBC_SHA", "0x00,0x1A");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_3DES_EDE_CBC_SHA", "0x00,0x1B");
NAME_TO_VERSION.put("TLS_KRB5_WITH_DES_CBC_SHA", "0x00,0x1E");
NAME_TO_VERSION.put("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", "0x00,0x1F");
NAME_TO_VERSION.put("TLS_KRB5_WITH_RC4_128_SHA", "0x00,0x20");
NAME_TO_VERSION.put("TLS_KRB5_WITH_IDEA_CBC_SHA", "0x00,0x21");
NAME_TO_VERSION.put("TLS_KRB5_WITH_DES_CBC_MD5", "0x00,0x22");
NAME_TO_VERSION.put("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", "0x00,0x23");
NAME_TO_VERSION.put("TLS_KRB5_WITH_RC4_128_MD5", "0x00,0x24");
NAME_TO_VERSION.put("TLS_KRB5_WITH_IDEA_CBC_MD5", "0x00,0x25");
NAME_TO_VERSION.put("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", "0x00,0x26");
NAME_TO_VERSION.put("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", "0x00,0x27");
NAME_TO_VERSION.put("TLS_KRB5_EXPORT_WITH_RC4_40_SHA", "0x00,0x28");
NAME_TO_VERSION.put("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", "0x00,0x29");
NAME_TO_VERSION.put("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", "0x00,0x2A");
NAME_TO_VERSION.put("TLS_KRB5_EXPORT_WITH_RC4_40_MD5", "0x00,0x2B");
NAME_TO_VERSION.put("TLS_PSK_WITH_NULL_SHA", "0x00,0x2C");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_NULL_SHA", "0x00,0x2D");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_NULL_SHA", "0x00,0x2E");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_128_CBC_SHA", "0x00,0x2F");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_AES_128_CBC_SHA", "0x00,0x30");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_AES_128_CBC_SHA", "0x00,0x31");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "0x00,0x32");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "0x00,0x33");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", "0x00,0x34");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_256_CBC_SHA", "0x00,0x35");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_AES_256_CBC_SHA", "0x00,0x36");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_AES_256_CBC_SHA", "0x00,0x37");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", "0x00,0x38");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", "0x00,0x39");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", "0x00,0x3A");
NAME_TO_VERSION.put("TLS_RSA_WITH_NULL_SHA256", "0x00,0x3B");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_128_CBC_SHA256", "0x00,0x3C");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_256_CBC_SHA256", "0x00,0x3D");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_AES_128_CBC_SHA256", "0x00,0x3E");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_AES_128_CBC_SHA256", "0x00,0x3F");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", "0x00,0x40");
NAME_TO_VERSION.put("TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", "0x00,0x41");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", "0x00,0x42");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", "0x00,0x43");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", "0x00,0x44");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", "0x00,0x45");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA", "0x00,0x46");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", "0x00,0x67");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_AES_256_CBC_SHA256", "0x00,0x68");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_AES_256_CBC_SHA256", "0x00,0x69");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", "0x00,0x6A");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", "0x00,0x6B");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_AES_128_CBC_SHA256", "0x00,0x6C");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_AES_256_CBC_SHA256", "0x00,0x6D");
NAME_TO_VERSION.put("TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", "0x00,0x84");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", "0x00,0x85");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", "0x00,0x86");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", "0x00,0x87");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", "0x00,0x88");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA", "0x00,0x89");
NAME_TO_VERSION.put("TLS_PSK_WITH_RC4_128_SHA", "0x00,0x8A");
NAME_TO_VERSION.put("TLS_PSK_WITH_3DES_EDE_CBC_SHA", "0x00,0x8B");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_128_CBC_SHA", "0x00,0x8C");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_256_CBC_SHA", "0x00,0x8D");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_RC4_128_SHA", "0x00,0x8E");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", "0x00,0x8F");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_128_CBC_SHA", "0x00,0x90");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_256_CBC_SHA", "0x00,0x91");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_RC4_128_SHA", "0x00,0x92");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", "0x00,0x93");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_AES_128_CBC_SHA", "0x00,0x94");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_AES_256_CBC_SHA", "0x00,0x95");
NAME_TO_VERSION.put("TLS_RSA_WITH_SEED_CBC_SHA", "0x00,0x96");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_SEED_CBC_SHA", "0x00,0x97");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_SEED_CBC_SHA", "0x00,0x98");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_SEED_CBC_SHA", "0x00,0x99");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_SEED_CBC_SHA", "0x00,0x9A");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_SEED_CBC_SHA", "0x00,0x9B");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_128_GCM_SHA256", "0x00,0x9C");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_256_GCM_SHA384", "0x00,0x9D");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", "0x00,0x9E");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", "0x00,0x9F");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_AES_128_GCM_SHA256", "0x00,0xA0");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_AES_256_GCM_SHA384", "0x00,0xA1");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", "0x00,0xA2");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", "0x00,0xA3");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_AES_128_GCM_SHA256", "0x00,0xA4");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_AES_256_GCM_SHA384", "0x00,0xA5");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_AES_128_GCM_SHA256", "0x00,0xA6");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_AES_256_GCM_SHA384", "0x00,0xA7");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_128_GCM_SHA256", "0x00,0xA8");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_256_GCM_SHA384", "0x00,0xA9");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", "0x00,0xAA");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", "0x00,0xAB");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", "0x00,0xAC");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", "0x00,0xAD");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_128_CBC_SHA256", "0x00,0xAE");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_256_CBC_SHA384", "0x00,0xAF");
NAME_TO_VERSION.put("TLS_PSK_WITH_NULL_SHA256", "0x00,0xB0");
NAME_TO_VERSION.put("TLS_PSK_WITH_NULL_SHA384", "0x00,0xB1");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", "0x00,0xB2");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", "0x00,0xB3");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_NULL_SHA256", "0x00,0xB4");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_NULL_SHA384", "0x00,0xB5");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", "0x00,0xB6");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", "0x00,0xB7");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_NULL_SHA256", "0x00,0xB8");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_NULL_SHA384", "0x00,0xB9");
NAME_TO_VERSION.put("TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", "0x00,0xBA");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256", "0x00,0xBB");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256", "0x00,0xBC");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", "0x00,0xBD");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", "0x00,0xBE");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256", "0x00,0xBF");
NAME_TO_VERSION.put("TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", "0x00,0xC0");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256", "0x00,0xC1");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256", "0x00,0xC2");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", "0x00,0xC3");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", "0x00,0xC4");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256", "0x00,0xC5");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", "0xC0,0x01");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "0xC0,0x02");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "0xC0,0x03");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", "0xC0,0x04");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", "0xC0,0x05");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", "0xC0,0x06");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", "0xC0,0x07");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "0xC0,0x08");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "0xC0,0x09");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", "0xC0,0x0A");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_NULL_SHA", "0xC0,0x0B");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_RC4_128_SHA", "0xC0,0x0C");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "0xC0,0x0D");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", "0xC0,0x0E");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", "0xC0,0x0F");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_NULL_SHA", "0xC0,0x10");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", "0xC0,0x11");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "0xC0,0x12");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "0xC0,0x13");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", "0xC0,0x14");
NAME_TO_VERSION.put("TLS_ECDH_anon_WITH_NULL_SHA", "0xC0,0x15");
NAME_TO_VERSION.put("TLS_ECDH_anon_WITH_RC4_128_SHA", "0xC0,0x16");
NAME_TO_VERSION.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", "0xC0,0x17");
NAME_TO_VERSION.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", "0xC0,0x18");
NAME_TO_VERSION.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", "0xC0,0x19");
NAME_TO_VERSION.put("TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", "0xC0,0x1A");
NAME_TO_VERSION.put("TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", "0xC0,0x1B");
NAME_TO_VERSION.put("TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", "0xC0,0x1C");
NAME_TO_VERSION.put("TLS_SRP_SHA_WITH_AES_128_CBC_SHA", "0xC0,0x1D");
NAME_TO_VERSION.put("TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", "0xC0,0x1E");
NAME_TO_VERSION.put("TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", "0xC0,0x1F");
NAME_TO_VERSION.put("TLS_SRP_SHA_WITH_AES_256_CBC_SHA", "0xC0,0x20");
NAME_TO_VERSION.put("TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", "0xC0,0x21");
NAME_TO_VERSION.put("TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", "0xC0,0x22");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "0xC0,0x23");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", "0xC0,0x24");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", "0xC0,0x25");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", "0xC0,0x26");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "0xC0,0x27");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", "0xC0,0x28");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", "0xC0,0x29");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", "0xC0,0x2A");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "0xC0,0x2B");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "0xC0,0x2C");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", "0xC0,0x2D");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", "0xC0,0x2E");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "0xC0,0x2F");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "0xC0,0x30");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", "0xC0,0x31");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", "0xC0,0x32");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_RC4_128_SHA", "0xC0,0x33");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", "0xC0,0x34");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", "0xC0,0x35");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", "0xC0,0x36");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", "0xC0,0x37");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", "0xC0,0x38");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_NULL_SHA", "0xC0,0x39");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_NULL_SHA256", "0xC0,0x3A");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_NULL_SHA384", "0xC0,0x3B");
NAME_TO_VERSION.put("TLS_RSA_WITH_ARIA_128_CBC_SHA256", "0xC0,0x3C");
NAME_TO_VERSION.put("TLS_RSA_WITH_ARIA_256_CBC_SHA384", "0xC0,0x3D");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256", "0xC0,0x3E");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384", "0xC0,0x3F");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256", "0xC0,0x40");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384", "0xC0,0x41");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256", "0xC0,0x42");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384", "0xC0,0x43");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", "0xC0,0x44");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", "0xC0,0x45");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_ARIA_128_CBC_SHA256", "0xC0,0x46");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_ARIA_256_CBC_SHA384", "0xC0,0x47");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", "0xC0,0x48");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", "0xC0,0x49");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256", "0xC0,0x4A");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384", "0xC0,0x4B");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", "0xC0,0x4C");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", "0xC0,0x4D");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256", "0xC0,0x4E");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384", "0xC0,0x4F");
NAME_TO_VERSION.put("TLS_RSA_WITH_ARIA_128_GCM_SHA256", "0xC0,0x50");
NAME_TO_VERSION.put("TLS_RSA_WITH_ARIA_256_GCM_SHA384", "0xC0,0x51");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", "0xC0,0x52");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", "0xC0,0x53");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256", "0xC0,0x54");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384", "0xC0,0x55");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256", "0xC0,0x56");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384", "0xC0,0x57");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256", "0xC0,0x58");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384", "0xC0,0x59");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_ARIA_128_GCM_SHA256", "0xC0,0x5A");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_ARIA_256_GCM_SHA384", "0xC0,0x5B");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", "0xC0,0x5C");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", "0xC0,0x5D");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256", "0xC0,0x5E");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384", "0xC0,0x5F");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", "0xC0,0x60");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", "0xC0,0x61");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256", "0xC0,0x62");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384", "0xC0,0x63");
NAME_TO_VERSION.put("TLS_PSK_WITH_ARIA_128_CBC_SHA256", "0xC0,0x64");
NAME_TO_VERSION.put("TLS_PSK_WITH_ARIA_256_CBC_SHA384", "0xC0,0x65");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", "0xC0,0x66");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", "0xC0,0x67");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256", "0xC0,0x68");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384", "0xC0,0x69");
NAME_TO_VERSION.put("TLS_PSK_WITH_ARIA_128_GCM_SHA256", "0xC0,0x6A");
NAME_TO_VERSION.put("TLS_PSK_WITH_ARIA_256_GCM_SHA384", "0xC0,0x6B");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", "0xC0,0x6C");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", "0xC0,0x6D");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256", "0xC0,0x6E");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384", "0xC0,0x6F");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", "0xC0,0x70");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", "0xC0,0x71");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x72");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x73");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x74");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x75");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x76");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x77");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x78");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x79");
NAME_TO_VERSION.put("TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x7A");
NAME_TO_VERSION.put("TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x7B");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x7C");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x7D");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x7E");
NAME_TO_VERSION.put("TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x7F");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x80");
NAME_TO_VERSION.put("TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x81");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x82");
NAME_TO_VERSION.put("TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x83");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x84");
NAME_TO_VERSION.put("TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x85");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x86");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x87");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x88");
NAME_TO_VERSION.put("TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x89");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x8A");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x8B");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x8C");
NAME_TO_VERSION.put("TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x8D");
NAME_TO_VERSION.put("TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x8E");
NAME_TO_VERSION.put("TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x8F");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x90");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x91");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256", "0xC0,0x92");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384", "0xC0,0x93");
NAME_TO_VERSION.put("TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x94");
NAME_TO_VERSION.put("TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x95");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x96");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x97");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x98");
NAME_TO_VERSION.put("TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x99");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", "0xC0,0x9A");
NAME_TO_VERSION.put("TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", "0xC0,0x9B");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_128_CCM", "0xC0,0x9C");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_256_CCM", "0xC0,0x9D");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_128_CCM", "0xC0,0x9E");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_256_CCM", "0xC0,0x9F");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_128_CCM_8", "0xC0,0xA0");
NAME_TO_VERSION.put("TLS_RSA_WITH_AES_256_CCM_8", "0xC0,0xA1");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_128_CCM_8", "0xC0,0xA2");
NAME_TO_VERSION.put("TLS_DHE_RSA_WITH_AES_256_CCM_8", "0xC0,0xA3");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_128_CCM", "0xC0,0xA4");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_256_CCM", "0xC0,0xA5");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_128_CCM", "0xC0,0xA6");
NAME_TO_VERSION.put("TLS_DHE_PSK_WITH_AES_256_CCM", "0xC0,0xA7");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_128_CCM_8", "0xC0,0xA8");
NAME_TO_VERSION.put("TLS_PSK_WITH_AES_256_CCM_8", "0xC0,0xA9");
NAME_TO_VERSION.put("TLS_PSK_DHE_WITH_AES_128_CCM_8", "0xC0,0xAA");
NAME_TO_VERSION.put("TLS_PSK_DHE_WITH_AES_256_CCM_8", "0xC0,0xAB");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_128_CCM", "0xC0,0xAC");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_256_CCM", "0xC0,0xAD");
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", "0xC0,0xAE");
// Manually input from Chrome.
NAME_TO_VERSION.put("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "0xCC,0x14");
NAME_TO_VERSION.put("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "0xCC,0x13");
}
static {
add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", "DHE-DSS-3DES-EDE-SHA");
add("TLS_DHE_DSS_WITH_CAMELLIA128_CBC_SHA", "DHE-DSS-CAMELLIA128-SHA");
add("TLS_DHE_DSS_WITH_CAMELLIA256_CBC_SHA", "DHE-DSS-CAMELLIA256-SHA");
add("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", "DHE-RSA-3DES-EDE-SHA");
add("TLS_DHE_RSA_WITH_CAMELLIA128_CBC_SHA", "DHE-RSA-CAMELLIA128-SHA");
add("TLS_DHE_RSA_WITH_CAMELLIA256_CBC_SHA", "DHE-RSA-CAMELLIA256-SHA");
add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-ECDSA-3DES-EDE-SHA");
add("TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-ECDSA-CHACHA20-POLY1305-SHA256");
add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", "ECDHE-ECDSA-RC4128-SHA"); // NEW
add("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-RSA-3DES-EDE-SHA");
add("TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-RSA-CHACHA20-POLY1305-SHA256");
add("TLS_ECDHE_RSA_WITH_RC4_128_SHA", "ECDHE-RSA-RC4128-SHA"); // NEW
add("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDH-ECDSA-3DES-EDE-SHA");
add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "ECDH-ECDSA-RC4128-SHA");
add("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "ECDH-RSA-3DES-EDE-SHA");
add("TLS_ECDH_RSA_WITH_RC4_128_SHA", "ECDH-RSA-RC4128-SHA");
add("SSL_RSA_WITH_3DES_EDE_CBC_SHA", "RSA-3DES-EDE-SHA"); // NEW
add("TLS_RSA_WITH_AES_128_CBC_SHA", "RSA-AES128-SHA"); // NEW
add("TLS_RSA_WITH_AES_128_GCM_SHA256", "RSA-AES128-GCM-SHA256"); // NEW
add("TLS_RSA_WITH_AES_256_CBC_SHA", "RSA-AES256-SHA"); // NEW
add("TLS_RSA_WITH_CAMELLIA128_CBC_SHA", "RSA-CAMELLIA128-SHA");
add("TLS_RSA_WITH_CAMELLIA256_CBC_SHA", "RSA-CAMELLIA256-SHA");
add("TLS_RSA_WITH_FIPS_3DES_EDE_CBC_SHA", "RSA-FIPS-3DES-EDE-SHA");
add("SSL_RSA_WITH_RC4_128_MD5", "RSA-RC4128-MD5"); // NEW
add("SSL_RSA_WITH_RC4_128_SHA", "RSA-RC4128-SHA"); // NEW
add("TLS_RSA_WITH_SEED_CBC_SHA", "RSA-SEED-SHA");
}
// https://android.googlesource.com/platform/external/conscrypt/+/master/src/main/java/org/conscrypt/NativeCrypto.java#631
static {
add("SSL_RSA_WITH_RC4_128_MD5", "RC4-MD5");
add("SSL_RSA_WITH_RC4_128_SHA", "RC4-SHA");
add("TLS_RSA_WITH_AES_128_CBC_SHA", "AES128-SHA");
add("TLS_RSA_WITH_AES_256_CBC_SHA", "AES256-SHA");
add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "ECDH-ECDSA-RC4-SHA");
add("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", "ECDH-ECDSA-AES128-SHA");
add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", "ECDH-ECDSA-AES256-SHA");
add("TLS_ECDH_RSA_WITH_RC4_128_SHA", "ECDH-RSA-RC4-SHA");
add("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", "ECDH-RSA-AES128-SHA");
add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", "ECDH-RSA-AES256-SHA");
add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", "ECDHE-ECDSA-RC4-SHA");
add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "ECDHE-ECDSA-AES128-SHA");
add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", "ECDHE-ECDSA-AES256-SHA");
add("TLS_ECDHE_RSA_WITH_RC4_128_SHA", "ECDHE-RSA-RC4-SHA");
add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "ECDHE-RSA-AES128-SHA");
add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", "ECDHE-RSA-AES256-SHA");
add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "DHE-RSA-AES128-SHA");
add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", "DHE-RSA-AES256-SHA");
add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "DHE-DSS-AES128-SHA");
add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", "DHE-DSS-AES256-SHA");
add("SSL_RSA_WITH_3DES_EDE_CBC_SHA", "DES-CBC3-SHA");
add("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDH-ECDSA-DES-CBC3-SHA");
add("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "ECDH-RSA-DES-CBC3-SHA");
add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-ECDSA-DES-CBC3-SHA");
add("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "ECDHE-RSA-DES-CBC3-SHA");
add("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", "EDH-RSA-DES-CBC3-SHA");
add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", "EDH-DSS-DES-CBC3-SHA");
add("SSL_RSA_WITH_DES_CBC_SHA", "DES-CBC-SHA");
add("SSL_DHE_RSA_WITH_DES_CBC_SHA", "EDH-RSA-DES-CBC-SHA");
add("SSL_DHE_DSS_WITH_DES_CBC_SHA", "EDH-DSS-DES-CBC-SHA");
add("SSL_RSA_EXPORT_WITH_RC4_40_MD5", "EXP-RC4-MD5");
add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", "EXP-DES-CBC-SHA");
add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", "EXP-EDH-RSA-DES-CBC-SHA");
add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", "EXP-EDH-DSS-DES-CBC-SHA");
add("SSL_RSA_WITH_NULL_MD5", "NULL-MD5");
add("SSL_RSA_WITH_NULL_SHA", "NULL-SHA");
add("TLS_ECDH_ECDSA_WITH_NULL_SHA", "ECDH-ECDSA-NULL-SHA");
add("TLS_ECDH_RSA_WITH_NULL_SHA", "ECDH-RSA-NULL-SHA");
add("TLS_ECDHE_ECDSA_WITH_NULL_SHA", "ECDHE-ECDSA-NULL-SHA");
add("TLS_ECDHE_RSA_WITH_NULL_SHA", "ECDHE-RSA-NULL-SHA");
add("SSL_DH_anon_WITH_RC4_128_MD5", "ADH-RC4-MD5");
add("TLS_DH_anon_WITH_AES_128_CBC_SHA", "ADH-AES128-SHA");
add("TLS_DH_anon_WITH_AES_256_CBC_SHA", "ADH-AES256-SHA");
add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", "ADH-DES-CBC3-SHA");
add("SSL_DH_anon_WITH_DES_CBC_SHA", "ADH-DES-CBC-SHA");
add("TLS_ECDH_anon_WITH_RC4_128_SHA", "AECDH-RC4-SHA");
add("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", "AECDH-AES128-SHA");
add("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", "AECDH-AES256-SHA");
add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", "AECDH-DES-CBC3-SHA");
add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", "EXP-ADH-RC4-MD5");
add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", "EXP-ADH-DES-CBC-SHA");
add("TLS_ECDH_anon_WITH_NULL_SHA", "AECDH-NULL-SHA");
// TLSv1.2 cipher suites
add("TLS_RSA_WITH_NULL_SHA256", "NULL-SHA256");
add("TLS_RSA_WITH_AES_128_CBC_SHA256", "AES128-SHA256");
add("TLS_RSA_WITH_AES_256_CBC_SHA256", "AES256-SHA256");
add("TLS_RSA_WITH_AES_128_GCM_SHA256", "AES128-GCM-SHA256");
add("TLS_RSA_WITH_AES_256_GCM_SHA384", "AES256-GCM-SHA384");
add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", "DHE-RSA-AES128-SHA256");
add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", "DHE-RSA-AES256-SHA256");
add("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", "DHE-RSA-AES128-GCM-SHA256");
add("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", "DHE-RSA-AES256-GCM-SHA384");
add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", "DHE-DSS-AES128-SHA256");
add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", "DHE-DSS-AES256-SHA256");
add("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", "DHE-DSS-AES128-GCM-SHA256");
add("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", "DHE-DSS-AES256-GCM-SHA384");
add("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", "ECDH-RSA-AES128-SHA256");
add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", "ECDH-RSA-AES256-SHA384");
add("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", "ECDH-RSA-AES128-GCM-SHA256");
add("TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", "ECDH-RSA-AES256-GCM-SHA384");
add("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", "ECDH-ECDSA-AES128-SHA256");
add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", "ECDH-ECDSA-AES256-SHA384");
add("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", "ECDH-ECDSA-AES128-GCM-SHA256");
add("TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", "ECDH-ECDSA-AES256-GCM-SHA384");
add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "ECDHE-RSA-AES128-SHA256");
add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", "ECDHE-RSA-AES256-SHA384");
add("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "ECDHE-RSA-AES128-GCM-SHA256");
add("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "ECDHE-RSA-AES256-GCM-SHA384");
add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "ECDHE-ECDSA-AES128-SHA256");
add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", "ECDHE-ECDSA-AES256-SHA384");
add("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "ECDHE-ECDSA-AES128-GCM-SHA256");
add("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "ECDHE-ECDSA-AES256-GCM-SHA384");
add("TLS_DH_anon_WITH_AES_128_CBC_SHA256", "ADH-AES128-SHA256");
add("TLS_DH_anon_WITH_AES_256_CBC_SHA256", "ADH-AES256-SHA256");
add("TLS_DH_anon_WITH_AES_128_GCM_SHA256", "ADH-AES128-GCM-SHA256");
add("TLS_DH_anon_WITH_AES_256_GCM_SHA384", "ADH-AES256-GCM-SHA384");
// No Kerberos in Android
// add("TLS_KRB5_WITH_RC4_128_SHA", "KRB5-RC4-SHA");
// add("TLS_KRB5_WITH_RC4_128_MD5", "KRB5-RC4-MD5");
// add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", "KRB5-DES-CBC3-SHA");
// add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", "KRB5-DES-CBC3-MD5");
// add("TLS_KRB5_WITH_DES_CBC_SHA", "KRB5-DES-CBC-SHA");
// add("TLS_KRB5_WITH_DES_CBC_MD5", "KRB5-DES-CBC-MD5");
// add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA", "EXP-KRB5-RC4-SHA");
// add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5", "EXP-KRB5-RC4-MD5");
// add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", "EXP-KRB5-DES-CBC-SHA");
// add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", "EXP-KRB5-DES-CBC-MD5");
// not implemented by either RI or OpenSSL
// add("SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", null);
// add("SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", null);
// EXPORT1024 suites were never standardized but were widely implemented.
// OpenSSL 0.9.8c and later have disabled TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
// add("SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA", "EXP1024-DES-CBC-SHA");
// add("SSL_RSA_EXPORT1024_WITH_RC4_56_SHA", "EXP1024-RC4-SHA");
// No RC2
// add("SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5", "EXP-RC2-CBC-MD5");
// add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", "EXP-KRB5-RC2-CBC-SHA");
// add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", "EXP-KRB5-RC2-CBC-MD5");
// Pre-Shared Key (PSK) cipher suites
add("TLS_PSK_WITH_3DES_EDE_CBC_SHA", "PSK-3DES-EDE-CBC-SHA");
add("TLS_PSK_WITH_AES_128_CBC_SHA", "PSK-AES128-CBC-SHA");
add("TLS_PSK_WITH_AES_256_CBC_SHA", "PSK-AES256-CBC-SHA");
add("TLS_PSK_WITH_RC4_128_SHA", "PSK-RC4-SHA");
add("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", "ECDHE-PSK-AES128-CBC-SHA");
add("TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", "ECDHE-PSK-AES256-CBC-SHA");
// Signaling Cipher Suite Value for secure renegotiation handled as special case.
// add("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", null);
}
static void add(String javaName, String openSslName) {
OPENSSL_TO_JAVA.put(openSslName, javaName);
JAVA_TO_OPENSSL.put(javaName, openSslName);
}
public static final Map<String, Boolean> CHROME_37 = new LinkedHashMap<>();
public static final Map<String, Boolean> FIREFOX_21 = new LinkedHashMap<>();
public static final Map<String, Boolean> JAVA_8 = new LinkedHashMap<>();
public static final Map<String, Boolean> JAVA_7 = new LinkedHashMap<>();
public static final Map<String, Boolean> ANDROID_L = new LinkedHashMap<>();
public static final Map<String, Boolean> ANDROID_43 = new LinkedHashMap<>();
public static final Map<String, Boolean> ANDROID_44 = new LinkedHashMap<>();
public static final Map<String, Boolean> ANDROID_40 = new LinkedHashMap<>();
public static final Map<String, Boolean> ANDROID_23 = new LinkedHashMap<>();
static {
FIREFOX_21.put(toJava("EMPTY-RENEGOTIATION-INFO-SCSV"), true);
FIREFOX_21.put(toJava("ECDHE-ECDSA-AES256-SHA"), true);
FIREFOX_21.put(toJava("ECDHE-RSA-AES256-SHA"), true);
FIREFOX_21.put(toJava("DHE-RSA-CAMELLIA256-SHA"), true);
FIREFOX_21.put(toJava("DHE-DSS-CAMELLIA256-SHA"), true);
FIREFOX_21.put(toJava("DHE-RSA-AES256-SHA"), true);
FIREFOX_21.put(toJava("DHE-DSS-AES256-SHA"), true);
FIREFOX_21.put(toJava("ECDH-RSA-AES256-SHA"), true);
FIREFOX_21.put(toJava("ECDH-ECDSA-AES256-SHA"), true);
FIREFOX_21.put(toJava("RSA-CAMELLIA256-SHA"), true);
FIREFOX_21.put(toJava("RSA-AES256-SHA"), true);
FIREFOX_21.put(toJava("ECDHE-ECDSA-RC4128-SHA"), true);
FIREFOX_21.put(toJava("ECDHE-ECDSA-AES128-SHA"), true);
FIREFOX_21.put(toJava("ECDHE-RSA-RC4128-SHA"), true);
FIREFOX_21.put(toJava("ECDHE-RSA-AES128-SHA"), true);
FIREFOX_21.put(toJava("DHE-RSA-CAMELLIA128-SHA"), true);
FIREFOX_21.put(toJava("DHE-DSS-CAMELLIA128-SHA"), true);
FIREFOX_21.put(toJava("DHE-RSA-AES128-SHA"), true);
FIREFOX_21.put(toJava("DHE-DSS-AES128-SHA"), true);
FIREFOX_21.put(toJava("ECDH-RSA-RC4128-SHA"), true);
FIREFOX_21.put(toJava("ECDH-RSA-AES128-SHA"), true);
FIREFOX_21.put(toJava("ECDH-ECDSA-RC4128-SHA"), true);
FIREFOX_21.put(toJava("ECDH-ECDSA-AES128-SHA"), true);
FIREFOX_21.put(toJava("RSA-SEED-SHA"), true);
FIREFOX_21.put(toJava("RSA-CAMELLIA128-SHA"), true);
FIREFOX_21.put(toJava("RSA-RC4128-SHA"), true);
FIREFOX_21.put(toJava("RSA-RC4128-MD5"), true);
FIREFOX_21.put(toJava("RSA-AES128-SHA"), true);
FIREFOX_21.put(toJava("ECDHE-ECDSA-3DES-EDE-SHA"), true);
FIREFOX_21.put(toJava("ECDHE-RSA-3DES-EDE-SHA"), true);
FIREFOX_21.put(toJava("DHE-RSA-3DES-EDE-SHA"), true);
FIREFOX_21.put(toJava("DHE-DSS-3DES-EDE-SHA"), true);
FIREFOX_21.put(toJava("ECDH-RSA-3DES-EDE-SHA"), true);
FIREFOX_21.put(toJava("ECDH-ECDSA-3DES-EDE-SHA"), true);
FIREFOX_21.put(toJava("RSA-FIPS-3DES-EDE-SHA"), true);
FIREFOX_21.put(toJava("RSA-3DES-EDE-SHA"), true);
CHROME_37.put(toJava("ECDHE-ECDSA-AES128-GCM-SHA256"), true);
CHROME_37.put(toJava("ECDHE-RSA-AES128-GCM-SHA256"), true);
CHROME_37.put(toJava("DHE-RSA-AES128-GCM-SHA256"), true);
CHROME_37.put(toJava("ECDHE-ECDSA-CHACHA20-POLY1305-SHA256"), true);
CHROME_37.put(toJava("ECDHE-RSA-CHACHA20-POLY1305-SHA256"), true);
CHROME_37.put(toJava("ECDHE-ECDSA-AES256-SHA"), true);
CHROME_37.put(toJava("ECDHE-ECDSA-AES128-SHA"), true);
CHROME_37.put(toJava("ECDHE-RSA-AES128-SHA"), true);
CHROME_37.put(toJava("ECDHE-RSA-AES256-SHA"), true);
CHROME_37.put(toJava("ECDHE-ECDSA-RC4128-SHA"), true);
CHROME_37.put(toJava("ECDHE-RSA-RC4128-SHA"), true);
CHROME_37.put(toJava("DHE-RSA-AES128-SHA"), true);
CHROME_37.put(toJava("DHE-DSS-AES128-SHA"), true);
CHROME_37.put(toJava("DHE-RSA-AES256-SHA"), true);
CHROME_37.put(toJava("RSA-AES128-GCM-SHA256"), true);
CHROME_37.put(toJava("RSA-AES128-SHA"), true);
CHROME_37.put(toJava("RSA-AES256-SHA"), true);
CHROME_37.put(toJava("RSA-3DES-EDE-SHA"), true);
CHROME_37.put(toJava("RSA-RC4128-SHA"), true);
CHROME_37.put(toJava("RSA-RC4128-MD5"), true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", true);
JAVA_8.put("TLS_RSA_WITH_AES_256_CBC_SHA256", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", true);
JAVA_8.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", true);
JAVA_8.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_8.put("TLS_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_8.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_8.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", true);
JAVA_8.put("TLS_RSA_WITH_AES_128_CBC_SHA256", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", true);
JAVA_8.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", true);
JAVA_8.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_8.put("TLS_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_8.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_8.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", true);
JAVA_8.put("SSL_RSA_WITH_RC4_128_SHA", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_RC4_128_SHA", true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", true);
JAVA_8.put("TLS_RSA_WITH_AES_256_GCM_SHA384", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", true);
JAVA_8.put("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", true);
JAVA_8.put("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", true);
JAVA_8.put("TLS_RSA_WITH_AES_128_GCM_SHA256", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", true);
JAVA_8.put("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", true);
JAVA_8.put("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", true);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_8.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_8.put("SSL_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_8.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_8.put("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_8.put("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", true);
JAVA_8.put("SSL_RSA_WITH_RC4_128_MD5", true);
JAVA_8.put("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", true);
JAVA_8.put("TLS_DH_anon_WITH_AES_256_GCM_SHA384", false);
JAVA_8.put("TLS_DH_anon_WITH_AES_128_GCM_SHA256", false);
JAVA_8.put("TLS_DH_anon_WITH_AES_256_CBC_SHA256", false);
JAVA_8.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", false);
JAVA_8.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", false);
JAVA_8.put("TLS_DH_anon_WITH_AES_128_CBC_SHA256", false);
JAVA_8.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", false);
JAVA_8.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", false);
JAVA_8.put("TLS_ECDH_anon_WITH_RC4_128_SHA", false);
JAVA_8.put("SSL_DH_anon_WITH_RC4_128_MD5", false);
JAVA_8.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", false);
JAVA_8.put("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", false);
JAVA_8.put("TLS_RSA_WITH_NULL_SHA256", false);
JAVA_8.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", false);
JAVA_8.put("TLS_ECDHE_RSA_WITH_NULL_SHA", false);
JAVA_8.put("SSL_RSA_WITH_NULL_SHA", false);
JAVA_8.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", false);
JAVA_8.put("TLS_ECDH_RSA_WITH_NULL_SHA", false);
JAVA_8.put("TLS_ECDH_anon_WITH_NULL_SHA", false);
JAVA_8.put("SSL_RSA_WITH_NULL_MD5", false);
JAVA_8.put("SSL_RSA_WITH_DES_CBC_SHA", false);
JAVA_8.put("SSL_DHE_RSA_WITH_DES_CBC_SHA", false);
JAVA_8.put("SSL_DHE_DSS_WITH_DES_CBC_SHA", false);
JAVA_8.put("SSL_DH_anon_WITH_DES_CBC_SHA", false);
JAVA_8.put("SSL_RSA_EXPORT_WITH_RC4_40_MD5", false);
JAVA_8.put("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", false);
JAVA_8.put("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_8.put("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_8.put("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_8.put("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_8.put("TLS_KRB5_WITH_RC4_128_SHA", false);
JAVA_8.put("TLS_KRB5_WITH_RC4_128_MD5", false);
JAVA_8.put("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", false);
JAVA_8.put("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", false);
JAVA_8.put("TLS_KRB5_WITH_DES_CBC_SHA", false);
JAVA_8.put("TLS_KRB5_WITH_DES_CBC_MD5", false);
JAVA_8.put("TLS_KRB5_EXPORT_WITH_RC4_40_SHA", false);
JAVA_8.put("TLS_KRB5_EXPORT_WITH_RC4_40_MD5", false);
JAVA_8.put("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", false);
JAVA_8.put("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", false);
JAVA_7.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", false);
JAVA_7.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", false);
JAVA_7.put("TLS_RSA_WITH_AES_256_CBC_SHA256", false);
JAVA_7.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", false);
JAVA_7.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", false);
JAVA_7.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", false);
JAVA_7.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", false);
JAVA_7.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", true);
JAVA_7.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_7.put("TLS_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_7.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", true);
JAVA_7.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_7.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", true);
JAVA_7.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", true);
JAVA_7.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_RSA_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", true);
JAVA_7.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_7.put("TLS_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_7.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", true);
JAVA_7.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_7.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", true);
JAVA_7.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", true);
JAVA_7.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", true);
JAVA_7.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", true);
JAVA_7.put("SSL_RSA_WITH_RC4_128_SHA", true);
JAVA_7.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", true);
JAVA_7.put("TLS_ECDH_RSA_WITH_RC4_128_SHA", true);
JAVA_7.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_7.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_7.put("SSL_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_7.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_7.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_7.put("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
JAVA_7.put("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", true);
JAVA_7.put("SSL_RSA_WITH_RC4_128_MD5", true);
JAVA_7.put("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", true);
JAVA_7.put("TLS_DH_anon_WITH_AES_256_CBC_SHA256", false);
JAVA_7.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", false);
JAVA_7.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", false);
JAVA_7.put("TLS_DH_anon_WITH_AES_128_CBC_SHA256", false);
JAVA_7.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", false);
JAVA_7.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", false);
JAVA_7.put("TLS_ECDH_anon_WITH_RC4_128_SHA", false);
JAVA_7.put("SSL_DH_anon_WITH_RC4_128_MD5", false);
JAVA_7.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", false);
JAVA_7.put("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", false);
JAVA_7.put("TLS_RSA_WITH_NULL_SHA256", false);
JAVA_7.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", false);
JAVA_7.put("TLS_ECDHE_RSA_WITH_NULL_SHA", false);
JAVA_7.put("SSL_RSA_WITH_NULL_SHA", false);
JAVA_7.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", false);
JAVA_7.put("TLS_ECDH_RSA_WITH_NULL_SHA", false);
JAVA_7.put("TLS_ECDH_anon_WITH_NULL_SHA", false);
JAVA_7.put("SSL_RSA_WITH_NULL_MD5", false);
JAVA_7.put("SSL_RSA_WITH_DES_CBC_SHA", false);
JAVA_7.put("SSL_DHE_RSA_WITH_DES_CBC_SHA", false);
JAVA_7.put("SSL_DHE_DSS_WITH_DES_CBC_SHA", false);
JAVA_7.put("SSL_DH_anon_WITH_DES_CBC_SHA", false);
JAVA_7.put("SSL_RSA_EXPORT_WITH_RC4_40_MD5", false);
JAVA_7.put("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", false);
JAVA_7.put("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_7.put("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_7.put("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_7.put("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", false);
JAVA_7.put("TLS_KRB5_WITH_RC4_128_SHA", false);
JAVA_7.put("TLS_KRB5_WITH_RC4_128_MD5", false);
JAVA_7.put("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", false);
JAVA_7.put("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", false);
JAVA_7.put("TLS_KRB5_WITH_DES_CBC_SHA", false);
JAVA_7.put("TLS_KRB5_WITH_DES_CBC_MD5", false);
JAVA_7.put("TLS_KRB5_EXPORT_WITH_RC4_40_SHA", false);
JAVA_7.put("TLS_KRB5_EXPORT_WITH_RC4_40_MD5", false);
JAVA_7.put("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", false);
JAVA_7.put("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", false);
ANDROID_L.put("SSL_RSA_WITH_RC4_128_MD5", false);
ANDROID_L.put("SSL_RSA_WITH_RC4_128_SHA", true);
ANDROID_L.put("TLS_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_L.put("TLS_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_RC4_128_SHA", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", false);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", true);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", true);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", true);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", true);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_L.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_L.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_L.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", true);
ANDROID_L.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", true);
// TLS_RSA_WITH_3DES_EDE_CBC_SHA
ANDROID_L.put("SSL_RSA_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("SSL_RSA_WITH_DES_CBC_SHA", false);
ANDROID_L.put("SSL_DHE_RSA_WITH_DES_CBC_SHA", false);
ANDROID_L.put("SSL_DHE_DSS_WITH_DES_CBC_SHA", false);
ANDROID_L.put("SSL_RSA_EXPORT_WITH_RC4_40_MD5", false);
ANDROID_L.put("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", false);
ANDROID_L.put("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", false);
ANDROID_L.put("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", false);
ANDROID_L.put("SSL_RSA_WITH_NULL_MD5", false);
ANDROID_L.put("SSL_RSA_WITH_NULL_SHA", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_NULL_SHA", false);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", false);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_NULL_SHA", false);
ANDROID_L.put("SSL_DH_anon_WITH_RC4_128_MD5", false);
ANDROID_L.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_L.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_L.put("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("SSL_DH_anon_WITH_DES_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_anon_WITH_RC4_128_SHA", false);
ANDROID_L.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_L.put("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", false);
ANDROID_L.put("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", false);
ANDROID_L.put("TLS_ECDH_anon_WITH_NULL_SHA", false);
ANDROID_L.put("TLS_RSA_WITH_NULL_SHA256", false);
ANDROID_L.put("TLS_RSA_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_RSA_WITH_AES_256_CBC_SHA256", false);
ANDROID_L.put("TLS_RSA_WITH_AES_128_GCM_SHA256", true);
ANDROID_L.put("TLS_RSA_WITH_AES_256_GCM_SHA384", true);
ANDROID_L.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", false);
ANDROID_L.put("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", true);
ANDROID_L.put("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", true);
ANDROID_L.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", false);
ANDROID_L.put("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", false);
ANDROID_L.put("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", false);
ANDROID_L.put("TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", false);
ANDROID_L.put("TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", false);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", false);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", true);
ANDROID_L.put("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", true);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", false);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", true);
ANDROID_L.put("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", true);
ANDROID_L.put("TLS_DH_anon_WITH_AES_128_CBC_SHA256", false);
ANDROID_L.put("TLS_DH_anon_WITH_AES_256_CBC_SHA256", false);
ANDROID_L.put("TLS_DH_anon_WITH_AES_128_GCM_SHA256", false);
ANDROID_L.put("TLS_DH_anon_WITH_AES_256_GCM_SHA384", false);
ANDROID_L.put("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", true);
ANDROID_43.put("SSL_RSA_WITH_RC4_128_MD5", true);
ANDROID_43.put("SSL_RSA_WITH_RC4_128_SHA", true);
ANDROID_43.put("TLS_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_43.put("TLS_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_43.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", true);
ANDROID_43.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", true);
ANDROID_43.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", true);
ANDROID_43.put("TLS_ECDH_RSA_WITH_RC4_128_SHA", true);
ANDROID_43.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_43.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_43.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", true);
ANDROID_43.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", true);
ANDROID_43.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", true);
ANDROID_43.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", true);
ANDROID_43.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_43.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_43.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_43.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_43.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", true);
ANDROID_43.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", true);
ANDROID_43.put("SSL_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_43.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_43.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_43.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_43.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_43.put("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_43.put("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_43.put("SSL_RSA_WITH_DES_CBC_SHA", true);
ANDROID_43.put("SSL_DHE_RSA_WITH_DES_CBC_SHA", true);
ANDROID_43.put("SSL_DHE_DSS_WITH_DES_CBC_SHA", true);
ANDROID_43.put("SSL_RSA_EXPORT_WITH_RC4_40_MD5", true);
ANDROID_43.put("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_43.put("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_43.put("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_43.put("SSL_RSA_WITH_NULL_MD5", false);
ANDROID_43.put("SSL_RSA_WITH_NULL_SHA", false);
ANDROID_43.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", false);
ANDROID_43.put("TLS_ECDH_RSA_WITH_NULL_SHA", false);
ANDROID_43.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", false);
ANDROID_43.put("TLS_ECDHE_RSA_WITH_NULL_SHA", false);
ANDROID_43.put("SSL_DH_anon_WITH_RC4_128_MD5", false);
ANDROID_43.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_43.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_43.put("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_43.put("SSL_DH_anon_WITH_DES_CBC_SHA", false);
ANDROID_43.put("TLS_ECDH_anon_WITH_RC4_128_SHA", false);
ANDROID_43.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_43.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_43.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_43.put("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", false);
ANDROID_43.put("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", false);
ANDROID_43.put("TLS_ECDH_anon_WITH_NULL_SHA", false);
ANDROID_43.put("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", true);
ANDROID_44.put("SSL_RSA_WITH_RC4_128_MD5", true);
ANDROID_44.put("SSL_RSA_WITH_RC4_128_SHA", true);
ANDROID_44.put("TLS_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_44.put("TLS_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_44.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", true);
ANDROID_44.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", true);
ANDROID_44.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", true);
ANDROID_44.put("TLS_ECDH_RSA_WITH_RC4_128_SHA", true);
ANDROID_44.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_44.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_44.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", true);
ANDROID_44.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", true);
ANDROID_44.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", true);
ANDROID_44.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", true);
ANDROID_44.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_44.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_44.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_44.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_44.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", true);
ANDROID_44.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", true);
ANDROID_44.put("SSL_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_44.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_44.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_44.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_44.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_44.put("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_44.put("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_44.put("SSL_RSA_WITH_DES_CBC_SHA", true);
ANDROID_44.put("SSL_DHE_RSA_WITH_DES_CBC_SHA", true);
ANDROID_44.put("SSL_DHE_DSS_WITH_DES_CBC_SHA", true);
ANDROID_44.put("SSL_RSA_EXPORT_WITH_RC4_40_MD5", true);
ANDROID_44.put("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_44.put("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_44.put("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_44.put("SSL_RSA_WITH_NULL_MD5", false);
ANDROID_44.put("SSL_RSA_WITH_NULL_SHA", false);
ANDROID_44.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", false);
ANDROID_44.put("TLS_ECDH_RSA_WITH_NULL_SHA", false);
ANDROID_44.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", false);
ANDROID_44.put("TLS_ECDHE_RSA_WITH_NULL_SHA", false);
ANDROID_44.put("SSL_DH_anon_WITH_RC4_128_MD5", false);
ANDROID_44.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_44.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_44.put("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_44.put("SSL_DH_anon_WITH_DES_CBC_SHA", false);
ANDROID_44.put("TLS_ECDH_anon_WITH_RC4_128_SHA", false);
ANDROID_44.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_44.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_44.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_44.put("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", false);
ANDROID_44.put("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", false);
ANDROID_44.put("TLS_ECDH_anon_WITH_NULL_SHA", false);
ANDROID_44.put("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", true);
ANDROID_40.put("SSL_RSA_WITH_RC4_128_MD5", true);
ANDROID_40.put("SSL_RSA_WITH_RC4_128_SHA", true);
ANDROID_40.put("TLS_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_40.put("TLS_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_40.put("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", true);
ANDROID_40.put("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", true);
ANDROID_40.put("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", true);
ANDROID_40.put("TLS_ECDH_RSA_WITH_RC4_128_SHA", true);
ANDROID_40.put("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_40.put("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_40.put("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", true);
ANDROID_40.put("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", true);
ANDROID_40.put("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", true);
ANDROID_40.put("TLS_ECDHE_RSA_WITH_RC4_128_SHA", true);
ANDROID_40.put("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_40.put("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_40.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_40.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", true);
ANDROID_40.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", true);
ANDROID_40.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", true);
ANDROID_40.put("SSL_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_40.put("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_40.put("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_40.put("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_40.put("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_40.put("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_40.put("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_40.put("SSL_RSA_WITH_DES_CBC_SHA", true);
ANDROID_40.put("SSL_DHE_RSA_WITH_DES_CBC_SHA", true);
ANDROID_40.put("SSL_DHE_DSS_WITH_DES_CBC_SHA", true);
ANDROID_40.put("SSL_RSA_EXPORT_WITH_RC4_40_MD5", true);
ANDROID_40.put("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_40.put("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_40.put("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_40.put("SSL_RSA_WITH_NULL_MD5", false);
ANDROID_40.put("SSL_RSA_WITH_NULL_SHA", false);
ANDROID_40.put("TLS_ECDH_ECDSA_WITH_NULL_SHA", false);
ANDROID_40.put("TLS_ECDH_RSA_WITH_NULL_SHA", false);
ANDROID_40.put("TLS_ECDHE_ECDSA_WITH_NULL_SHA", false);
ANDROID_40.put("TLS_ECDHE_RSA_WITH_NULL_SHA", false);
ANDROID_40.put("SSL_DH_anon_WITH_RC4_128_MD5", false);
ANDROID_40.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_40.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_40.put("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_40.put("SSL_DH_anon_WITH_DES_CBC_SHA", false);
ANDROID_40.put("TLS_ECDH_anon_WITH_RC4_128_SHA", false);
ANDROID_40.put("TLS_ECDH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_40.put("TLS_ECDH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_40.put("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_40.put("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", false);
ANDROID_40.put("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", false);
ANDROID_40.put("TLS_ECDH_anon_WITH_NULL_SHA", false);
ANDROID_40.put("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", true);
ANDROID_23.put("SSL_RSA_WITH_RC4_128_MD5", true);
ANDROID_23.put("SSL_RSA_WITH_RC4_128_SHA", true);
ANDROID_23.put("TLS_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_23.put("TLS_RSA_WITH_AES_256_CBC_SHA", false);
ANDROID_23.put("TLS_DHE_RSA_WITH_AES_128_CBC_SHA", true);
ANDROID_23.put("TLS_DHE_RSA_WITH_AES_256_CBC_SHA", false);
ANDROID_23.put("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", true);
ANDROID_23.put("TLS_DHE_DSS_WITH_AES_256_CBC_SHA", false);
ANDROID_23.put("SSL_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_23.put("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_23.put("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", true);
ANDROID_23.put("SSL_RSA_WITH_DES_CBC_SHA", true);
ANDROID_23.put("SSL_DHE_RSA_WITH_DES_CBC_SHA", true);
ANDROID_23.put("SSL_DHE_DSS_WITH_DES_CBC_SHA", true);
ANDROID_23.put("SSL_RSA_EXPORT_WITH_RC4_40_MD5", true);
ANDROID_23.put("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_23.put("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_23.put("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", true);
ANDROID_23.put("SSL_RSA_WITH_NULL_MD5", false);
ANDROID_23.put("SSL_RSA_WITH_NULL_SHA", false);
ANDROID_23.put("SSL_DH_anon_WITH_RC4_128_MD5", false);
ANDROID_23.put("TLS_DH_anon_WITH_AES_128_CBC_SHA", false);
ANDROID_23.put("TLS_DH_anon_WITH_AES_256_CBC_SHA", false);
ANDROID_23.put("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", false);
ANDROID_23.put("SSL_DH_anon_WITH_DES_CBC_SHA", false);
ANDROID_23.put("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", false);
ANDROID_23.put("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", false);
}
private static String toJava(String openSslName) {
String javaName = OPENSSL_TO_JAVA.get(openSslName);
if (javaName != null) {
return javaName;
} else {
System.out.println("NO JAVA NAME FOR " + openSslName);
return openSslName;
}
}
public static void main(String[] args) {
Map<String, Map<String, Boolean>> maps = new LinkedHashMap<>();
maps.put("Chrome 37", CHROME_37);
maps.put("Firefox 8", FIREFOX_21);
maps.put("Java 8", JAVA_8);
maps.put("Java 7", JAVA_7);
maps.put("Android L", ANDROID_L);
maps.put("Android 4.4", ANDROID_44);
maps.put("Android 4.3", ANDROID_43);
maps.put("Android 4.0", ANDROID_40);
maps.put("Android 2.3", ANDROID_23);
List<String> CIPHER_SUITES = Arrays.asList(
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", // ECDHE-ECDSA-AES128-GCM-SHA256
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", // ECDHE-RSA-AES128-GCM-SHA256
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", // DHE-RSA-AES128-GCM-SHA256
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", // ECDHE-ECDSA-AES256-SHA
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", // ECDHE-ECDSA-AES128-SHA
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", // ECDHE-RSA-AES128-SHA
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", // ECDHE-RSA-AES256-SHA
"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", // ECDHE-ECDSA-RC4-SHA
"TLS_ECDHE_RSA_WITH_RC4_128_SHA", // ECDHE-RSA-RC4-SHA
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA", // DHE-RSA-AES128-SHA
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA", // DHE-DSS-AES128-SHA
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA", // DHE-RSA-AES256-SHA
"TLS_RSA_WITH_AES_128_GCM_SHA256", // AES128-GCM-SHA256
"TLS_RSA_WITH_AES_128_CBC_SHA", // AES128-SHA
"TLS_RSA_WITH_AES_256_CBC_SHA", // AES256-SHA
"SSL_RSA_WITH_3DES_EDE_CBC_SHA", // DES-CBC3-SHA
"SSL_RSA_WITH_RC4_128_SHA", // RC4-SHA
"SSL_RSA_WITH_RC4_128_MD5" // RC4-MD5
);
for (String s : CIPHER_SUITES) {
System.out.println(s + " // " + JAVA_TO_OPENSSL.get(s));
}
Set<String> ciphers = new LinkedHashSet<>();
for (Map<String, ?> m : maps.values()) {
ciphers.addAll(m.keySet());
}
System.out.print("\t");
System.out.print("supported: □ enabled: ■\t");
for (Map.Entry<String, Map<String, Boolean>> map : maps.entrySet()) {
String platform = map.getKey();
System.out.print(platform + "\t");
}
System.out.println();
for (String cipher : ciphers) {
String version = NAME_TO_VERSION.get(cipher);
if (version == null && cipher.startsWith("SSL_")) {
version = NAME_TO_VERSION.get("TLS_" + cipher.substring(4));
}
if (version == null) version = "";
System.out.print(version + "\t");
System.out.print(cipher + "\t");
for (Map.Entry<String, Map<String, Boolean>> map : maps.entrySet()) {
Boolean b = map.getValue().get(cipher);
if (b == null) {
System.out.print("\t");
} else if (b) {
System.out.print("■\t");
} else {
System.out.print("□\t");
}
}
System.out.println();
}
System.out.println(ciphers.size());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment