1fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin/* 2fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * Copyright (C) 2014 The Android Open Source Project 3fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * 4fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * Licensed under the Apache License, Version 2.0 (the "License"); 5fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * you may not use this file except in compliance with the License. 6fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * You may obtain a copy of the License at 7fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * 8fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * http://www.apache.org/licenses/LICENSE-2.0 9fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * 10fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * Unless required by applicable law or agreed to in writing, software 11fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * distributed under the License is distributed on an "AS IS" BASIS, 12fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * See the License for the specific language governing permissions and 14fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * limitations under the License. 15fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin */ 16fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 17fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubinpackage libcore.tlswire.handshake; 18fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 19fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubinimport java.util.HashMap; 20fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubinimport java.util.Map; 21fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 22fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin/** 23fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin * {@code CipherSuite} enum from TLS 1.2 RFC 5246. 24fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin */ 25fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubinpublic class CipherSuite { 26fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin // The list of cipher suites below is based on IANA registry 27fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml 28fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin private static final CipherSuite[] CIPHER_SUITES = new CipherSuite[] { 29fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0000, "TLS_NULL_WITH_NULL_NULL"), 30b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0001, "TLS_RSA_WITH_NULL_MD5", "SSL_RSA_WITH_NULL_MD5"), 31b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0002, "TLS_RSA_WITH_NULL_SHA", "SSL_RSA_WITH_NULL_SHA"), 32b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0003, "TLS_RSA_EXPORT_WITH_RC4_40_MD5", "SSL_RSA_EXPORT_WITH_RC4_40_MD5"), 33b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0004, "TLS_RSA_WITH_RC4_128_MD5", "SSL_RSA_WITH_RC4_128_MD5"), 34b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0005, "TLS_RSA_WITH_RC4_128_SHA", "SSL_RSA_WITH_RC4_128_SHA"), 35fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0006, "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"), 36fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0007, "TLS_RSA_WITH_IDEA_CBC_SHA"), 37b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0008, "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", 38b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA"), 39b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0009, "TLS_RSA_WITH_DES_CBC_SHA", "SSL_RSA_WITH_DES_CBC_SHA"), 40b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x000a, "TLS_RSA_WITH_3DES_EDE_CBC_SHA", "SSL_RSA_WITH_3DES_EDE_CBC_SHA"), 41fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x000b, "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"), 42fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x000c, "TLS_DH_DSS_WITH_DES_CBC_SHA"), 43fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x000d, "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"), 44fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x000e, "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"), 45fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x000f, "TLS_DH_RSA_WITH_DES_CBC_SHA"), 46fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0010, "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"), 47b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0011, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", 48b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"), 49b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0012, "TLS_DHE_DSS_WITH_DES_CBC_SHA", "SSL_DHE_DSS_WITH_DES_CBC_SHA"), 50b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0013, "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", 51b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"), 52b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0014, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", 53b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"), 54b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0015, "TLS_DHE_RSA_WITH_DES_CBC_SHA", "SSL_DHE_RSA_WITH_DES_CBC_SHA"), 55b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0016, "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", 56b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA"), 57b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0017, "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5", 58b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5"), 59b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0018, "TLS_DH_anon_WITH_RC4_128_MD5", "SSL_DH_anon_WITH_RC4_128_MD5"), 60b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x0019, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA", 61b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA"), 62b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x001a, "TLS_DH_anon_WITH_DES_CBC_SHA", "SSL_DH_anon_WITH_DES_CBC_SHA"), 63b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin new CipherSuite(0x001b, "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA", 64b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA"), 65fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x001e, "TLS_KRB5_WITH_DES_CBC_SHA"), 66fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x001f, "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"), 67fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0020, "TLS_KRB5_WITH_RC4_128_SHA"), 68fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0021, "TLS_KRB5_WITH_IDEA_CBC_SHA"), 69fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0022, "TLS_KRB5_WITH_DES_CBC_MD5"), 70fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0023, "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"), 71fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0024, "TLS_KRB5_WITH_RC4_128_MD5"), 72fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0025, "TLS_KRB5_WITH_IDEA_CBC_MD5"), 73fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0026, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"), 74fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0027, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"), 75fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0028, "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"), 76fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0029, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"), 77fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x002a, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"), 78fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x002b, "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"), 79fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x002c, "TLS_PSK_WITH_NULL_SHA"), 80fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x002d, "TLS_DHE_PSK_WITH_NULL_SHA"), 81fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x002e, "TLS_RSA_PSK_WITH_NULL_SHA"), 82fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x002f, "TLS_RSA_WITH_AES_128_CBC_SHA"), 83fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0030, "TLS_DH_DSS_WITH_AES_128_CBC_SHA"), 84fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0031, "TLS_DH_RSA_WITH_AES_128_CBC_SHA"), 85fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0032, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"), 86fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"), 87fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0034, "TLS_DH_anon_WITH_AES_128_CBC_SHA"), 88fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA"), 89fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0036, "TLS_DH_DSS_WITH_AES_256_CBC_SHA"), 90fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0037, "TLS_DH_RSA_WITH_AES_256_CBC_SHA"), 91fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0038, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"), 92fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"), 93fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x003a, "TLS_DH_anon_WITH_AES_256_CBC_SHA"), 94fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x003b, "TLS_RSA_WITH_NULL_SHA256"), 95fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x003c, "TLS_RSA_WITH_AES_128_CBC_SHA256"), 96fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x003d, "TLS_RSA_WITH_AES_256_CBC_SHA256"), 97fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x003e, "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"), 98fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x003f, "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"), 99fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0040, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"), 100fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"), 101fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0042, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA"), 102fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0043, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA"), 103fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0044, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"), 104fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"), 105fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0046, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"), 106fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0060, "TLS_RSA_EXPORT1024_WITH_RC4_56_MD5"), 107fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0061, "TLS_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5"), 108fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0062, "TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA"), 109fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0063, "TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA"), 110fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0064, "TLS_RSA_EXPORT1024_WITH_RC4_56_SHA"), 111fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0065, "TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA"), 112fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0066, "TLS_DHE_DSS_WITH_RC4_128_SHA"), 113fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"), 114fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0068, "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"), 115fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0069, "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"), 116fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x006a, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"), 117fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x006b, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"), 118fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x006c, "TLS_DH_anon_WITH_AES_128_CBC_SHA256"), 119fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x006d, "TLS_DH_anon_WITH_AES_256_CBC_SHA256"), 120fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA"), 121fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0085, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA"), 122fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0086, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA"), 123fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0087, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"), 124fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"), 125fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0089, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"), 126fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x008a, "TLS_PSK_WITH_RC4_128_SHA"), 127fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x008b, "TLS_PSK_WITH_3DES_EDE_CBC_SHA"), 128fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x008c, "TLS_PSK_WITH_AES_128_CBC_SHA"), 129fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x008d, "TLS_PSK_WITH_AES_256_CBC_SHA"), 130fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x008e, "TLS_DHE_PSK_WITH_RC4_128_SHA"), 131fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x008f, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"), 132fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"), 133fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"), 134fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA"), 135fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"), 136fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"), 137fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"), 138fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0096, "TLS_RSA_WITH_SEED_CBC_SHA"), 139fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA"), 140fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA"), 141fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA"), 142fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x009a, "TLS_DHE_RSA_WITH_SEED_CBC_SHA"), 143fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x009b, "TLS_DH_anon_WITH_SEED_CBC_SHA"), 144fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x009c, "TLS_RSA_WITH_AES_128_GCM_SHA256"), 145fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x009d, "TLS_RSA_WITH_AES_256_GCM_SHA384"), 146fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x009e, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"), 147fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x009f, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"), 148fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"), 149fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"), 150fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"), 151fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"), 152fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"), 153fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"), 154fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256"), 155fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384"), 156fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a8, "TLS_PSK_WITH_AES_128_GCM_SHA256"), 157fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00a9, "TLS_PSK_WITH_AES_256_GCM_SHA384"), 158fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00aa, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"), 159fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00ab, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"), 160fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00ac, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"), 161fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00ad, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"), 162fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00ae, "TLS_PSK_WITH_AES_128_CBC_SHA256"), 163fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00af, "TLS_PSK_WITH_AES_256_CBC_SHA384"), 164fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b0, "TLS_PSK_WITH_NULL_SHA256"), 165fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b1, "TLS_PSK_WITH_NULL_SHA384"), 166fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"), 167fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"), 168fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b4, "TLS_DHE_PSK_WITH_NULL_SHA256"), 169fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b5, "TLS_DHE_PSK_WITH_NULL_SHA384"), 170fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"), 171fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"), 172fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b8, "TLS_RSA_PSK_WITH_NULL_SHA256"), 173fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00b9, "TLS_RSA_PSK_WITH_NULL_SHA384"), 174fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00ba, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"), 175fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00bb, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"), 176fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00bc, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"), 177fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00bd, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"), 178fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00be, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"), 179fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00bf, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"), 180fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00c0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"), 181fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00c1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"), 182fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00c2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"), 183fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00c3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"), 184fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00c4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"), 185fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00c5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"), 186fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x00ff, "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"), 187fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0x5600, "TLS_FALLBACK_SCSV"), 188fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc001, "TLS_ECDH_ECDSA_WITH_NULL_SHA"), 189fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"), 190fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"), 191fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"), 192fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"), 193fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA"), 194fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"), 195fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"), 196fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"), 197fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc00a, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"), 198fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc00b, "TLS_ECDH_RSA_WITH_NULL_SHA"), 199fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc00c, "TLS_ECDH_RSA_WITH_RC4_128_SHA"), 200fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc00d, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"), 201fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc00e, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"), 202fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc00f, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"), 203fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc010, "TLS_ECDHE_RSA_WITH_NULL_SHA"), 204fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA"), 205fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"), 206fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"), 207fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"), 208fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc015, "TLS_ECDH_anon_WITH_NULL_SHA"), 209fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc016, "TLS_ECDH_anon_WITH_RC4_128_SHA"), 210fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"), 211fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"), 212fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"), 213fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc01a, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"), 214fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc01b, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"), 215fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc01c, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"), 216fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc01d, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA"), 217fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc01e, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"), 218fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc01f, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"), 219fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA"), 220fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"), 221fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"), 222fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"), 223fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"), 224fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"), 225fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"), 226fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"), 227fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"), 228fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"), 229fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc02a, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"), 230fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc02b, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"), 231fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc02c, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"), 232fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc02d, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"), 233fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc02e, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"), 234fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc02f, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"), 235fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"), 236fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"), 237fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"), 238fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc033, "TLS_ECDHE_PSK_WITH_RC4_128_SHA"), 239fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc034, "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA"), 240fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA"), 241fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA"), 242fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256"), 243fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384"), 244fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc039, "TLS_ECDHE_PSK_WITH_NULL_SHA"), 245fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc03a, "TLS_ECDHE_PSK_WITH_NULL_SHA256"), 246fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc03b, "TLS_ECDHE_PSK_WITH_NULL_SHA384"), 247fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc03c, "TLS_RSA_WITH_ARIA_128_CBC_SHA256"), 248fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc03d, "TLS_RSA_WITH_ARIA_256_CBC_SHA384"), 249fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc03e, "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"), 250fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc03f, "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"), 251fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc040, "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"), 252fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc041, "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"), 253fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc042, "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256"), 254fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc043, "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384"), 255fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256"), 256fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384"), 257fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc046, "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"), 258fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc047, "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"), 259fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256"), 260fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384"), 261fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc04a, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"), 262fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc04b, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"), 263fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc04c, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256"), 264fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc04d, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384"), 265fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc04e, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"), 266fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc04f, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"), 267fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256"), 268fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384"), 269fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256"), 270fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384"), 271fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc054, "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"), 272fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc055, "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"), 273fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc056, "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256"), 274fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc057, "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384"), 275fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc058, "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"), 276fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc059, "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"), 277fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc05a, "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"), 278fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc05b, "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"), 279fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc05c, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256"), 280fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc05d, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384"), 281fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc05e, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"), 282fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc05f, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"), 283fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256"), 284fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384"), 285fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"), 286fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"), 287fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256"), 288fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384"), 289fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256"), 290fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384"), 291fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"), 292fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"), 293fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc06a, "TLS_PSK_WITH_ARIA_128_GCM_SHA256"), 294fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc06b, "TLS_PSK_WITH_ARIA_256_GCM_SHA384"), 295fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc06c, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256"), 296fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc06d, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384"), 297fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc06e, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"), 298fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc06f, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"), 299fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256"), 300fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384"), 301fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"), 302fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"), 303fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"), 304fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"), 305fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"), 306fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384"), 307fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"), 308fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"), 309fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc07a, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"), 310fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc07b, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"), 311fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc07c, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"), 312fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc07d, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"), 313fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc07e, "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"), 314fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc07f, "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"), 315fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc080, "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256"), 316fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc081, "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384"), 317fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc082, "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"), 318fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc083, "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"), 319fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc084, "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"), 320fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc085, "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"), 321fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"), 322fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"), 323fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"), 324fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"), 325fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc08a, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"), 326fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc08b, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"), 327fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc08c, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"), 328fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc08d, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"), 329fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc08e, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"), 330fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc08f, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"), 331fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256"), 332fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384"), 333fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"), 334fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"), 335fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"), 336fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"), 337fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"), 338fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"), 339fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"), 340fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"), 341fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc09a, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"), 342fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc09b, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"), 343fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc09c, "TLS_RSA_WITH_AES_128_CCM"), 344fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc09d, "TLS_RSA_WITH_AES_256_CCM"), 345fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc09e, "TLS_DHE_RSA_WITH_AES_128_CCM"), 346fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc09f, "TLS_DHE_RSA_WITH_AES_256_CCM"), 347fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a0, "TLS_RSA_WITH_AES_128_CCM_8"), 348fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a1, "TLS_RSA_WITH_AES_256_CCM_8"), 349fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a2, "TLS_DHE_RSA_WITH_AES_128_CCM_8"), 350fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a3, "TLS_DHE_RSA_WITH_AES_256_CCM_8"), 351fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a4, "TLS_PSK_WITH_AES_128_CCM"), 352fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a5, "TLS_PSK_WITH_AES_256_CCM"), 353fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a6, "TLS_DHE_PSK_WITH_AES_128_CCM"), 354fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a7, "TLS_DHE_PSK_WITH_AES_256_CCM"), 355fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a8, "TLS_PSK_WITH_AES_128_CCM_8"), 356fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0a9, "TLS_PSK_WITH_AES_256_CCM_8"), 357fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0aa, "TLS_PSK_DHE_WITH_AES_128_CCM_8"), 358fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0ab, "TLS_PSK_DHE_WITH_AES_256_CCM_8"), 359fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0ac, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM"), 360fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0ad, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM"), 361fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0ae, "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8"), 362fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin new CipherSuite(0xc0af, "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"), 363c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xcc13, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_OLD"), 364c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xcc14, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_OLD"), 365c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xcc15, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_OLD"), 366c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xcca8, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"), 367c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xcca9, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"), 368c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xccaa, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256"), 369c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xccab, "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256"), 370c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xccac, "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256"), 371c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xccad, "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256"), 372c5b7943bbef88dad93725fd8fa83263230156548Kenny Root new CipherSuite(0xccae, "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256"), 373fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin }; 374fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 375fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin private static final Map<Integer, CipherSuite> CODE_TO_CIPHER_SUITE; 376fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin private static final Map<String, CipherSuite> NAME_TO_CIPHER_SUITE; 377fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 378fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 379fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin static { 380fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin Map<Integer, CipherSuite> byCode = new HashMap<Integer, CipherSuite>(); 381fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin Map<String, CipherSuite> byName = new HashMap<String, CipherSuite>(); 382fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin for (CipherSuite cipherSuite : CIPHER_SUITES) { 383fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (byCode.put(cipherSuite.code, cipherSuite) != null) { 384fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin throw new RuntimeException( 385fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin "Cipher suite multiply defined: " + Integer.toHexString(cipherSuite.code)); 386fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 387b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin String name = cipherSuite.name; 388b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin if (byName.put(name, cipherSuite) != null) { 389fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin throw new RuntimeException( 390fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin "Cipher suite multiply defined: " + cipherSuite.name); 391fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 392b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin String androidName = cipherSuite.getAndroidName(); 393b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin if (!name.equals(androidName)) { 394b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin if (byName.put(androidName, cipherSuite) != null) { 395b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin throw new RuntimeException( 396b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin "Cipher suite multiply defined: " + cipherSuite.androidName); 397b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 398b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 399fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 400fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 401fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin CODE_TO_CIPHER_SUITE = byCode; 402fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin NAME_TO_CIPHER_SUITE = byName; 403fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 404fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 405fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public final int code; 406fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public final String name; 407b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin private final String androidName; 408fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 409fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin private CipherSuite(int code, String name) { 410fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin this.code = code; 411fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin this.name = name; 412b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin this.androidName = null; 413b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 414b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin 415b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin private CipherSuite(int code, String name, String androidName) { 416b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin this.code = code; 417b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin this.name = name; 418b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin this.androidName = androidName; 419fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 420fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 421fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public static CipherSuite valueOf(String name) { 422fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin CipherSuite result = NAME_TO_CIPHER_SUITE.get(name); 423fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (result != null) { 424fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return result; 425fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 426fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin throw new IllegalArgumentException("Unknown cipher suite: " + name); 427fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 428fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 429fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public static CipherSuite valueOf(int code) { 430fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin CipherSuite result = CODE_TO_CIPHER_SUITE.get(code); 431fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (result != null) { 432fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return result; 433fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 434fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return new CipherSuite(code, Integer.toHexString(code)); 435fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 436fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 437b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin public String getAndroidName() { 438b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin return (androidName != null) ? androidName : name; 439b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 440b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin 441fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin @Override 442fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public String toString() { 443fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return name; 444fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 445fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 446fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin @Override 447fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public int hashCode() { 448fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin final int prime = 31; 449fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin int result = 1; 450fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin result = prime * result + code; 451fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return result; 452fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 453fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin 454fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin @Override 455fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin public boolean equals(Object obj) { 456fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (this == obj) { 457fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return true; 458fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 459fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (obj == null) { 460fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return false; 461fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 462fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (getClass() != obj.getClass()) { 463fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return false; 464fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 465fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin CipherSuite other = (CipherSuite) obj; 466fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin if (code != other.code) { 467fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return false; 468fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 469fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin return true; 470fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin } 471fb30da617fb979e7ae98c5a22b926aa15c6f2502Alex Klyubin} 472