• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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