15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/ssl_cipher_suite_names.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 105e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 115e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/ssl_connection_status_flags.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Rather than storing the names of all the ciphersuites we eliminate the 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redundancy and break each cipher suite into a key exchange method, cipher 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and mac. For all the ciphersuites in the IANA registry, we extract each of 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// those components from the name, number them and pack the result into a 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 16-bit number thus: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (MSB to LSB) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// <3 bits> unused 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <5 bits> key exchange 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// <5 bits> cipher 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <3 bits> mac 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following tables were generated by ssl_cipher_suite_names_generate.go, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the same directory as this file. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CipherSuite { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 cipher_suite, encoded; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const struct CipherSuite kCipherSuites[] = { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {0x0, 0x0}, // TLS_NULL_WITH_NULL_NULL 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x1, 0x101}, // TLS_RSA_WITH_NULL_MD5 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x2, 0x102}, // TLS_RSA_WITH_NULL_SHA 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x3, 0x209}, // TLS_RSA_EXPORT_WITH_RC4_40_MD5 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x4, 0x111}, // TLS_RSA_WITH_RC4_128_MD5 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x5, 0x112}, // TLS_RSA_WITH_RC4_128_SHA 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x6, 0x219}, // TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x7, 0x122}, // TLS_RSA_WITH_IDEA_CBC_SHA 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x8, 0x22a}, // TLS_RSA_EXPORT_WITH_DES40_CBC_SHA 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x9, 0x132}, // TLS_RSA_WITH_DES_CBC_SHA 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xa, 0x13a}, // TLS_RSA_WITH_3DES_EDE_CBC_SHA 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xb, 0x32a}, // TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc, 0x432}, // TLS_DH_DSS_WITH_DES_CBC_SHA 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xd, 0x43a}, // TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xe, 0x52a}, // TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xf, 0x632}, // TLS_DH_RSA_WITH_DES_CBC_SHA 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x10, 0x63a}, // TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x11, 0x72a}, // TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x12, 0x832}, // TLS_DHE_DSS_WITH_DES_CBC_SHA 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x13, 0x83a}, // TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x14, 0x92a}, // TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x15, 0xa32}, // TLS_DHE_RSA_WITH_DES_CBC_SHA 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x16, 0xa3a}, // TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x17, 0xb09}, // TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x18, 0xc11}, // TLS_DH_anon_WITH_RC4_128_MD5 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x19, 0xb2a}, // TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x1a, 0xc32}, // TLS_DH_anon_WITH_DES_CBC_SHA 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x1b, 0xc3a}, // TLS_DH_anon_WITH_3DES_EDE_CBC_SHA 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x2f, 0x142}, // TLS_RSA_WITH_AES_128_CBC_SHA 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x30, 0x442}, // TLS_DH_DSS_WITH_AES_128_CBC_SHA 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x31, 0x642}, // TLS_DH_RSA_WITH_AES_128_CBC_SHA 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x32, 0x842}, // TLS_DHE_DSS_WITH_AES_128_CBC_SHA 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x33, 0xa42}, // TLS_DHE_RSA_WITH_AES_128_CBC_SHA 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x34, 0xc42}, // TLS_DH_anon_WITH_AES_128_CBC_SHA 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x35, 0x14a}, // TLS_RSA_WITH_AES_256_CBC_SHA 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x36, 0x44a}, // TLS_DH_DSS_WITH_AES_256_CBC_SHA 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x37, 0x64a}, // TLS_DH_RSA_WITH_AES_256_CBC_SHA 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x38, 0x84a}, // TLS_DHE_DSS_WITH_AES_256_CBC_SHA 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x39, 0xa4a}, // TLS_DHE_RSA_WITH_AES_256_CBC_SHA 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x3a, 0xc4a}, // TLS_DH_anon_WITH_AES_256_CBC_SHA 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x3b, 0x103}, // TLS_RSA_WITH_NULL_SHA256 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x3c, 0x143}, // TLS_RSA_WITH_AES_128_CBC_SHA256 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x3d, 0x14b}, // TLS_RSA_WITH_AES_256_CBC_SHA256 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x3e, 0x443}, // TLS_DH_DSS_WITH_AES_128_CBC_SHA256 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x3f, 0x643}, // TLS_DH_RSA_WITH_AES_128_CBC_SHA256 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x40, 0x843}, // TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x41, 0x152}, // TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x42, 0x452}, // TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x43, 0x652}, // TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x44, 0x852}, // TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x45, 0xa52}, // TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x46, 0xc52}, // TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x67, 0xa43}, // TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x68, 0x44b}, // TLS_DH_DSS_WITH_AES_256_CBC_SHA256 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x69, 0x64b}, // TLS_DH_RSA_WITH_AES_256_CBC_SHA256 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x6a, 0x84b}, // TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x6b, 0xa4b}, // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x6c, 0xc43}, // TLS_DH_anon_WITH_AES_128_CBC_SHA256 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x6d, 0xc4b}, // TLS_DH_anon_WITH_AES_256_CBC_SHA256 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x84, 0x15a}, // TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x85, 0x45a}, // TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x86, 0x65a}, // TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x87, 0x85a}, // TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x88, 0xa5a}, // TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x89, 0xc5a}, // TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x96, 0x162}, // TLS_RSA_WITH_SEED_CBC_SHA 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x97, 0x462}, // TLS_DH_DSS_WITH_SEED_CBC_SHA 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x98, 0x662}, // TLS_DH_RSA_WITH_SEED_CBC_SHA 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x99, 0x862}, // TLS_DHE_DSS_WITH_SEED_CBC_SHA 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x9a, 0xa62}, // TLS_DHE_RSA_WITH_SEED_CBC_SHA 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0x9b, 0xc62}, // TLS_DH_anon_WITH_SEED_CBC_SHA 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0x9c, 0x16f}, // TLS_RSA_WITH_AES_128_GCM_SHA256 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0x9d, 0x177}, // TLS_RSA_WITH_AES_256_GCM_SHA384 1067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0x9e, 0xa6f}, // TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0x9f, 0xa77}, // TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa0, 0x66f}, // TLS_DH_RSA_WITH_AES_128_GCM_SHA256 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa1, 0x677}, // TLS_DH_RSA_WITH_AES_256_GCM_SHA384 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa2, 0x86f}, // TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa3, 0x877}, // TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa4, 0x46f}, // TLS_DH_DSS_WITH_AES_128_GCM_SHA256 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa5, 0x477}, // TLS_DH_DSS_WITH_AES_256_GCM_SHA384 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa6, 0xc6f}, // TLS_DH_anon_WITH_AES_128_GCM_SHA256 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xa7, 0xc77}, // TLS_DH_anon_WITH_AES_256_GCM_SHA384 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xba, 0x153}, // TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xbb, 0x453}, // TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xbc, 0x653}, // TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xbd, 0x853}, // TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xbe, 0xa53}, // TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xbf, 0xc53}, // TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc0, 0x15b}, // TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc1, 0x45b}, // TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc2, 0x65b}, // TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc3, 0x85b}, // TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc4, 0xa5b}, // TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc5, 0xc5b}, // TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc001, 0xd02}, // TLS_ECDH_ECDSA_WITH_NULL_SHA 129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc002, 0xd12}, // TLS_ECDH_ECDSA_WITH_RC4_128_SHA 130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc003, 0xd3a}, // TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc004, 0xd42}, // TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc005, 0xd4a}, // TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc006, 0xe02}, // TLS_ECDHE_ECDSA_WITH_NULL_SHA 134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc007, 0xe12}, // TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc008, 0xe3a}, // TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc009, 0xe42}, // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc00a, 0xe4a}, // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc00b, 0xf02}, // TLS_ECDH_RSA_WITH_NULL_SHA 139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc00c, 0xf12}, // TLS_ECDH_RSA_WITH_RC4_128_SHA 140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc00d, 0xf3a}, // TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc00e, 0xf42}, // TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc00f, 0xf4a}, // TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc010, 0x1002}, // TLS_ECDHE_RSA_WITH_NULL_SHA 144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc011, 0x1012}, // TLS_ECDHE_RSA_WITH_RC4_128_SHA 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc012, 0x103a}, // TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc013, 0x1042}, // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc014, 0x104a}, // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc015, 0x1102}, // TLS_ECDH_anon_WITH_NULL_SHA 149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc016, 0x1112}, // TLS_ECDH_anon_WITH_RC4_128_SHA 150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc017, 0x113a}, // TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA 151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc018, 0x1142}, // TLS_ECDH_anon_WITH_AES_128_CBC_SHA 152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc019, 0x114a}, // TLS_ECDH_anon_WITH_AES_256_CBC_SHA 153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc023, 0xe43}, // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc024, 0xe4c}, // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc025, 0xd43}, // TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc026, 0xd4c}, // TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc027, 0x1043}, // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc028, 0x104c}, // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 159868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc029, 0xf43}, // TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc02a, 0xf4c}, // TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc02b, 0xe6f}, // TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc02c, 0xe77}, // TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc02d, 0xd6f}, // TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc02e, 0xd77}, // TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc02f, 0x106f}, // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc030, 0x1077}, // TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc031, 0xf6f}, // TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc032, 0xf77}, // TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 169868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc072, 0xe53}, // TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc073, 0xe5c}, // TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc074, 0xd53}, // TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc075, 0xd5c}, // TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc076, 0x1053}, // TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc077, 0x105c}, // TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {0xc078, 0xf53}, // TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc079, 0xf5c}, // TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc07a, 0x17f}, // TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc07b, 0x187}, // TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc07c, 0xa7f}, // TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc07d, 0xa87}, // TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc07e, 0x67f}, // TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc07f, 0x687}, // TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc080, 0x87f}, // TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc081, 0x887}, // TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc082, 0x47f}, // TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc083, 0x487}, // TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc084, 0xc7f}, // TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc085, 0xc87}, // TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc086, 0xe7f}, // TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc087, 0xe87}, // TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc088, 0xd7f}, // TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc089, 0xd87}, // TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc08a, 0x107f}, // TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc08b, 0x1087}, // TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc08c, 0xf7f}, // TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {0xc08d, 0xf87}, // TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const struct { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char name[15]; 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} kKeyExchangeNames[18] = { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"NULL"}, // 0 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"RSA"}, // 1 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"RSA_EXPORT"}, // 2 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DH_DSS_EXPORT"}, // 3 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DH_DSS"}, // 4 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DH_RSA_EXPORT"}, // 5 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DH_RSA"}, // 6 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DHE_DSS_EXPORT"}, // 7 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DHE_DSS"}, // 8 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DHE_RSA_EXPORT"}, // 9 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DHE_RSA"}, // 10 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DH_anon_EXPORT"}, // 11 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DH_anon"}, // 12 215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"ECDH_ECDSA"}, // 13 216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"ECDHE_ECDSA"}, // 14 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"ECDH_RSA"}, // 15 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"ECDHE_RSA"}, // 16 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"ECDH_anon"}, // 17 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const struct { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char name[17]; 224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} kCipherNames[17] = { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"NULL"}, // 0 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"RC4_40"}, // 1 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"RC4_128"}, // 2 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"RC2_CBC_40"}, // 3 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"IDEA_CBC"}, // 4 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DES40_CBC"}, // 5 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"DES_CBC"}, // 6 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"3DES_EDE_CBC"}, // 7 233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"AES_128_CBC"}, // 8 234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"AES_256_CBC"}, // 9 235868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"CAMELLIA_128_CBC"}, // 10 236868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"CAMELLIA_256_CBC"}, // 11 237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) {"SEED_CBC"}, // 12 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"AES_128_GCM"}, // 13 2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"AES_256_GCM"}, // 14 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"CAMELLIA_128_GCM"}, // 15 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"CAMELLIA_256_GCM"}, // 16 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const struct { 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) char name[7]; 2467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} kMacNames[5] = { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"NULL"}, // 0 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"MD5"}, // 1 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"SHA1"}, // 2 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"SHA256"}, // 3 2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"SHA384"}, // 4 2527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // 7 is reserved to indicate an AEAD cipher suite. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static const int kAEADMACValue = 7; 2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int CipherSuiteCmp(const void* ia, const void* ib) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CipherSuite* a = static_cast<const CipherSuite*>(ia); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CipherSuite* b = static_cast<const CipherSuite*>(ib); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (a->cipher_suite < b->cipher_suite) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (a->cipher_suite == b->cipher_suite) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SSLCipherSuiteToStrings(const char** key_exchange_str, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char** cipher_str, 2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const char** mac_str, 2757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool *is_aead, 2767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) uint16 cipher_suite) { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *key_exchange_str = *cipher_str = *mac_str = "???"; 2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) *is_aead = false; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct CipherSuite desired = {0}; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) desired.cipher_suite = cipher_suite; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* r = bsearch(&desired, kCipherSuites, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kCipherSuites), sizeof(kCipherSuites[0]), 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CipherSuiteCmp); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!r) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CipherSuite* cs = static_cast<CipherSuite*>(r); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const int key_exchange = cs->encoded >> 8; 293868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const int cipher = (cs->encoded >> 3) & 0x1f; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int mac = cs->encoded & 0x7; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *key_exchange_str = kKeyExchangeNames[key_exchange].name; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *cipher_str = kCipherNames[cipher].name; 2987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (mac == kAEADMACValue) { 2997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) *is_aead = true; 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) *mac_str = NULL; 3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) *mac_str = kMacNames[mac].name; 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SSLVersionToString(const char** name, int ssl_version) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (ssl_version) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SSL_CONNECTION_VERSION_SSL2: 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *name = "SSL 2.0"; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SSL_CONNECTION_VERSION_SSL3: 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *name = "SSL 3.0"; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SSL_CONNECTION_VERSION_TLS1: 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *name = "TLS 1.0"; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SSL_CONNECTION_VERSION_TLS1_1: 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *name = "TLS 1.1"; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SSL_CONNECTION_VERSION_TLS1_2: 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *name = "TLS 1.2"; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << ssl_version; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *name = "???"; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParseSSLCipherString(const std::string& cipher_string, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16* cipher_suite) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int value = 0; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cipher_string.size() == 6 && 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartsWithASCII(cipher_string, "0x", false /* case insensitive */) && 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::HexStringToInt(cipher_string, &value)) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *cipher_suite = static_cast<uint16>(value); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 343