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 *
SSL_GetImplementedCiphers(void)143 SSL_GetImplementedCiphers(void)
144 {
145 return SSL_ImplementedCiphers;
146 }
147
148 PRUint16
SSL_GetNumImplementedCiphers(void)149 SSL_GetNumImplementedCiphers(void)
150 {
151 return SSL_NumImplementedCiphers;
152 }
153