motion-openssl 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +53 -0
  3. data/lib/OpenSSL/aes.h +149 -0
  4. data/lib/OpenSSL/asn1.h +1419 -0
  5. data/lib/OpenSSL/asn1_mac.h +579 -0
  6. data/lib/OpenSSL/asn1t.h +973 -0
  7. data/lib/OpenSSL/bio.h +879 -0
  8. data/lib/OpenSSL/blowfish.h +130 -0
  9. data/lib/OpenSSL/bn.h +939 -0
  10. data/lib/OpenSSL/buffer.h +125 -0
  11. data/lib/OpenSSL/camellia.h +132 -0
  12. data/lib/OpenSSL/cast.h +107 -0
  13. data/lib/OpenSSL/cmac.h +82 -0
  14. data/lib/OpenSSL/cms.h +555 -0
  15. data/lib/OpenSSL/comp.h +79 -0
  16. data/lib/OpenSSL/conf.h +267 -0
  17. data/lib/OpenSSL/conf_api.h +89 -0
  18. data/lib/OpenSSL/crypto.h +661 -0
  19. data/lib/OpenSSL/des.h +257 -0
  20. data/lib/OpenSSL/des_old.h +497 -0
  21. data/lib/OpenSSL/dh.h +392 -0
  22. data/lib/OpenSSL/dsa.h +332 -0
  23. data/lib/OpenSSL/dso.h +451 -0
  24. data/lib/OpenSSL/dtls1.h +272 -0
  25. data/lib/OpenSSL/e_os2.h +328 -0
  26. data/lib/OpenSSL/ebcdic.h +26 -0
  27. data/lib/OpenSSL/ec.h +1282 -0
  28. data/lib/OpenSSL/ecdh.h +134 -0
  29. data/lib/OpenSSL/ecdsa.h +335 -0
  30. data/lib/OpenSSL/engine.h +960 -0
  31. data/lib/OpenSSL/err.h +389 -0
  32. data/lib/OpenSSL/evp.h +1534 -0
  33. data/lib/OpenSSL/hmac.h +109 -0
  34. data/lib/OpenSSL/idea.h +105 -0
  35. data/lib/OpenSSL/krb5_asn.h +240 -0
  36. data/lib/OpenSSL/kssl.h +197 -0
  37. data/lib/OpenSSL/lhash.h +240 -0
  38. data/lib/OpenSSL/libcrypto-tvOS.a +0 -0
  39. data/lib/OpenSSL/libcrypto.a +0 -0
  40. data/lib/OpenSSL/libssl-tvOS.a +0 -0
  41. data/lib/OpenSSL/libssl.a +0 -0
  42. data/lib/OpenSSL/md4.h +119 -0
  43. data/lib/OpenSSL/md5.h +119 -0
  44. data/lib/OpenSSL/mdc2.h +94 -0
  45. data/lib/OpenSSL/modes.h +163 -0
  46. data/lib/OpenSSL/obj_mac.h +4194 -0
  47. data/lib/OpenSSL/objects.h +1143 -0
  48. data/lib/OpenSSL/ocsp.h +637 -0
  49. data/lib/OpenSSL/opensslconf.h +262 -0
  50. data/lib/OpenSSL/opensslv.h +97 -0
  51. data/lib/OpenSSL/ossl_typ.h +211 -0
  52. data/lib/OpenSSL/pem.h +615 -0
  53. data/lib/OpenSSL/pem2.h +70 -0
  54. data/lib/OpenSSL/pkcs12.h +342 -0
  55. data/lib/OpenSSL/pkcs7.h +481 -0
  56. data/lib/OpenSSL/pqueue.h +99 -0
  57. data/lib/OpenSSL/rand.h +150 -0
  58. data/lib/OpenSSL/rc2.h +103 -0
  59. data/lib/OpenSSL/rc4.h +88 -0
  60. data/lib/OpenSSL/ripemd.h +105 -0
  61. data/lib/OpenSSL/rsa.h +664 -0
  62. data/lib/OpenSSL/safestack.h +2672 -0
  63. data/lib/OpenSSL/seed.h +149 -0
  64. data/lib/OpenSSL/sha.h +214 -0
  65. data/lib/OpenSSL/srp.h +169 -0
  66. data/lib/OpenSSL/srtp.h +147 -0
  67. data/lib/OpenSSL/ssl.h +3168 -0
  68. data/lib/OpenSSL/ssl2.h +265 -0
  69. data/lib/OpenSSL/ssl23.h +84 -0
  70. data/lib/OpenSSL/ssl3.h +774 -0
  71. data/lib/OpenSSL/stack.h +107 -0
  72. data/lib/OpenSSL/symhacks.h +516 -0
  73. data/lib/OpenSSL/tls1.h +810 -0
  74. data/lib/OpenSSL/ts.h +862 -0
  75. data/lib/OpenSSL/txt_db.h +112 -0
  76. data/lib/OpenSSL/ui.h +415 -0
  77. data/lib/OpenSSL/ui_compat.h +88 -0
  78. data/lib/OpenSSL/whrlpool.h +41 -0
  79. data/lib/OpenSSL/x509.h +1327 -0
  80. data/lib/OpenSSL/x509_vfy.h +647 -0
  81. data/lib/OpenSSL/x509v3.h +1055 -0
  82. data/lib/motion-openssl.rb +8 -0
  83. data/lib/motion-openssl/hooks.rb +8 -0
  84. data/lib/motion-openssl/hooks/openssl.rb +20 -0
  85. data/lib/motion-openssl/version.rb +5 -0
  86. data/motion/openssl.rb +1 -0
  87. data/motion/openssl/random.rb +18 -0
  88. metadata +229 -0
@@ -0,0 +1,265 @@
1
+ /* ssl/ssl2.h */
2
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
+ * All rights reserved.
4
+ *
5
+ * This package is an SSL implementation written
6
+ * by Eric Young (eay@cryptsoft.com).
7
+ * The implementation was written so as to conform with Netscapes SSL.
8
+ *
9
+ * This library is free for commercial and non-commercial use as long as
10
+ * the following conditions are aheared to. The following conditions
11
+ * apply to all code found in this distribution, be it the RC4, RSA,
12
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13
+ * included with this distribution is covered by the same copyright terms
14
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
+ *
16
+ * Copyright remains Eric Young's, and as such any Copyright notices in
17
+ * the code are not to be removed.
18
+ * If this package is used in a product, Eric Young should be given attribution
19
+ * as the author of the parts of the library used.
20
+ * This can be in the form of a textual message at program startup or
21
+ * in documentation (online or textual) provided with the package.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ * 1. Redistributions of source code must retain the copyright
27
+ * notice, this list of conditions and the following disclaimer.
28
+ * 2. Redistributions in binary form must reproduce the above copyright
29
+ * notice, this list of conditions and the following disclaimer in the
30
+ * documentation and/or other materials provided with the distribution.
31
+ * 3. All advertising materials mentioning features or use of this software
32
+ * must display the following acknowledgement:
33
+ * "This product includes cryptographic software written by
34
+ * Eric Young (eay@cryptsoft.com)"
35
+ * The word 'cryptographic' can be left out if the rouines from the library
36
+ * being used are not cryptographic related :-).
37
+ * 4. If you include any Windows specific code (or a derivative thereof) from
38
+ * the apps directory (application code) you must include an acknowledgement:
39
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
+ *
41
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
+ * SUCH DAMAGE.
52
+ *
53
+ * The licence and distribution terms for any publically available version or
54
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
55
+ * copied and put under another distribution licence
56
+ * [including the GNU Public Licence.]
57
+ */
58
+
59
+ #ifndef HEADER_SSL2_H
60
+ # define HEADER_SSL2_H
61
+
62
+ #ifdef __cplusplus
63
+ extern "C" {
64
+ #endif
65
+
66
+ /* Protocol Version Codes */
67
+ # define SSL2_VERSION 0x0002
68
+ # define SSL2_VERSION_MAJOR 0x00
69
+ # define SSL2_VERSION_MINOR 0x02
70
+ /* #define SSL2_CLIENT_VERSION 0x0002 */
71
+ /* #define SSL2_SERVER_VERSION 0x0002 */
72
+
73
+ /* Protocol Message Codes */
74
+ # define SSL2_MT_ERROR 0
75
+ # define SSL2_MT_CLIENT_HELLO 1
76
+ # define SSL2_MT_CLIENT_MASTER_KEY 2
77
+ # define SSL2_MT_CLIENT_FINISHED 3
78
+ # define SSL2_MT_SERVER_HELLO 4
79
+ # define SSL2_MT_SERVER_VERIFY 5
80
+ # define SSL2_MT_SERVER_FINISHED 6
81
+ # define SSL2_MT_REQUEST_CERTIFICATE 7
82
+ # define SSL2_MT_CLIENT_CERTIFICATE 8
83
+
84
+ /* Error Message Codes */
85
+ # define SSL2_PE_UNDEFINED_ERROR 0x0000
86
+ # define SSL2_PE_NO_CIPHER 0x0001
87
+ # define SSL2_PE_NO_CERTIFICATE 0x0002
88
+ # define SSL2_PE_BAD_CERTIFICATE 0x0004
89
+ # define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006
90
+
91
+ /* Cipher Kind Values */
92
+ # define SSL2_CK_NULL_WITH_MD5 0x02000000/* v3 */
93
+ # define SSL2_CK_RC4_128_WITH_MD5 0x02010080
94
+ # define SSL2_CK_RC4_128_EXPORT40_WITH_MD5 0x02020080
95
+ # define SSL2_CK_RC2_128_CBC_WITH_MD5 0x02030080
96
+ # define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x02040080
97
+ # define SSL2_CK_IDEA_128_CBC_WITH_MD5 0x02050080
98
+ # define SSL2_CK_DES_64_CBC_WITH_MD5 0x02060040
99
+ # define SSL2_CK_DES_64_CBC_WITH_SHA 0x02060140/* v3 */
100
+ # define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5 0x020700c0
101
+ # define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA 0x020701c0/* v3 */
102
+ # define SSL2_CK_RC4_64_WITH_MD5 0x02080080/* MS hack */
103
+
104
+ # define SSL2_CK_DES_64_CFB64_WITH_MD5_1 0x02ff0800/* SSLeay */
105
+ # define SSL2_CK_NULL 0x02ff0810/* SSLeay */
106
+
107
+ # define SSL2_TXT_DES_64_CFB64_WITH_MD5_1 "DES-CFB-M1"
108
+ # define SSL2_TXT_NULL_WITH_MD5 "NULL-MD5"
109
+ # define SSL2_TXT_RC4_128_WITH_MD5 "RC4-MD5"
110
+ # define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 "EXP-RC4-MD5"
111
+ # define SSL2_TXT_RC2_128_CBC_WITH_MD5 "RC2-CBC-MD5"
112
+ # define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5"
113
+ # define SSL2_TXT_IDEA_128_CBC_WITH_MD5 "IDEA-CBC-MD5"
114
+ # define SSL2_TXT_DES_64_CBC_WITH_MD5 "DES-CBC-MD5"
115
+ # define SSL2_TXT_DES_64_CBC_WITH_SHA "DES-CBC-SHA"
116
+ # define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 "DES-CBC3-MD5"
117
+ # define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA "DES-CBC3-SHA"
118
+ # define SSL2_TXT_RC4_64_WITH_MD5 "RC4-64-MD5"
119
+
120
+ # define SSL2_TXT_NULL "NULL"
121
+
122
+ /* Flags for the SSL_CIPHER.algorithm2 field */
123
+ # define SSL2_CF_5_BYTE_ENC 0x01
124
+ # define SSL2_CF_8_BYTE_ENC 0x02
125
+
126
+ /* Certificate Type Codes */
127
+ # define SSL2_CT_X509_CERTIFICATE 0x01
128
+
129
+ /* Authentication Type Code */
130
+ # define SSL2_AT_MD5_WITH_RSA_ENCRYPTION 0x01
131
+
132
+ # define SSL2_MAX_SSL_SESSION_ID_LENGTH 32
133
+
134
+ /* Upper/Lower Bounds */
135
+ # define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS 256
136
+ # ifdef OPENSSL_SYS_MPE
137
+ # define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 29998u
138
+ # else
139
+ # define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767u
140
+ /* 2^15-1 */
141
+ # endif
142
+ # define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383/* 2^14-1 */
143
+
144
+ # define SSL2_CHALLENGE_LENGTH 16
145
+ /*
146
+ * #define SSL2_CHALLENGE_LENGTH 32
147
+ */
148
+ # define SSL2_MIN_CHALLENGE_LENGTH 16
149
+ # define SSL2_MAX_CHALLENGE_LENGTH 32
150
+ # define SSL2_CONNECTION_ID_LENGTH 16
151
+ # define SSL2_MAX_CONNECTION_ID_LENGTH 16
152
+ # define SSL2_SSL_SESSION_ID_LENGTH 16
153
+ # define SSL2_MAX_CERT_CHALLENGE_LENGTH 32
154
+ # define SSL2_MIN_CERT_CHALLENGE_LENGTH 16
155
+ # define SSL2_MAX_KEY_MATERIAL_LENGTH 24
156
+
157
+ # ifndef HEADER_SSL_LOCL_H
158
+ # define CERT char
159
+ # endif
160
+
161
+ # ifndef OPENSSL_NO_SSL_INTERN
162
+
163
+ typedef struct ssl2_state_st {
164
+ int three_byte_header;
165
+ int clear_text; /* clear text */
166
+ int escape; /* not used in SSLv2 */
167
+ int ssl2_rollback; /* used if SSLv23 rolled back to SSLv2 */
168
+ /*
169
+ * non-blocking io info, used to make sure the same args were passwd
170
+ */
171
+ unsigned int wnum; /* number of bytes sent so far */
172
+ int wpend_tot;
173
+ const unsigned char *wpend_buf;
174
+ int wpend_off; /* offset to data to write */
175
+ int wpend_len; /* number of bytes passwd to write */
176
+ int wpend_ret; /* number of bytes to return to caller */
177
+ /* buffer raw data */
178
+ int rbuf_left;
179
+ int rbuf_offs;
180
+ unsigned char *rbuf;
181
+ unsigned char *wbuf;
182
+ unsigned char *write_ptr; /* used to point to the start due to 2/3 byte
183
+ * header. */
184
+ unsigned int padding;
185
+ unsigned int rlength; /* passed to ssl2_enc */
186
+ int ract_data_length; /* Set when things are encrypted. */
187
+ unsigned int wlength; /* passed to ssl2_enc */
188
+ int wact_data_length; /* Set when things are decrypted. */
189
+ unsigned char *ract_data;
190
+ unsigned char *wact_data;
191
+ unsigned char *mac_data;
192
+ unsigned char *read_key;
193
+ unsigned char *write_key;
194
+ /* Stuff specifically to do with this SSL session */
195
+ unsigned int challenge_length;
196
+ unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH];
197
+ unsigned int conn_id_length;
198
+ unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH];
199
+ unsigned int key_material_length;
200
+ unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH * 2];
201
+ unsigned long read_sequence;
202
+ unsigned long write_sequence;
203
+ struct {
204
+ unsigned int conn_id_length;
205
+ unsigned int cert_type;
206
+ unsigned int cert_length;
207
+ unsigned int csl;
208
+ unsigned int clear;
209
+ unsigned int enc;
210
+ unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH];
211
+ unsigned int cipher_spec_length;
212
+ unsigned int session_id_length;
213
+ unsigned int clen;
214
+ unsigned int rlen;
215
+ } tmp;
216
+ } SSL2_STATE;
217
+
218
+ # endif
219
+
220
+ /* SSLv2 */
221
+ /* client */
222
+ # define SSL2_ST_SEND_CLIENT_HELLO_A (0x10|SSL_ST_CONNECT)
223
+ # define SSL2_ST_SEND_CLIENT_HELLO_B (0x11|SSL_ST_CONNECT)
224
+ # define SSL2_ST_GET_SERVER_HELLO_A (0x20|SSL_ST_CONNECT)
225
+ # define SSL2_ST_GET_SERVER_HELLO_B (0x21|SSL_ST_CONNECT)
226
+ # define SSL2_ST_SEND_CLIENT_MASTER_KEY_A (0x30|SSL_ST_CONNECT)
227
+ # define SSL2_ST_SEND_CLIENT_MASTER_KEY_B (0x31|SSL_ST_CONNECT)
228
+ # define SSL2_ST_SEND_CLIENT_FINISHED_A (0x40|SSL_ST_CONNECT)
229
+ # define SSL2_ST_SEND_CLIENT_FINISHED_B (0x41|SSL_ST_CONNECT)
230
+ # define SSL2_ST_SEND_CLIENT_CERTIFICATE_A (0x50|SSL_ST_CONNECT)
231
+ # define SSL2_ST_SEND_CLIENT_CERTIFICATE_B (0x51|SSL_ST_CONNECT)
232
+ # define SSL2_ST_SEND_CLIENT_CERTIFICATE_C (0x52|SSL_ST_CONNECT)
233
+ # define SSL2_ST_SEND_CLIENT_CERTIFICATE_D (0x53|SSL_ST_CONNECT)
234
+ # define SSL2_ST_GET_SERVER_VERIFY_A (0x60|SSL_ST_CONNECT)
235
+ # define SSL2_ST_GET_SERVER_VERIFY_B (0x61|SSL_ST_CONNECT)
236
+ # define SSL2_ST_GET_SERVER_FINISHED_A (0x70|SSL_ST_CONNECT)
237
+ # define SSL2_ST_GET_SERVER_FINISHED_B (0x71|SSL_ST_CONNECT)
238
+ # define SSL2_ST_CLIENT_START_ENCRYPTION (0x80|SSL_ST_CONNECT)
239
+ # define SSL2_ST_X509_GET_CLIENT_CERTIFICATE (0x90|SSL_ST_CONNECT)
240
+ /* server */
241
+ # define SSL2_ST_GET_CLIENT_HELLO_A (0x10|SSL_ST_ACCEPT)
242
+ # define SSL2_ST_GET_CLIENT_HELLO_B (0x11|SSL_ST_ACCEPT)
243
+ # define SSL2_ST_GET_CLIENT_HELLO_C (0x12|SSL_ST_ACCEPT)
244
+ # define SSL2_ST_SEND_SERVER_HELLO_A (0x20|SSL_ST_ACCEPT)
245
+ # define SSL2_ST_SEND_SERVER_HELLO_B (0x21|SSL_ST_ACCEPT)
246
+ # define SSL2_ST_GET_CLIENT_MASTER_KEY_A (0x30|SSL_ST_ACCEPT)
247
+ # define SSL2_ST_GET_CLIENT_MASTER_KEY_B (0x31|SSL_ST_ACCEPT)
248
+ # define SSL2_ST_SEND_SERVER_VERIFY_A (0x40|SSL_ST_ACCEPT)
249
+ # define SSL2_ST_SEND_SERVER_VERIFY_B (0x41|SSL_ST_ACCEPT)
250
+ # define SSL2_ST_SEND_SERVER_VERIFY_C (0x42|SSL_ST_ACCEPT)
251
+ # define SSL2_ST_GET_CLIENT_FINISHED_A (0x50|SSL_ST_ACCEPT)
252
+ # define SSL2_ST_GET_CLIENT_FINISHED_B (0x51|SSL_ST_ACCEPT)
253
+ # define SSL2_ST_SEND_SERVER_FINISHED_A (0x60|SSL_ST_ACCEPT)
254
+ # define SSL2_ST_SEND_SERVER_FINISHED_B (0x61|SSL_ST_ACCEPT)
255
+ # define SSL2_ST_SEND_REQUEST_CERTIFICATE_A (0x70|SSL_ST_ACCEPT)
256
+ # define SSL2_ST_SEND_REQUEST_CERTIFICATE_B (0x71|SSL_ST_ACCEPT)
257
+ # define SSL2_ST_SEND_REQUEST_CERTIFICATE_C (0x72|SSL_ST_ACCEPT)
258
+ # define SSL2_ST_SEND_REQUEST_CERTIFICATE_D (0x73|SSL_ST_ACCEPT)
259
+ # define SSL2_ST_SERVER_START_ENCRYPTION (0x80|SSL_ST_ACCEPT)
260
+ # define SSL2_ST_X509_GET_SERVER_CERTIFICATE (0x90|SSL_ST_ACCEPT)
261
+
262
+ #ifdef __cplusplus
263
+ }
264
+ #endif
265
+ #endif
@@ -0,0 +1,84 @@
1
+ /* ssl/ssl23.h */
2
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
+ * All rights reserved.
4
+ *
5
+ * This package is an SSL implementation written
6
+ * by Eric Young (eay@cryptsoft.com).
7
+ * The implementation was written so as to conform with Netscapes SSL.
8
+ *
9
+ * This library is free for commercial and non-commercial use as long as
10
+ * the following conditions are aheared to. The following conditions
11
+ * apply to all code found in this distribution, be it the RC4, RSA,
12
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13
+ * included with this distribution is covered by the same copyright terms
14
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
+ *
16
+ * Copyright remains Eric Young's, and as such any Copyright notices in
17
+ * the code are not to be removed.
18
+ * If this package is used in a product, Eric Young should be given attribution
19
+ * as the author of the parts of the library used.
20
+ * This can be in the form of a textual message at program startup or
21
+ * in documentation (online or textual) provided with the package.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ * 1. Redistributions of source code must retain the copyright
27
+ * notice, this list of conditions and the following disclaimer.
28
+ * 2. Redistributions in binary form must reproduce the above copyright
29
+ * notice, this list of conditions and the following disclaimer in the
30
+ * documentation and/or other materials provided with the distribution.
31
+ * 3. All advertising materials mentioning features or use of this software
32
+ * must display the following acknowledgement:
33
+ * "This product includes cryptographic software written by
34
+ * Eric Young (eay@cryptsoft.com)"
35
+ * The word 'cryptographic' can be left out if the rouines from the library
36
+ * being used are not cryptographic related :-).
37
+ * 4. If you include any Windows specific code (or a derivative thereof) from
38
+ * the apps directory (application code) you must include an acknowledgement:
39
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
+ *
41
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
+ * SUCH DAMAGE.
52
+ *
53
+ * The licence and distribution terms for any publically available version or
54
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
55
+ * copied and put under another distribution licence
56
+ * [including the GNU Public Licence.]
57
+ */
58
+
59
+ #ifndef HEADER_SSL23_H
60
+ # define HEADER_SSL23_H
61
+
62
+ #ifdef __cplusplus
63
+ extern "C" {
64
+ #endif
65
+
66
+ /*
67
+ * client
68
+ */
69
+ /* write to server */
70
+ # define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT)
71
+ # define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT)
72
+ /* read from server */
73
+ # define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT)
74
+ # define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT)
75
+
76
+ /* server */
77
+ /* read from client */
78
+ # define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT)
79
+ # define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT)
80
+
81
+ #ifdef __cplusplus
82
+ }
83
+ #endif
84
+ #endif
@@ -0,0 +1,774 @@
1
+ /* ssl/ssl3.h */
2
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
+ * All rights reserved.
4
+ *
5
+ * This package is an SSL implementation written
6
+ * by Eric Young (eay@cryptsoft.com).
7
+ * The implementation was written so as to conform with Netscapes SSL.
8
+ *
9
+ * This library is free for commercial and non-commercial use as long as
10
+ * the following conditions are aheared to. The following conditions
11
+ * apply to all code found in this distribution, be it the RC4, RSA,
12
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13
+ * included with this distribution is covered by the same copyright terms
14
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
+ *
16
+ * Copyright remains Eric Young's, and as such any Copyright notices in
17
+ * the code are not to be removed.
18
+ * If this package is used in a product, Eric Young should be given attribution
19
+ * as the author of the parts of the library used.
20
+ * This can be in the form of a textual message at program startup or
21
+ * in documentation (online or textual) provided with the package.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ * 1. Redistributions of source code must retain the copyright
27
+ * notice, this list of conditions and the following disclaimer.
28
+ * 2. Redistributions in binary form must reproduce the above copyright
29
+ * notice, this list of conditions and the following disclaimer in the
30
+ * documentation and/or other materials provided with the distribution.
31
+ * 3. All advertising materials mentioning features or use of this software
32
+ * must display the following acknowledgement:
33
+ * "This product includes cryptographic software written by
34
+ * Eric Young (eay@cryptsoft.com)"
35
+ * The word 'cryptographic' can be left out if the rouines from the library
36
+ * being used are not cryptographic related :-).
37
+ * 4. If you include any Windows specific code (or a derivative thereof) from
38
+ * the apps directory (application code) you must include an acknowledgement:
39
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
+ *
41
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
+ * SUCH DAMAGE.
52
+ *
53
+ * The licence and distribution terms for any publically available version or
54
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
55
+ * copied and put under another distribution licence
56
+ * [including the GNU Public Licence.]
57
+ */
58
+ /* ====================================================================
59
+ * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
60
+ *
61
+ * Redistribution and use in source and binary forms, with or without
62
+ * modification, are permitted provided that the following conditions
63
+ * are met:
64
+ *
65
+ * 1. Redistributions of source code must retain the above copyright
66
+ * notice, this list of conditions and the following disclaimer.
67
+ *
68
+ * 2. Redistributions in binary form must reproduce the above copyright
69
+ * notice, this list of conditions and the following disclaimer in
70
+ * the documentation and/or other materials provided with the
71
+ * distribution.
72
+ *
73
+ * 3. All advertising materials mentioning features or use of this
74
+ * software must display the following acknowledgment:
75
+ * "This product includes software developed by the OpenSSL Project
76
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77
+ *
78
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79
+ * endorse or promote products derived from this software without
80
+ * prior written permission. For written permission, please contact
81
+ * openssl-core@openssl.org.
82
+ *
83
+ * 5. Products derived from this software may not be called "OpenSSL"
84
+ * nor may "OpenSSL" appear in their names without prior written
85
+ * permission of the OpenSSL Project.
86
+ *
87
+ * 6. Redistributions of any form whatsoever must retain the following
88
+ * acknowledgment:
89
+ * "This product includes software developed by the OpenSSL Project
90
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91
+ *
92
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
104
+ * ====================================================================
105
+ *
106
+ * This product includes cryptographic software written by Eric Young
107
+ * (eay@cryptsoft.com). This product includes software written by Tim
108
+ * Hudson (tjh@cryptsoft.com).
109
+ *
110
+ */
111
+ /* ====================================================================
112
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113
+ * ECC cipher suite support in OpenSSL originally developed by
114
+ * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
115
+ */
116
+
117
+ #ifndef HEADER_SSL3_H
118
+ # define HEADER_SSL3_H
119
+
120
+ # ifndef OPENSSL_NO_COMP
121
+ # include <openssl/comp.h>
122
+ # endif
123
+ # include <openssl/buffer.h>
124
+ # include <openssl/evp.h>
125
+ # include <openssl/ssl.h>
126
+
127
+ #ifdef __cplusplus
128
+ extern "C" {
129
+ #endif
130
+
131
+ /*
132
+ * Signalling cipher suite value from RFC 5746
133
+ * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV)
134
+ */
135
+ # define SSL3_CK_SCSV 0x030000FF
136
+
137
+ /*
138
+ * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00
139
+ * (TLS_FALLBACK_SCSV)
140
+ */
141
+ # define SSL3_CK_FALLBACK_SCSV 0x03005600
142
+
143
+ # define SSL3_CK_RSA_NULL_MD5 0x03000001
144
+ # define SSL3_CK_RSA_NULL_SHA 0x03000002
145
+ # define SSL3_CK_RSA_RC4_40_MD5 0x03000003
146
+ # define SSL3_CK_RSA_RC4_128_MD5 0x03000004
147
+ # define SSL3_CK_RSA_RC4_128_SHA 0x03000005
148
+ # define SSL3_CK_RSA_RC2_40_MD5 0x03000006
149
+ # define SSL3_CK_RSA_IDEA_128_SHA 0x03000007
150
+ # define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008
151
+ # define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009
152
+ # define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A
153
+
154
+ # define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B
155
+ # define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C
156
+ # define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D
157
+ # define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E
158
+ # define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F
159
+ # define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010
160
+
161
+ # define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011
162
+ # define SSL3_CK_DHE_DSS_DES_40_CBC_SHA SSL3_CK_EDH_DSS_DES_40_CBC_SHA
163
+ # define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012
164
+ # define SSL3_CK_DHE_DSS_DES_64_CBC_SHA SSL3_CK_EDH_DSS_DES_64_CBC_SHA
165
+ # define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013
166
+ # define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA SSL3_CK_EDH_DSS_DES_192_CBC3_SHA
167
+ # define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014
168
+ # define SSL3_CK_DHE_RSA_DES_40_CBC_SHA SSL3_CK_EDH_RSA_DES_40_CBC_SHA
169
+ # define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015
170
+ # define SSL3_CK_DHE_RSA_DES_64_CBC_SHA SSL3_CK_EDH_RSA_DES_64_CBC_SHA
171
+ # define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016
172
+ # define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA SSL3_CK_EDH_RSA_DES_192_CBC3_SHA
173
+
174
+ # define SSL3_CK_ADH_RC4_40_MD5 0x03000017
175
+ # define SSL3_CK_ADH_RC4_128_MD5 0x03000018
176
+ # define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019
177
+ # define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A
178
+ # define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B
179
+
180
+ # if 0
181
+ # define SSL3_CK_FZA_DMS_NULL_SHA 0x0300001C
182
+ # define SSL3_CK_FZA_DMS_FZA_SHA 0x0300001D
183
+ # if 0 /* Because it clashes with KRB5, is never
184
+ * used any more, and is safe to remove
185
+ * according to David Hopwood
186
+ * <david.hopwood@zetnet.co.uk> of the
187
+ * ietf-tls list */
188
+ # define SSL3_CK_FZA_DMS_RC4_SHA 0x0300001E
189
+ # endif
190
+ # endif
191
+
192
+ /*
193
+ * VRS Additional Kerberos5 entries
194
+ */
195
+ # define SSL3_CK_KRB5_DES_64_CBC_SHA 0x0300001E
196
+ # define SSL3_CK_KRB5_DES_192_CBC3_SHA 0x0300001F
197
+ # define SSL3_CK_KRB5_RC4_128_SHA 0x03000020
198
+ # define SSL3_CK_KRB5_IDEA_128_CBC_SHA 0x03000021
199
+ # define SSL3_CK_KRB5_DES_64_CBC_MD5 0x03000022
200
+ # define SSL3_CK_KRB5_DES_192_CBC3_MD5 0x03000023
201
+ # define SSL3_CK_KRB5_RC4_128_MD5 0x03000024
202
+ # define SSL3_CK_KRB5_IDEA_128_CBC_MD5 0x03000025
203
+
204
+ # define SSL3_CK_KRB5_DES_40_CBC_SHA 0x03000026
205
+ # define SSL3_CK_KRB5_RC2_40_CBC_SHA 0x03000027
206
+ # define SSL3_CK_KRB5_RC4_40_SHA 0x03000028
207
+ # define SSL3_CK_KRB5_DES_40_CBC_MD5 0x03000029
208
+ # define SSL3_CK_KRB5_RC2_40_CBC_MD5 0x0300002A
209
+ # define SSL3_CK_KRB5_RC4_40_MD5 0x0300002B
210
+
211
+ # define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5"
212
+ # define SSL3_TXT_RSA_NULL_SHA "NULL-SHA"
213
+ # define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5"
214
+ # define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5"
215
+ # define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA"
216
+ # define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5"
217
+ # define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA"
218
+ # define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA"
219
+ # define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA"
220
+ # define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA"
221
+
222
+ # define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA"
223
+ # define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA"
224
+ # define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA"
225
+ # define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA"
226
+ # define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA"
227
+ # define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA"
228
+
229
+ # define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA"
230
+ # define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA"
231
+ # define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA"
232
+ # define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA"
233
+ # define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA"
234
+ # define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA"
235
+
236
+ /*
237
+ * This next block of six "EDH" labels is for backward compatibility with
238
+ * older versions of OpenSSL. New code should use the six "DHE" labels above
239
+ * instead:
240
+ */
241
+ # define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA"
242
+ # define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA"
243
+ # define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA"
244
+ # define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA"
245
+ # define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA"
246
+ # define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA"
247
+
248
+ # define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5"
249
+ # define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5"
250
+ # define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA"
251
+ # define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA"
252
+ # define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA"
253
+
254
+ # if 0
255
+ # define SSL3_TXT_FZA_DMS_NULL_SHA "FZA-NULL-SHA"
256
+ # define SSL3_TXT_FZA_DMS_FZA_SHA "FZA-FZA-CBC-SHA"
257
+ # define SSL3_TXT_FZA_DMS_RC4_SHA "FZA-RC4-SHA"
258
+ # endif
259
+
260
+ # define SSL3_TXT_KRB5_DES_64_CBC_SHA "KRB5-DES-CBC-SHA"
261
+ # define SSL3_TXT_KRB5_DES_192_CBC3_SHA "KRB5-DES-CBC3-SHA"
262
+ # define SSL3_TXT_KRB5_RC4_128_SHA "KRB5-RC4-SHA"
263
+ # define SSL3_TXT_KRB5_IDEA_128_CBC_SHA "KRB5-IDEA-CBC-SHA"
264
+ # define SSL3_TXT_KRB5_DES_64_CBC_MD5 "KRB5-DES-CBC-MD5"
265
+ # define SSL3_TXT_KRB5_DES_192_CBC3_MD5 "KRB5-DES-CBC3-MD5"
266
+ # define SSL3_TXT_KRB5_RC4_128_MD5 "KRB5-RC4-MD5"
267
+ # define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 "KRB5-IDEA-CBC-MD5"
268
+
269
+ # define SSL3_TXT_KRB5_DES_40_CBC_SHA "EXP-KRB5-DES-CBC-SHA"
270
+ # define SSL3_TXT_KRB5_RC2_40_CBC_SHA "EXP-KRB5-RC2-CBC-SHA"
271
+ # define SSL3_TXT_KRB5_RC4_40_SHA "EXP-KRB5-RC4-SHA"
272
+ # define SSL3_TXT_KRB5_DES_40_CBC_MD5 "EXP-KRB5-DES-CBC-MD5"
273
+ # define SSL3_TXT_KRB5_RC2_40_CBC_MD5 "EXP-KRB5-RC2-CBC-MD5"
274
+ # define SSL3_TXT_KRB5_RC4_40_MD5 "EXP-KRB5-RC4-MD5"
275
+
276
+ # define SSL3_SSL_SESSION_ID_LENGTH 32
277
+ # define SSL3_MAX_SSL_SESSION_ID_LENGTH 32
278
+
279
+ # define SSL3_MASTER_SECRET_SIZE 48
280
+ # define SSL3_RANDOM_SIZE 32
281
+ # define SSL3_SESSION_ID_SIZE 32
282
+ # define SSL3_RT_HEADER_LENGTH 5
283
+
284
+ # define SSL3_HM_HEADER_LENGTH 4
285
+
286
+ # ifndef SSL3_ALIGN_PAYLOAD
287
+ /*
288
+ * Some will argue that this increases memory footprint, but it's not
289
+ * actually true. Point is that malloc has to return at least 64-bit aligned
290
+ * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case.
291
+ * Suggested pre-gaping simply moves these wasted bytes from the end of
292
+ * allocated region to its front, but makes data payload aligned, which
293
+ * improves performance:-)
294
+ */
295
+ # define SSL3_ALIGN_PAYLOAD 8
296
+ # else
297
+ # if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0
298
+ # error "insane SSL3_ALIGN_PAYLOAD"
299
+ # undef SSL3_ALIGN_PAYLOAD
300
+ # endif
301
+ # endif
302
+
303
+ /*
304
+ * This is the maximum MAC (digest) size used by the SSL library. Currently
305
+ * maximum of 20 is used by SHA1, but we reserve for future extension for
306
+ * 512-bit hashes.
307
+ */
308
+
309
+ # define SSL3_RT_MAX_MD_SIZE 64
310
+
311
+ /*
312
+ * Maximum block size used in all ciphersuites. Currently 16 for AES.
313
+ */
314
+
315
+ # define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16
316
+
317
+ # define SSL3_RT_MAX_EXTRA (16384)
318
+
319
+ /* Maximum plaintext length: defined by SSL/TLS standards */
320
+ # define SSL3_RT_MAX_PLAIN_LENGTH 16384
321
+ /* Maximum compression overhead: defined by SSL/TLS standards */
322
+ # define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024
323
+
324
+ /*
325
+ * The standards give a maximum encryption overhead of 1024 bytes. In
326
+ * practice the value is lower than this. The overhead is the maximum number
327
+ * of padding bytes (256) plus the mac size.
328
+ */
329
+ # define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE)
330
+
331
+ /*
332
+ * OpenSSL currently only uses a padding length of at most one block so the
333
+ * send overhead is smaller.
334
+ */
335
+
336
+ # define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \
337
+ (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)
338
+
339
+ /* If compression isn't used don't include the compression overhead */
340
+
341
+ # ifdef OPENSSL_NO_COMP
342
+ # define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH
343
+ # else
344
+ # define SSL3_RT_MAX_COMPRESSED_LENGTH \
345
+ (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD)
346
+ # endif
347
+ # define SSL3_RT_MAX_ENCRYPTED_LENGTH \
348
+ (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH)
349
+ # define SSL3_RT_MAX_PACKET_SIZE \
350
+ (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)
351
+
352
+ # define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54"
353
+ # define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52"
354
+
355
+ # define SSL3_VERSION 0x0300
356
+ # define SSL3_VERSION_MAJOR 0x03
357
+ # define SSL3_VERSION_MINOR 0x00
358
+
359
+ # define SSL3_RT_CHANGE_CIPHER_SPEC 20
360
+ # define SSL3_RT_ALERT 21
361
+ # define SSL3_RT_HANDSHAKE 22
362
+ # define SSL3_RT_APPLICATION_DATA 23
363
+ # define TLS1_RT_HEARTBEAT 24
364
+
365
+ /* Pseudo content types to indicate additional parameters */
366
+ # define TLS1_RT_CRYPTO 0x1000
367
+ # define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1)
368
+ # define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2)
369
+ # define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3)
370
+ # define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4)
371
+
372
+ # define TLS1_RT_CRYPTO_READ 0x0000
373
+ # define TLS1_RT_CRYPTO_WRITE 0x0100
374
+ # define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5)
375
+ # define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6)
376
+ # define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7)
377
+ # define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8)
378
+
379
+ /* Pseudo content type for SSL/TLS header info */
380
+ # define SSL3_RT_HEADER 0x100
381
+
382
+ # define SSL3_AL_WARNING 1
383
+ # define SSL3_AL_FATAL 2
384
+
385
+ # define SSL3_AD_CLOSE_NOTIFY 0
386
+ # define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */
387
+ # define SSL3_AD_BAD_RECORD_MAC 20/* fatal */
388
+ # define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */
389
+ # define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */
390
+ # define SSL3_AD_NO_CERTIFICATE 41
391
+ # define SSL3_AD_BAD_CERTIFICATE 42
392
+ # define SSL3_AD_UNSUPPORTED_CERTIFICATE 43
393
+ # define SSL3_AD_CERTIFICATE_REVOKED 44
394
+ # define SSL3_AD_CERTIFICATE_EXPIRED 45
395
+ # define SSL3_AD_CERTIFICATE_UNKNOWN 46
396
+ # define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */
397
+
398
+ # define TLS1_HB_REQUEST 1
399
+ # define TLS1_HB_RESPONSE 2
400
+
401
+ # ifndef OPENSSL_NO_SSL_INTERN
402
+
403
+ typedef struct ssl3_record_st {
404
+ /* type of record */
405
+ /*
406
+ * r
407
+ */ int type;
408
+ /* How many bytes available */
409
+ /*
410
+ * rw
411
+ */ unsigned int length;
412
+ /* read/write offset into 'buf' */
413
+ /*
414
+ * r
415
+ */ unsigned int off;
416
+ /* pointer to the record data */
417
+ /*
418
+ * rw
419
+ */ unsigned char *data;
420
+ /* where the decode bytes are */
421
+ /*
422
+ * rw
423
+ */ unsigned char *input;
424
+ /* only used with decompression - malloc()ed */
425
+ /*
426
+ * r
427
+ */ unsigned char *comp;
428
+ /* epoch number, needed by DTLS1 */
429
+ /*
430
+ * r
431
+ */ unsigned long epoch;
432
+ /* sequence number, needed by DTLS1 */
433
+ /*
434
+ * r
435
+ */ unsigned char seq_num[8];
436
+ } SSL3_RECORD;
437
+
438
+ typedef struct ssl3_buffer_st {
439
+ /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */
440
+ unsigned char *buf;
441
+ /* buffer size */
442
+ size_t len;
443
+ /* where to 'copy from' */
444
+ int offset;
445
+ /* how many bytes left */
446
+ int left;
447
+ } SSL3_BUFFER;
448
+
449
+ # endif
450
+
451
+ # define SSL3_CT_RSA_SIGN 1
452
+ # define SSL3_CT_DSS_SIGN 2
453
+ # define SSL3_CT_RSA_FIXED_DH 3
454
+ # define SSL3_CT_DSS_FIXED_DH 4
455
+ # define SSL3_CT_RSA_EPHEMERAL_DH 5
456
+ # define SSL3_CT_DSS_EPHEMERAL_DH 6
457
+ # define SSL3_CT_FORTEZZA_DMS 20
458
+ /*
459
+ * SSL3_CT_NUMBER is used to size arrays and it must be large enough to
460
+ * contain all of the cert types defined either for SSLv3 and TLSv1.
461
+ */
462
+ # define SSL3_CT_NUMBER 9
463
+
464
+ # define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001
465
+ # define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002
466
+ # define SSL3_FLAGS_POP_BUFFER 0x0004
467
+ # define TLS1_FLAGS_TLS_PADDING_BUG 0x0008
468
+ # define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010
469
+ # define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020
470
+ /*
471
+ * Set when the handshake is ready to process peer's ChangeCipherSpec message.
472
+ * Cleared after the message has been processed.
473
+ */
474
+ # define SSL3_FLAGS_CCS_OK 0x0080
475
+
476
+ /* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */
477
+ # define SSL3_FLAGS_SGC_RESTART_DONE 0x0040
478
+
479
+ # ifndef OPENSSL_NO_SSL_INTERN
480
+
481
+ typedef struct ssl3_state_st {
482
+ long flags;
483
+ int delay_buf_pop_ret;
484
+ unsigned char read_sequence[8];
485
+ int read_mac_secret_size;
486
+ unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
487
+ unsigned char write_sequence[8];
488
+ int write_mac_secret_size;
489
+ unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
490
+ unsigned char server_random[SSL3_RANDOM_SIZE];
491
+ unsigned char client_random[SSL3_RANDOM_SIZE];
492
+ /* flags for countermeasure against known-IV weakness */
493
+ int need_empty_fragments;
494
+ int empty_fragment_done;
495
+ /* The value of 'extra' when the buffers were initialized */
496
+ int init_extra;
497
+ SSL3_BUFFER rbuf; /* read IO goes into here */
498
+ SSL3_BUFFER wbuf; /* write IO goes into here */
499
+ SSL3_RECORD rrec; /* each decoded record goes in here */
500
+ SSL3_RECORD wrec; /* goes out from here */
501
+ /*
502
+ * storage for Alert/Handshake protocol data received but not yet
503
+ * processed by ssl3_read_bytes:
504
+ */
505
+ unsigned char alert_fragment[2];
506
+ unsigned int alert_fragment_len;
507
+ unsigned char handshake_fragment[4];
508
+ unsigned int handshake_fragment_len;
509
+ /* partial write - check the numbers match */
510
+ unsigned int wnum; /* number of bytes sent so far */
511
+ int wpend_tot; /* number bytes written */
512
+ int wpend_type;
513
+ int wpend_ret; /* number of bytes submitted */
514
+ const unsigned char *wpend_buf;
515
+ /* used during startup, digest all incoming/outgoing packets */
516
+ BIO *handshake_buffer;
517
+ /*
518
+ * When set of handshake digests is determined, buffer is hashed and
519
+ * freed and MD_CTX-es for all required digests are stored in this array
520
+ */
521
+ EVP_MD_CTX **handshake_dgst;
522
+ /*
523
+ * Set whenever an expected ChangeCipherSpec message is processed.
524
+ * Unset when the peer's Finished message is received.
525
+ * Unexpected ChangeCipherSpec messages trigger a fatal alert.
526
+ */
527
+ int change_cipher_spec;
528
+ int warn_alert;
529
+ int fatal_alert;
530
+ /*
531
+ * we allow one fatal and one warning alert to be outstanding, send close
532
+ * alert via the warning alert
533
+ */
534
+ int alert_dispatch;
535
+ unsigned char send_alert[2];
536
+ /*
537
+ * This flag is set when we should renegotiate ASAP, basically when there
538
+ * is no more data in the read or write buffers
539
+ */
540
+ int renegotiate;
541
+ int total_renegotiations;
542
+ int num_renegotiations;
543
+ int in_read_app_data;
544
+ /*
545
+ * Opaque PRF input as used for the current handshake. These fields are
546
+ * used only if TLSEXT_TYPE_opaque_prf_input is defined (otherwise, they
547
+ * are merely present to improve binary compatibility)
548
+ */
549
+ void *client_opaque_prf_input;
550
+ size_t client_opaque_prf_input_len;
551
+ void *server_opaque_prf_input;
552
+ size_t server_opaque_prf_input_len;
553
+ struct {
554
+ /* actually only needs to be 16+20 */
555
+ unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2];
556
+ /* actually only need to be 16+20 for SSLv3 and 12 for TLS */
557
+ unsigned char finish_md[EVP_MAX_MD_SIZE * 2];
558
+ int finish_md_len;
559
+ unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2];
560
+ int peer_finish_md_len;
561
+ unsigned long message_size;
562
+ int message_type;
563
+ /* used to hold the new cipher we are going to use */
564
+ const SSL_CIPHER *new_cipher;
565
+ # ifndef OPENSSL_NO_DH
566
+ DH *dh;
567
+ # endif
568
+ # ifndef OPENSSL_NO_ECDH
569
+ EC_KEY *ecdh; /* holds short lived ECDH key */
570
+ # endif
571
+ /* used when SSL_ST_FLUSH_DATA is entered */
572
+ int next_state;
573
+ int reuse_message;
574
+ /* used for certificate requests */
575
+ int cert_req;
576
+ int ctype_num;
577
+ char ctype[SSL3_CT_NUMBER];
578
+ STACK_OF(X509_NAME) *ca_names;
579
+ int use_rsa_tmp;
580
+ int key_block_length;
581
+ unsigned char *key_block;
582
+ const EVP_CIPHER *new_sym_enc;
583
+ const EVP_MD *new_hash;
584
+ int new_mac_pkey_type;
585
+ int new_mac_secret_size;
586
+ # ifndef OPENSSL_NO_COMP
587
+ const SSL_COMP *new_compression;
588
+ # else
589
+ char *new_compression;
590
+ # endif
591
+ int cert_request;
592
+ } tmp;
593
+
594
+ /* Connection binding to prevent renegotiation attacks */
595
+ unsigned char previous_client_finished[EVP_MAX_MD_SIZE];
596
+ unsigned char previous_client_finished_len;
597
+ unsigned char previous_server_finished[EVP_MAX_MD_SIZE];
598
+ unsigned char previous_server_finished_len;
599
+ int send_connection_binding; /* TODOEKR */
600
+
601
+ # ifndef OPENSSL_NO_NEXTPROTONEG
602
+ /*
603
+ * Set if we saw the Next Protocol Negotiation extension from our peer.
604
+ */
605
+ int next_proto_neg_seen;
606
+ # endif
607
+
608
+ # ifndef OPENSSL_NO_TLSEXT
609
+ # ifndef OPENSSL_NO_EC
610
+ /*
611
+ * This is set to true if we believe that this is a version of Safari
612
+ * running on OS X 10.6 or newer. We wish to know this because Safari on
613
+ * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support.
614
+ */
615
+ char is_probably_safari;
616
+ # endif /* !OPENSSL_NO_EC */
617
+
618
+ /*
619
+ * ALPN information (we are in the process of transitioning from NPN to
620
+ * ALPN.)
621
+ */
622
+
623
+ /*
624
+ * In a server these point to the selected ALPN protocol after the
625
+ * ClientHello has been processed. In a client these contain the protocol
626
+ * that the server selected once the ServerHello has been processed.
627
+ */
628
+ unsigned char *alpn_selected;
629
+ unsigned alpn_selected_len;
630
+ # endif /* OPENSSL_NO_TLSEXT */
631
+ } SSL3_STATE;
632
+
633
+ # endif
634
+
635
+ /* SSLv3 */
636
+ /*
637
+ * client
638
+ */
639
+ /* extra state */
640
+ # define SSL3_ST_CW_FLUSH (0x100|SSL_ST_CONNECT)
641
+ # ifndef OPENSSL_NO_SCTP
642
+ # define DTLS1_SCTP_ST_CW_WRITE_SOCK (0x310|SSL_ST_CONNECT)
643
+ # define DTLS1_SCTP_ST_CR_READ_SOCK (0x320|SSL_ST_CONNECT)
644
+ # endif
645
+ /* write to server */
646
+ # define SSL3_ST_CW_CLNT_HELLO_A (0x110|SSL_ST_CONNECT)
647
+ # define SSL3_ST_CW_CLNT_HELLO_B (0x111|SSL_ST_CONNECT)
648
+ /* read from server */
649
+ # define SSL3_ST_CR_SRVR_HELLO_A (0x120|SSL_ST_CONNECT)
650
+ # define SSL3_ST_CR_SRVR_HELLO_B (0x121|SSL_ST_CONNECT)
651
+ # define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT)
652
+ # define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT)
653
+ # define SSL3_ST_CR_CERT_A (0x130|SSL_ST_CONNECT)
654
+ # define SSL3_ST_CR_CERT_B (0x131|SSL_ST_CONNECT)
655
+ # define SSL3_ST_CR_KEY_EXCH_A (0x140|SSL_ST_CONNECT)
656
+ # define SSL3_ST_CR_KEY_EXCH_B (0x141|SSL_ST_CONNECT)
657
+ # define SSL3_ST_CR_CERT_REQ_A (0x150|SSL_ST_CONNECT)
658
+ # define SSL3_ST_CR_CERT_REQ_B (0x151|SSL_ST_CONNECT)
659
+ # define SSL3_ST_CR_SRVR_DONE_A (0x160|SSL_ST_CONNECT)
660
+ # define SSL3_ST_CR_SRVR_DONE_B (0x161|SSL_ST_CONNECT)
661
+ /* write to server */
662
+ # define SSL3_ST_CW_CERT_A (0x170|SSL_ST_CONNECT)
663
+ # define SSL3_ST_CW_CERT_B (0x171|SSL_ST_CONNECT)
664
+ # define SSL3_ST_CW_CERT_C (0x172|SSL_ST_CONNECT)
665
+ # define SSL3_ST_CW_CERT_D (0x173|SSL_ST_CONNECT)
666
+ # define SSL3_ST_CW_KEY_EXCH_A (0x180|SSL_ST_CONNECT)
667
+ # define SSL3_ST_CW_KEY_EXCH_B (0x181|SSL_ST_CONNECT)
668
+ # define SSL3_ST_CW_CERT_VRFY_A (0x190|SSL_ST_CONNECT)
669
+ # define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT)
670
+ # define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT)
671
+ # define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT)
672
+ # ifndef OPENSSL_NO_NEXTPROTONEG
673
+ # define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT)
674
+ # define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT)
675
+ # endif
676
+ # define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT)
677
+ # define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT)
678
+ /* read from server */
679
+ # define SSL3_ST_CR_CHANGE_A (0x1C0|SSL_ST_CONNECT)
680
+ # define SSL3_ST_CR_CHANGE_B (0x1C1|SSL_ST_CONNECT)
681
+ # define SSL3_ST_CR_FINISHED_A (0x1D0|SSL_ST_CONNECT)
682
+ # define SSL3_ST_CR_FINISHED_B (0x1D1|SSL_ST_CONNECT)
683
+ # define SSL3_ST_CR_SESSION_TICKET_A (0x1E0|SSL_ST_CONNECT)
684
+ # define SSL3_ST_CR_SESSION_TICKET_B (0x1E1|SSL_ST_CONNECT)
685
+ # define SSL3_ST_CR_CERT_STATUS_A (0x1F0|SSL_ST_CONNECT)
686
+ # define SSL3_ST_CR_CERT_STATUS_B (0x1F1|SSL_ST_CONNECT)
687
+
688
+ /* server */
689
+ /* extra state */
690
+ # define SSL3_ST_SW_FLUSH (0x100|SSL_ST_ACCEPT)
691
+ # ifndef OPENSSL_NO_SCTP
692
+ # define DTLS1_SCTP_ST_SW_WRITE_SOCK (0x310|SSL_ST_ACCEPT)
693
+ # define DTLS1_SCTP_ST_SR_READ_SOCK (0x320|SSL_ST_ACCEPT)
694
+ # endif
695
+ /* read from client */
696
+ /* Do not change the number values, they do matter */
697
+ # define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT)
698
+ # define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT)
699
+ # define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT)
700
+ # define SSL3_ST_SR_CLNT_HELLO_D (0x115|SSL_ST_ACCEPT)
701
+ /* write to client */
702
+ # define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT)
703
+ # define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT)
704
+ # define SSL3_ST_SW_HELLO_REQ_A (0x120|SSL_ST_ACCEPT)
705
+ # define SSL3_ST_SW_HELLO_REQ_B (0x121|SSL_ST_ACCEPT)
706
+ # define SSL3_ST_SW_HELLO_REQ_C (0x122|SSL_ST_ACCEPT)
707
+ # define SSL3_ST_SW_SRVR_HELLO_A (0x130|SSL_ST_ACCEPT)
708
+ # define SSL3_ST_SW_SRVR_HELLO_B (0x131|SSL_ST_ACCEPT)
709
+ # define SSL3_ST_SW_CERT_A (0x140|SSL_ST_ACCEPT)
710
+ # define SSL3_ST_SW_CERT_B (0x141|SSL_ST_ACCEPT)
711
+ # define SSL3_ST_SW_KEY_EXCH_A (0x150|SSL_ST_ACCEPT)
712
+ # define SSL3_ST_SW_KEY_EXCH_B (0x151|SSL_ST_ACCEPT)
713
+ # define SSL3_ST_SW_CERT_REQ_A (0x160|SSL_ST_ACCEPT)
714
+ # define SSL3_ST_SW_CERT_REQ_B (0x161|SSL_ST_ACCEPT)
715
+ # define SSL3_ST_SW_SRVR_DONE_A (0x170|SSL_ST_ACCEPT)
716
+ # define SSL3_ST_SW_SRVR_DONE_B (0x171|SSL_ST_ACCEPT)
717
+ /* read from client */
718
+ # define SSL3_ST_SR_CERT_A (0x180|SSL_ST_ACCEPT)
719
+ # define SSL3_ST_SR_CERT_B (0x181|SSL_ST_ACCEPT)
720
+ # define SSL3_ST_SR_KEY_EXCH_A (0x190|SSL_ST_ACCEPT)
721
+ # define SSL3_ST_SR_KEY_EXCH_B (0x191|SSL_ST_ACCEPT)
722
+ # define SSL3_ST_SR_CERT_VRFY_A (0x1A0|SSL_ST_ACCEPT)
723
+ # define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT)
724
+ # define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT)
725
+ # define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT)
726
+ # ifndef OPENSSL_NO_NEXTPROTONEG
727
+ # define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT)
728
+ # define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT)
729
+ # endif
730
+ # define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT)
731
+ # define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT)
732
+ /* write to client */
733
+ # define SSL3_ST_SW_CHANGE_A (0x1D0|SSL_ST_ACCEPT)
734
+ # define SSL3_ST_SW_CHANGE_B (0x1D1|SSL_ST_ACCEPT)
735
+ # define SSL3_ST_SW_FINISHED_A (0x1E0|SSL_ST_ACCEPT)
736
+ # define SSL3_ST_SW_FINISHED_B (0x1E1|SSL_ST_ACCEPT)
737
+ # define SSL3_ST_SW_SESSION_TICKET_A (0x1F0|SSL_ST_ACCEPT)
738
+ # define SSL3_ST_SW_SESSION_TICKET_B (0x1F1|SSL_ST_ACCEPT)
739
+ # define SSL3_ST_SW_CERT_STATUS_A (0x200|SSL_ST_ACCEPT)
740
+ # define SSL3_ST_SW_CERT_STATUS_B (0x201|SSL_ST_ACCEPT)
741
+
742
+ # define SSL3_MT_HELLO_REQUEST 0
743
+ # define SSL3_MT_CLIENT_HELLO 1
744
+ # define SSL3_MT_SERVER_HELLO 2
745
+ # define SSL3_MT_NEWSESSION_TICKET 4
746
+ # define SSL3_MT_CERTIFICATE 11
747
+ # define SSL3_MT_SERVER_KEY_EXCHANGE 12
748
+ # define SSL3_MT_CERTIFICATE_REQUEST 13
749
+ # define SSL3_MT_SERVER_DONE 14
750
+ # define SSL3_MT_CERTIFICATE_VERIFY 15
751
+ # define SSL3_MT_CLIENT_KEY_EXCHANGE 16
752
+ # define SSL3_MT_FINISHED 20
753
+ # define SSL3_MT_CERTIFICATE_STATUS 22
754
+ # ifndef OPENSSL_NO_NEXTPROTONEG
755
+ # define SSL3_MT_NEXT_PROTO 67
756
+ # endif
757
+ # define DTLS1_MT_HELLO_VERIFY_REQUEST 3
758
+
759
+ # define SSL3_MT_CCS 1
760
+
761
+ /* These are used when changing over to a new cipher */
762
+ # define SSL3_CC_READ 0x01
763
+ # define SSL3_CC_WRITE 0x02
764
+ # define SSL3_CC_CLIENT 0x10
765
+ # define SSL3_CC_SERVER 0x20
766
+ # define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)
767
+ # define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ)
768
+ # define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ)
769
+ # define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE)
770
+
771
+ #ifdef __cplusplus
772
+ }
773
+ #endif
774
+ #endif