1/*
2 * Various and sundry protocol constants. DON'T CHANGE THESE. These values
3 * are mostly defined by the SSL2, SSL3, or TLS protocol specifications.
4 * Cipher kinds and ciphersuites are part of the public API.
5 *
6 * This Source Code Form is subject to the terms of the Mozilla Public
7 * License, v. 2.0. If a copy of the MPL was not distributed with this
8 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
9
10#ifndef __sslproto_h_
11#define __sslproto_h_
12
13/* All versions less than 3_0 are treated as SSL version 2 */
14#define SSL_LIBRARY_VERSION_2			0x0002
15#define SSL_LIBRARY_VERSION_3_0			0x0300
16#define SSL_LIBRARY_VERSION_TLS_1_0		0x0301
17#define SSL_LIBRARY_VERSION_TLS_1_1		0x0302
18#define SSL_LIBRARY_VERSION_TLS_1_2		0x0303
19/* Note: this is the internal format, not the wire format */
20#define SSL_LIBRARY_VERSION_DTLS_1_0		0x0302
21
22/* deprecated old name */
23#define SSL_LIBRARY_VERSION_3_1_TLS SSL_LIBRARY_VERSION_TLS_1_0
24
25/* The DTLS version used in the spec */
26#define SSL_LIBRARY_VERSION_DTLS_1_0_WIRE       ((~0x0100) & 0xffff)
27
28/* Header lengths of some of the messages */
29#define SSL_HL_ERROR_HBYTES			3
30#define SSL_HL_CLIENT_HELLO_HBYTES		9
31#define SSL_HL_CLIENT_MASTER_KEY_HBYTES		10
32#define SSL_HL_CLIENT_FINISHED_HBYTES		1
33#define SSL_HL_SERVER_HELLO_HBYTES		11
34#define SSL_HL_SERVER_VERIFY_HBYTES		1
35#define SSL_HL_SERVER_FINISHED_HBYTES		1
36#define SSL_HL_REQUEST_CERTIFICATE_HBYTES	2
37#define SSL_HL_CLIENT_CERTIFICATE_HBYTES	6
38
39/* Security handshake protocol codes */
40#define SSL_MT_ERROR				0
41#define SSL_MT_CLIENT_HELLO			1
42#define SSL_MT_CLIENT_MASTER_KEY		2
43#define SSL_MT_CLIENT_FINISHED			3
44#define SSL_MT_SERVER_HELLO			4
45#define SSL_MT_SERVER_VERIFY			5
46#define SSL_MT_SERVER_FINISHED			6
47#define SSL_MT_REQUEST_CERTIFICATE		7
48#define SSL_MT_CLIENT_CERTIFICATE		8
49
50/* Certificate types */
51#define SSL_CT_X509_CERTIFICATE			0x01
52#if 0 /* XXX Not implemented yet */
53#define SSL_PKCS6_CERTIFICATE			0x02
54#endif
55#define SSL_AT_MD5_WITH_RSA_ENCRYPTION		0x01
56
57/* Error codes */
58#define SSL_PE_NO_CYPHERS			0x0001
59#define SSL_PE_NO_CERTIFICATE			0x0002
60#define SSL_PE_BAD_CERTIFICATE			0x0004
61#define SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE	0x0006
62
63/* Cypher kinds (not the spec version!) */
64#define SSL_CK_RC4_128_WITH_MD5			0x01
65#define SSL_CK_RC4_128_EXPORT40_WITH_MD5	0x02
66#define SSL_CK_RC2_128_CBC_WITH_MD5		0x03
67#define SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5	0x04
68#define SSL_CK_IDEA_128_CBC_WITH_MD5		0x05
69#define SSL_CK_DES_64_CBC_WITH_MD5		0x06
70#define SSL_CK_DES_192_EDE3_CBC_WITH_MD5	0x07
71
72/* Cipher enables.  These are used only for SSL_EnableCipher
73 * These values define the SSL2 suites, and do not colide with the
74 * SSL3 Cipher suites defined below.
75 */
76#define SSL_EN_RC4_128_WITH_MD5			0xFF01
77#define SSL_EN_RC4_128_EXPORT40_WITH_MD5	0xFF02
78#define SSL_EN_RC2_128_CBC_WITH_MD5		0xFF03
79#define SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5	0xFF04
80#define SSL_EN_IDEA_128_CBC_WITH_MD5		0xFF05
81#define SSL_EN_DES_64_CBC_WITH_MD5		0xFF06
82#define SSL_EN_DES_192_EDE3_CBC_WITH_MD5	0xFF07
83
84/* SSL v3 Cipher Suites */
85#define SSL_NULL_WITH_NULL_NULL			0x0000
86
87#define SSL_RSA_WITH_NULL_MD5			0x0001
88#define SSL_RSA_WITH_NULL_SHA			0x0002
89#define SSL_RSA_EXPORT_WITH_RC4_40_MD5		0x0003
90#define SSL_RSA_WITH_RC4_128_MD5		0x0004
91#define SSL_RSA_WITH_RC4_128_SHA		0x0005
92#define SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5	0x0006
93#define SSL_RSA_WITH_IDEA_CBC_SHA		0x0007
94#define SSL_RSA_EXPORT_WITH_DES40_CBC_SHA	0x0008
95#define SSL_RSA_WITH_DES_CBC_SHA		0x0009
96#define SSL_RSA_WITH_3DES_EDE_CBC_SHA		0x000a
97
98#define SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA	0x000b
99#define SSL_DH_DSS_WITH_DES_CBC_SHA		0x000c
100#define SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA	0x000d
101#define SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA	0x000e
102#define SSL_DH_RSA_WITH_DES_CBC_SHA		0x000f
103#define SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA	0x0010
104
105#define SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA	0x0011
106#define SSL_DHE_DSS_WITH_DES_CBC_SHA		0x0012
107#define SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA	0x0013
108#define SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA	0x0014
109#define SSL_DHE_RSA_WITH_DES_CBC_SHA		0x0015
110#define SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA	0x0016
111
112#define SSL_DH_ANON_EXPORT_WITH_RC4_40_MD5	0x0017
113#define SSL_DH_ANON_WITH_RC4_128_MD5		0x0018
114#define SSL_DH_ANON_EXPORT_WITH_DES40_CBC_SHA	0x0019
115#define SSL_DH_ANON_WITH_DES_CBC_SHA		0x001a
116#define SSL_DH_ANON_WITH_3DES_EDE_CBC_SHA	0x001b
117
118#define SSL_FORTEZZA_DMS_WITH_NULL_SHA		0x001c /* deprecated */
119#define SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA	0x001d /* deprecated */
120#define SSL_FORTEZZA_DMS_WITH_RC4_128_SHA	0x001e /* deprecated */
121
122/* New TLS cipher suites */
123#define TLS_RSA_WITH_AES_128_CBC_SHA      	0x002F
124#define TLS_DH_DSS_WITH_AES_128_CBC_SHA   	0x0030
125#define TLS_DH_RSA_WITH_AES_128_CBC_SHA   	0x0031
126#define TLS_DHE_DSS_WITH_AES_128_CBC_SHA  	0x0032
127#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA  	0x0033
128#define TLS_DH_ANON_WITH_AES_128_CBC_SHA  	0x0034
129
130#define TLS_RSA_WITH_AES_256_CBC_SHA      	0x0035
131#define TLS_DH_DSS_WITH_AES_256_CBC_SHA   	0x0036
132#define TLS_DH_RSA_WITH_AES_256_CBC_SHA   	0x0037
133#define TLS_DHE_DSS_WITH_AES_256_CBC_SHA  	0x0038
134#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA  	0x0039
135#define TLS_DH_ANON_WITH_AES_256_CBC_SHA  	0x003A
136#define TLS_RSA_WITH_NULL_SHA256		0x003B
137#define TLS_RSA_WITH_AES_128_CBC_SHA256  	0x003C
138#define TLS_RSA_WITH_AES_256_CBC_SHA256  	0x003D
139
140#define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA      	0x0041
141#define TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA   	0x0042
142#define TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA   	0x0043
143#define TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA  	0x0044
144#define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA  	0x0045
145#define TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA  	0x0046
146
147#define TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA     0x0062
148#define TLS_RSA_EXPORT1024_WITH_RC4_56_SHA      0x0064
149
150#define TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x0063
151#define TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA  0x0065
152#define TLS_DHE_DSS_WITH_RC4_128_SHA            0x0066
153#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256     0x0067
154#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256     0x006B
155
156#define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA      	0x0084
157#define TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA   	0x0085
158#define TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA   	0x0086
159#define TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA  	0x0087
160#define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA  	0x0088
161#define TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA  	0x0089
162
163#define TLS_RSA_WITH_SEED_CBC_SHA		0x0096
164
165#define TLS_RSA_WITH_AES_128_GCM_SHA256         0x009C
166#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256     0x009E
167#define TLS_DHE_DSS_WITH_AES_128_GCM_SHA256     0x00A2
168
169/* TLS "Signaling Cipher Suite Value" (SCSV). May be requested by client.
170 * Must NEVER be chosen by server.  SSL 3.0 server acknowledges by sending
171 * back an empty Renegotiation Info (RI) server hello extension.
172 */
173#define TLS_EMPTY_RENEGOTIATION_INFO_SCSV	0x00FF
174
175/* TLS_FALLBACK_SCSV is a signaling cipher suite value that indicates that a
176 * handshake is the result of TLS version fallback. This value is not IANA
177 * assigned. */
178#define TLS_FALLBACK_SCSV			0x5600
179
180/* Cipher Suite Values starting with 0xC000 are defined in informational
181 * RFCs.
182 */
183#define TLS_ECDH_ECDSA_WITH_NULL_SHA            0xC001
184#define TLS_ECDH_ECDSA_WITH_RC4_128_SHA         0xC002
185#define TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA    0xC003
186#define TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA     0xC004
187#define TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA     0xC005
188
189#define TLS_ECDHE_ECDSA_WITH_NULL_SHA           0xC006
190#define TLS_ECDHE_ECDSA_WITH_RC4_128_SHA        0xC007
191#define TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA   0xC008
192#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA    0xC009
193#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA    0xC00A
194
195#define TLS_ECDH_RSA_WITH_NULL_SHA              0xC00B
196#define TLS_ECDH_RSA_WITH_RC4_128_SHA           0xC00C
197#define TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA      0xC00D
198#define TLS_ECDH_RSA_WITH_AES_128_CBC_SHA       0xC00E
199#define TLS_ECDH_RSA_WITH_AES_256_CBC_SHA       0xC00F
200
201#define TLS_ECDHE_RSA_WITH_NULL_SHA             0xC010
202#define TLS_ECDHE_RSA_WITH_RC4_128_SHA          0xC011
203#define TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA     0xC012
204#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA      0xC013
205#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA      0xC014
206
207#define TLS_ECDH_anon_WITH_NULL_SHA             0xC015
208#define TLS_ECDH_anon_WITH_RC4_128_SHA          0xC016
209#define TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA     0xC017
210#define TLS_ECDH_anon_WITH_AES_128_CBC_SHA      0xC018
211#define TLS_ECDH_anon_WITH_AES_256_CBC_SHA      0xC019
212
213#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023
214#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256   0xC027
215
216#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B
217#define TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256  0xC02D
218#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256   0xC02F
219#define TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256    0xC031
220
221#define TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305	0xCC13
222#define TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305	0xCC14
223
224/* Netscape "experimental" cipher suites. */
225#define SSL_RSA_OLDFIPS_WITH_3DES_EDE_CBC_SHA	0xffe0
226#define SSL_RSA_OLDFIPS_WITH_DES_CBC_SHA	0xffe1
227
228/* New non-experimental openly spec'ed versions of those cipher suites. */
229#define SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA 	0xfeff
230#define SSL_RSA_FIPS_WITH_DES_CBC_SHA      	0xfefe
231
232/* DTLS-SRTP cipher suites from RFC 5764 */
233/* If you modify this, also modify MAX_DTLS_SRTP_CIPHER_SUITES in sslimpl.h */
234#define SRTP_AES128_CM_HMAC_SHA1_80		0x0001
235#define SRTP_AES128_CM_HMAC_SHA1_32		0x0002
236#define SRTP_NULL_HMAC_SHA1_80			0x0005
237#define SRTP_NULL_HMAC_SHA1_32			0x0006
238
239#endif /* __sslproto_h_ */
240