1 /* 2 * Table enumerating all implemented cipher suites 3 * Part of public API. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 8 9 #include "ssl.h" 10 #include "sslproto.h" 11 12 /* 13 * The ciphers are listed in the following order: 14 * - stronger ciphers before weaker ciphers 15 * - national ciphers before international ciphers 16 * - faster ciphers before slower ciphers 17 * 18 * National ciphers such as Camellia are listed before international ciphers 19 * such as AES and RC4 to allow servers that prefer Camellia to negotiate 20 * Camellia without having to disable AES and RC4, which are needed for 21 * interoperability with clients that don't yet implement Camellia. 22 * 23 * The ordering of cipher suites in this table must match the ordering in 24 * the cipherSuites table in ssl3con.c. 25 * 26 * If new ECC cipher suites are added, also update the ssl3CipherSuite arrays 27 * in ssl3ecc.c. 28 * 29 * Finally, update the ssl_V3_SUITES_IMPLEMENTED macro in sslimpl.h. 30 */ 31 const PRUint16 SSL_ImplementedCiphers[] = { 32 /* AES-GCM */ 33 #ifdef NSS_ENABLE_ECC 34 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, 35 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, 36 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 37 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 38 #endif /* NSS_ENABLE_ECC */ 39 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, 40 TLS_RSA_WITH_AES_128_GCM_SHA256, 41 42 /* 256-bit */ 43 #ifdef NSS_ENABLE_ECC 44 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 45 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 46 #endif /* NSS_ENABLE_ECC */ 47 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, 48 TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, 49 TLS_DHE_RSA_WITH_AES_256_CBC_SHA, 50 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, 51 TLS_DHE_DSS_WITH_AES_256_CBC_SHA, 52 #ifdef NSS_ENABLE_ECC 53 TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, 54 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 55 #endif /* NSS_ENABLE_ECC */ 56 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, 57 TLS_RSA_WITH_AES_256_CBC_SHA, 58 TLS_RSA_WITH_AES_256_CBC_SHA256, 59 60 /* 128-bit */ 61 #ifdef NSS_ENABLE_ECC 62 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 63 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 64 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 65 TLS_ECDHE_RSA_WITH_RC4_128_SHA, 66 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 67 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 68 #endif /* NSS_ENABLE_ECC */ 69 TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, 70 TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, 71 TLS_DHE_DSS_WITH_RC4_128_SHA, 72 TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 73 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, 74 TLS_DHE_DSS_WITH_AES_128_CBC_SHA, 75 #ifdef NSS_ENABLE_ECC 76 TLS_ECDH_RSA_WITH_RC4_128_SHA, 77 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, 78 TLS_ECDH_ECDSA_WITH_RC4_128_SHA, 79 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 80 #endif /* NSS_ENABLE_ECC */ 81 TLS_RSA_WITH_SEED_CBC_SHA, 82 TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, 83 SSL_RSA_WITH_RC4_128_SHA, 84 SSL_RSA_WITH_RC4_128_MD5, 85 TLS_RSA_WITH_AES_128_CBC_SHA, 86 TLS_RSA_WITH_AES_128_CBC_SHA256, 87 88 /* 112-bit 3DES */ 89 #ifdef NSS_ENABLE_ECC 90 TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, 91 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 92 #endif /* NSS_ENABLE_ECC */ 93 SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, 94 SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, 95 #ifdef NSS_ENABLE_ECC 96 TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, 97 TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, 98 #endif /* NSS_ENABLE_ECC */ 99 SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, 100 SSL_RSA_WITH_3DES_EDE_CBC_SHA, 101 102 /* 56-bit DES "domestic" cipher suites */ 103 SSL_DHE_RSA_WITH_DES_CBC_SHA, 104 SSL_DHE_DSS_WITH_DES_CBC_SHA, 105 SSL_RSA_FIPS_WITH_DES_CBC_SHA, 106 SSL_RSA_WITH_DES_CBC_SHA, 107 108 /* export ciphersuites with 1024-bit public key exchange keys */ 109 TLS_RSA_EXPORT1024_WITH_RC4_56_SHA, 110 TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA, 111 112 /* export ciphersuites with 512-bit public key exchange keys */ 113 SSL_RSA_EXPORT_WITH_RC4_40_MD5, 114 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, 115 116 /* ciphersuites with no encryption */ 117 #ifdef NSS_ENABLE_ECC 118 TLS_ECDHE_ECDSA_WITH_NULL_SHA, 119 TLS_ECDHE_RSA_WITH_NULL_SHA, 120 TLS_ECDH_RSA_WITH_NULL_SHA, 121 TLS_ECDH_ECDSA_WITH_NULL_SHA, 122 #endif /* NSS_ENABLE_ECC */ 123 SSL_RSA_WITH_NULL_SHA, 124 TLS_RSA_WITH_NULL_SHA256, 125 SSL_RSA_WITH_NULL_MD5, 126 127 /* SSL2 cipher suites. */ 128 SSL_EN_RC4_128_WITH_MD5, 129 SSL_EN_RC2_128_CBC_WITH_MD5, 130 SSL_EN_DES_192_EDE3_CBC_WITH_MD5, /* actually 112, not 192 */ 131 SSL_EN_DES_64_CBC_WITH_MD5, 132 SSL_EN_RC4_128_EXPORT40_WITH_MD5, 133 SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5, 134 135 0 136 137 }; 138 139 const PRUint16 SSL_NumImplementedCiphers = 140 (sizeof SSL_ImplementedCiphers) / (sizeof SSL_ImplementedCiphers[0]) - 1; 141 142 const PRUint16 * 143 SSL_GetImplementedCiphers(void) 144 { 145 return SSL_ImplementedCiphers; 146 } 147 148 PRUint16 149 SSL_GetNumImplementedCiphers(void) 150 { 151 return SSL_NumImplementedCiphers; 152 } 153