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,451 @@
1
+ /* dso.h -*- mode:C; c-file-style: "eay" -*- */
2
+ /*
3
+ * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project
4
+ * 2000.
5
+ */
6
+ /* ====================================================================
7
+ * Copyright (c) 2000 The OpenSSL Project. All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * 2. Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * 3. All advertising materials mentioning features or use of this
22
+ * software must display the following acknowledgment:
23
+ * "This product includes software developed by the OpenSSL Project
24
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25
+ *
26
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
+ * endorse or promote products derived from this software without
28
+ * prior written permission. For written permission, please contact
29
+ * licensing@OpenSSL.org.
30
+ *
31
+ * 5. Products derived from this software may not be called "OpenSSL"
32
+ * nor may "OpenSSL" appear in their names without prior written
33
+ * permission of the OpenSSL Project.
34
+ *
35
+ * 6. Redistributions of any form whatsoever must retain the following
36
+ * acknowledgment:
37
+ * "This product includes software developed by the OpenSSL Project
38
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
52
+ * ====================================================================
53
+ *
54
+ * This product includes cryptographic software written by Eric Young
55
+ * (eay@cryptsoft.com). This product includes software written by Tim
56
+ * Hudson (tjh@cryptsoft.com).
57
+ *
58
+ */
59
+
60
+ #ifndef HEADER_DSO_H
61
+ # define HEADER_DSO_H
62
+
63
+ # include <openssl/crypto.h>
64
+
65
+ #ifdef __cplusplus
66
+ extern "C" {
67
+ #endif
68
+
69
+ /* These values are used as commands to DSO_ctrl() */
70
+ # define DSO_CTRL_GET_FLAGS 1
71
+ # define DSO_CTRL_SET_FLAGS 2
72
+ # define DSO_CTRL_OR_FLAGS 3
73
+
74
+ /*
75
+ * By default, DSO_load() will translate the provided filename into a form
76
+ * typical for the platform (more specifically the DSO_METHOD) using the
77
+ * dso_name_converter function of the method. Eg. win32 will transform "blah"
78
+ * into "blah.dll", and dlfcn will transform it into "libblah.so". The
79
+ * behaviour can be overriden by setting the name_converter callback in the
80
+ * DSO object (using DSO_set_name_converter()). This callback could even
81
+ * utilise the DSO_METHOD's converter too if it only wants to override
82
+ * behaviour for one or two possible DSO methods. However, the following flag
83
+ * can be set in a DSO to prevent *any* native name-translation at all - eg.
84
+ * if the caller has prompted the user for a path to a driver library so the
85
+ * filename should be interpreted as-is.
86
+ */
87
+ # define DSO_FLAG_NO_NAME_TRANSLATION 0x01
88
+ /*
89
+ * An extra flag to give if only the extension should be added as
90
+ * translation. This is obviously only of importance on Unix and other
91
+ * operating systems where the translation also may prefix the name with
92
+ * something, like 'lib', and ignored everywhere else. This flag is also
93
+ * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time.
94
+ */
95
+ # define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02
96
+
97
+ /*
98
+ * The following flag controls the translation of symbol names to upper case.
99
+ * This is currently only being implemented for OpenVMS.
100
+ */
101
+ # define DSO_FLAG_UPCASE_SYMBOL 0x10
102
+
103
+ /*
104
+ * This flag loads the library with public symbols. Meaning: The exported
105
+ * symbols of this library are public to all libraries loaded after this
106
+ * library. At the moment only implemented in unix.
107
+ */
108
+ # define DSO_FLAG_GLOBAL_SYMBOLS 0x20
109
+
110
+ typedef void (*DSO_FUNC_TYPE) (void);
111
+
112
+ typedef struct dso_st DSO;
113
+
114
+ /*
115
+ * The function prototype used for method functions (or caller-provided
116
+ * callbacks) that transform filenames. They are passed a DSO structure
117
+ * pointer (or NULL if they are to be used independantly of a DSO object) and
118
+ * a filename to transform. They should either return NULL (if there is an
119
+ * error condition) or a newly allocated string containing the transformed
120
+ * form that the caller will need to free with OPENSSL_free() when done.
121
+ */
122
+ typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *);
123
+ /*
124
+ * The function prototype used for method functions (or caller-provided
125
+ * callbacks) that merge two file specifications. They are passed a DSO
126
+ * structure pointer (or NULL if they are to be used independantly of a DSO
127
+ * object) and two file specifications to merge. They should either return
128
+ * NULL (if there is an error condition) or a newly allocated string
129
+ * containing the result of merging that the caller will need to free with
130
+ * OPENSSL_free() when done. Here, merging means that bits and pieces are
131
+ * taken from each of the file specifications and added together in whatever
132
+ * fashion that is sensible for the DSO method in question. The only rule
133
+ * that really applies is that if the two specification contain pieces of the
134
+ * same type, the copy from the first string takes priority. One could see
135
+ * it as the first specification is the one given by the user and the second
136
+ * being a bunch of defaults to add on if they're missing in the first.
137
+ */
138
+ typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *);
139
+
140
+ typedef struct dso_meth_st {
141
+ const char *name;
142
+ /*
143
+ * Loads a shared library, NB: new DSO_METHODs must ensure that a
144
+ * successful load populates the loaded_filename field, and likewise a
145
+ * successful unload OPENSSL_frees and NULLs it out.
146
+ */
147
+ int (*dso_load) (DSO *dso);
148
+ /* Unloads a shared library */
149
+ int (*dso_unload) (DSO *dso);
150
+ /* Binds a variable */
151
+ void *(*dso_bind_var) (DSO *dso, const char *symname);
152
+ /*
153
+ * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should
154
+ * be cast to the real function prototype by the caller. Platforms that
155
+ * don't have compatible representations for different prototypes (this
156
+ * is possible within ANSI C) are highly unlikely to have shared
157
+ * libraries at all, let alone a DSO_METHOD implemented for them.
158
+ */
159
+ DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname);
160
+ /* I don't think this would actually be used in any circumstances. */
161
+ # if 0
162
+ /* Unbinds a variable */
163
+ int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr);
164
+ /* Unbinds a function */
165
+ int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr);
166
+ # endif
167
+ /*
168
+ * The generic (yuck) "ctrl()" function. NB: Negative return values
169
+ * (rather than zero) indicate errors.
170
+ */
171
+ long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg);
172
+ /*
173
+ * The default DSO_METHOD-specific function for converting filenames to a
174
+ * canonical native form.
175
+ */
176
+ DSO_NAME_CONVERTER_FUNC dso_name_converter;
177
+ /*
178
+ * The default DSO_METHOD-specific function for converting filenames to a
179
+ * canonical native form.
180
+ */
181
+ DSO_MERGER_FUNC dso_merger;
182
+ /* [De]Initialisation handlers. */
183
+ int (*init) (DSO *dso);
184
+ int (*finish) (DSO *dso);
185
+ /* Return pathname of the module containing location */
186
+ int (*pathbyaddr) (void *addr, char *path, int sz);
187
+ /* Perform global symbol lookup, i.e. among *all* modules */
188
+ void *(*globallookup) (const char *symname);
189
+ } DSO_METHOD;
190
+
191
+ /**********************************************************************/
192
+ /* The low-level handle type used to refer to a loaded shared library */
193
+
194
+ struct dso_st {
195
+ DSO_METHOD *meth;
196
+ /*
197
+ * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use
198
+ * anything but will need to cache the filename for use in the dso_bind
199
+ * handler. All in all, let each method control its own destiny.
200
+ * "Handles" and such go in a STACK.
201
+ */
202
+ STACK_OF(void) *meth_data;
203
+ int references;
204
+ int flags;
205
+ /*
206
+ * For use by applications etc ... use this for your bits'n'pieces, don't
207
+ * touch meth_data!
208
+ */
209
+ CRYPTO_EX_DATA ex_data;
210
+ /*
211
+ * If this callback function pointer is set to non-NULL, then it will be
212
+ * used in DSO_load() in place of meth->dso_name_converter. NB: This
213
+ * should normally set using DSO_set_name_converter().
214
+ */
215
+ DSO_NAME_CONVERTER_FUNC name_converter;
216
+ /*
217
+ * If this callback function pointer is set to non-NULL, then it will be
218
+ * used in DSO_load() in place of meth->dso_merger. NB: This should
219
+ * normally set using DSO_set_merger().
220
+ */
221
+ DSO_MERGER_FUNC merger;
222
+ /*
223
+ * This is populated with (a copy of) the platform-independant filename
224
+ * used for this DSO.
225
+ */
226
+ char *filename;
227
+ /*
228
+ * This is populated with (a copy of) the translated filename by which
229
+ * the DSO was actually loaded. It is NULL iff the DSO is not currently
230
+ * loaded. NB: This is here because the filename translation process may
231
+ * involve a callback being invoked more than once not only to convert to
232
+ * a platform-specific form, but also to try different filenames in the
233
+ * process of trying to perform a load. As such, this variable can be
234
+ * used to indicate (a) whether this DSO structure corresponds to a
235
+ * loaded library or not, and (b) the filename with which it was actually
236
+ * loaded.
237
+ */
238
+ char *loaded_filename;
239
+ };
240
+
241
+ DSO *DSO_new(void);
242
+ DSO *DSO_new_method(DSO_METHOD *method);
243
+ int DSO_free(DSO *dso);
244
+ int DSO_flags(DSO *dso);
245
+ int DSO_up_ref(DSO *dso);
246
+ long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg);
247
+
248
+ /*
249
+ * This function sets the DSO's name_converter callback. If it is non-NULL,
250
+ * then it will be used instead of the associated DSO_METHOD's function. If
251
+ * oldcb is non-NULL then it is set to the function pointer value being
252
+ * replaced. Return value is non-zero for success.
253
+ */
254
+ int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,
255
+ DSO_NAME_CONVERTER_FUNC *oldcb);
256
+ /*
257
+ * These functions can be used to get/set the platform-independant filename
258
+ * used for a DSO. NB: set will fail if the DSO is already loaded.
259
+ */
260
+ const char *DSO_get_filename(DSO *dso);
261
+ int DSO_set_filename(DSO *dso, const char *filename);
262
+ /*
263
+ * This function will invoke the DSO's name_converter callback to translate a
264
+ * filename, or if the callback isn't set it will instead use the DSO_METHOD's
265
+ * converter. If "filename" is NULL, the "filename" in the DSO itself will be
266
+ * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is
267
+ * simply duplicated. NB: This function is usually called from within a
268
+ * DSO_METHOD during the processing of a DSO_load() call, and is exposed so
269
+ * that caller-created DSO_METHODs can do the same thing. A non-NULL return
270
+ * value will need to be OPENSSL_free()'d.
271
+ */
272
+ char *DSO_convert_filename(DSO *dso, const char *filename);
273
+ /*
274
+ * This function will invoke the DSO's merger callback to merge two file
275
+ * specifications, or if the callback isn't set it will instead use the
276
+ * DSO_METHOD's merger. A non-NULL return value will need to be
277
+ * OPENSSL_free()'d.
278
+ */
279
+ char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2);
280
+ /*
281
+ * If the DSO is currently loaded, this returns the filename that it was
282
+ * loaded under, otherwise it returns NULL. So it is also useful as a test as
283
+ * to whether the DSO is currently loaded. NB: This will not necessarily
284
+ * return the same value as DSO_convert_filename(dso, dso->filename), because
285
+ * the DSO_METHOD's load function may have tried a variety of filenames (with
286
+ * and/or without the aid of the converters) before settling on the one it
287
+ * actually loaded.
288
+ */
289
+ const char *DSO_get_loaded_filename(DSO *dso);
290
+
291
+ void DSO_set_default_method(DSO_METHOD *meth);
292
+ DSO_METHOD *DSO_get_default_method(void);
293
+ DSO_METHOD *DSO_get_method(DSO *dso);
294
+ DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth);
295
+
296
+ /*
297
+ * The all-singing all-dancing load function, you normally pass NULL for the
298
+ * first and third parameters. Use DSO_up and DSO_free for subsequent
299
+ * reference count handling. Any flags passed in will be set in the
300
+ * constructed DSO after its init() function but before the load operation.
301
+ * If 'dso' is non-NULL, 'flags' is ignored.
302
+ */
303
+ DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags);
304
+
305
+ /* This function binds to a variable inside a shared library. */
306
+ void *DSO_bind_var(DSO *dso, const char *symname);
307
+
308
+ /* This function binds to a function inside a shared library. */
309
+ DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname);
310
+
311
+ /*
312
+ * This method is the default, but will beg, borrow, or steal whatever method
313
+ * should be the default on any particular platform (including
314
+ * DSO_METH_null() if necessary).
315
+ */
316
+ DSO_METHOD *DSO_METHOD_openssl(void);
317
+
318
+ /*
319
+ * This method is defined for all platforms - if a platform has no DSO
320
+ * support then this will be the only method!
321
+ */
322
+ DSO_METHOD *DSO_METHOD_null(void);
323
+
324
+ /*
325
+ * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen,
326
+ * dlclose, dlsym, etc) will be used and incorporated into this method. If
327
+ * not, this method will return NULL.
328
+ */
329
+ DSO_METHOD *DSO_METHOD_dlfcn(void);
330
+
331
+ /*
332
+ * If DSO_DL is defined, the standard dl.h-style functions (shl_load,
333
+ * shl_unload, shl_findsym, etc) will be used and incorporated into this
334
+ * method. If not, this method will return NULL.
335
+ */
336
+ DSO_METHOD *DSO_METHOD_dl(void);
337
+
338
+ /* If WIN32 is defined, use DLLs. If not, return NULL. */
339
+ DSO_METHOD *DSO_METHOD_win32(void);
340
+
341
+ /* If VMS is defined, use shared images. If not, return NULL. */
342
+ DSO_METHOD *DSO_METHOD_vms(void);
343
+
344
+ /*
345
+ * This function writes null-terminated pathname of DSO module containing
346
+ * 'addr' into 'sz' large caller-provided 'path' and returns the number of
347
+ * characters [including trailing zero] written to it. If 'sz' is 0 or
348
+ * negative, 'path' is ignored and required amount of charachers [including
349
+ * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then
350
+ * pathname of cryptolib itself is returned. Negative or zero return value
351
+ * denotes error.
352
+ */
353
+ int DSO_pathbyaddr(void *addr, char *path, int sz);
354
+
355
+ /*
356
+ * This function should be used with caution! It looks up symbols in *all*
357
+ * loaded modules and if module gets unloaded by somebody else attempt to
358
+ * dereference the pointer is doomed to have fatal consequences. Primary
359
+ * usage for this function is to probe *core* system functionality, e.g.
360
+ * check if getnameinfo(3) is available at run-time without bothering about
361
+ * OS-specific details such as libc.so.versioning or where does it actually
362
+ * reside: in libc itself or libsocket.
363
+ */
364
+ void *DSO_global_lookup(const char *name);
365
+
366
+ /* If BeOS is defined, use shared images. If not, return NULL. */
367
+ DSO_METHOD *DSO_METHOD_beos(void);
368
+
369
+ /* BEGIN ERROR CODES */
370
+ /*
371
+ * The following lines are auto generated by the script mkerr.pl. Any changes
372
+ * made after this point may be overwritten when the script is next run.
373
+ */
374
+ void ERR_load_DSO_strings(void);
375
+
376
+ /* Error codes for the DSO functions. */
377
+
378
+ /* Function codes. */
379
+ # define DSO_F_BEOS_BIND_FUNC 144
380
+ # define DSO_F_BEOS_BIND_VAR 145
381
+ # define DSO_F_BEOS_LOAD 146
382
+ # define DSO_F_BEOS_NAME_CONVERTER 147
383
+ # define DSO_F_BEOS_UNLOAD 148
384
+ # define DSO_F_DLFCN_BIND_FUNC 100
385
+ # define DSO_F_DLFCN_BIND_VAR 101
386
+ # define DSO_F_DLFCN_LOAD 102
387
+ # define DSO_F_DLFCN_MERGER 130
388
+ # define DSO_F_DLFCN_NAME_CONVERTER 123
389
+ # define DSO_F_DLFCN_UNLOAD 103
390
+ # define DSO_F_DL_BIND_FUNC 104
391
+ # define DSO_F_DL_BIND_VAR 105
392
+ # define DSO_F_DL_LOAD 106
393
+ # define DSO_F_DL_MERGER 131
394
+ # define DSO_F_DL_NAME_CONVERTER 124
395
+ # define DSO_F_DL_UNLOAD 107
396
+ # define DSO_F_DSO_BIND_FUNC 108
397
+ # define DSO_F_DSO_BIND_VAR 109
398
+ # define DSO_F_DSO_CONVERT_FILENAME 126
399
+ # define DSO_F_DSO_CTRL 110
400
+ # define DSO_F_DSO_FREE 111
401
+ # define DSO_F_DSO_GET_FILENAME 127
402
+ # define DSO_F_DSO_GET_LOADED_FILENAME 128
403
+ # define DSO_F_DSO_GLOBAL_LOOKUP 139
404
+ # define DSO_F_DSO_LOAD 112
405
+ # define DSO_F_DSO_MERGE 132
406
+ # define DSO_F_DSO_NEW_METHOD 113
407
+ # define DSO_F_DSO_PATHBYADDR 140
408
+ # define DSO_F_DSO_SET_FILENAME 129
409
+ # define DSO_F_DSO_SET_NAME_CONVERTER 122
410
+ # define DSO_F_DSO_UP_REF 114
411
+ # define DSO_F_GLOBAL_LOOKUP_FUNC 138
412
+ # define DSO_F_PATHBYADDR 137
413
+ # define DSO_F_VMS_BIND_SYM 115
414
+ # define DSO_F_VMS_LOAD 116
415
+ # define DSO_F_VMS_MERGER 133
416
+ # define DSO_F_VMS_UNLOAD 117
417
+ # define DSO_F_WIN32_BIND_FUNC 118
418
+ # define DSO_F_WIN32_BIND_VAR 119
419
+ # define DSO_F_WIN32_GLOBALLOOKUP 142
420
+ # define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143
421
+ # define DSO_F_WIN32_JOINER 135
422
+ # define DSO_F_WIN32_LOAD 120
423
+ # define DSO_F_WIN32_MERGER 134
424
+ # define DSO_F_WIN32_NAME_CONVERTER 125
425
+ # define DSO_F_WIN32_PATHBYADDR 141
426
+ # define DSO_F_WIN32_SPLITTER 136
427
+ # define DSO_F_WIN32_UNLOAD 121
428
+
429
+ /* Reason codes. */
430
+ # define DSO_R_CTRL_FAILED 100
431
+ # define DSO_R_DSO_ALREADY_LOADED 110
432
+ # define DSO_R_EMPTY_FILE_STRUCTURE 113
433
+ # define DSO_R_FAILURE 114
434
+ # define DSO_R_FILENAME_TOO_BIG 101
435
+ # define DSO_R_FINISH_FAILED 102
436
+ # define DSO_R_INCORRECT_FILE_SYNTAX 115
437
+ # define DSO_R_LOAD_FAILED 103
438
+ # define DSO_R_NAME_TRANSLATION_FAILED 109
439
+ # define DSO_R_NO_FILENAME 111
440
+ # define DSO_R_NO_FILE_SPECIFICATION 116
441
+ # define DSO_R_NULL_HANDLE 104
442
+ # define DSO_R_SET_FILENAME_FAILED 112
443
+ # define DSO_R_STACK_ERROR 105
444
+ # define DSO_R_SYM_FAILURE 106
445
+ # define DSO_R_UNLOAD_FAILED 107
446
+ # define DSO_R_UNSUPPORTED 108
447
+
448
+ #ifdef __cplusplus
449
+ }
450
+ #endif
451
+ #endif
@@ -0,0 +1,272 @@
1
+ /* ssl/dtls1.h */
2
+ /*
3
+ * DTLS implementation written by Nagendra Modadugu
4
+ * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
5
+ */
6
+ /* ====================================================================
7
+ * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ *
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * 2. Redistributions in binary form must reproduce the above copyright
17
+ * notice, this list of conditions and the following disclaimer in
18
+ * the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * 3. All advertising materials mentioning features or use of this
22
+ * software must display the following acknowledgment:
23
+ * "This product includes software developed by the OpenSSL Project
24
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25
+ *
26
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
+ * endorse or promote products derived from this software without
28
+ * prior written permission. For written permission, please contact
29
+ * openssl-core@OpenSSL.org.
30
+ *
31
+ * 5. Products derived from this software may not be called "OpenSSL"
32
+ * nor may "OpenSSL" appear in their names without prior written
33
+ * permission of the OpenSSL Project.
34
+ *
35
+ * 6. Redistributions of any form whatsoever must retain the following
36
+ * acknowledgment:
37
+ * "This product includes software developed by the OpenSSL Project
38
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
52
+ * ====================================================================
53
+ *
54
+ * This product includes cryptographic software written by Eric Young
55
+ * (eay@cryptsoft.com). This product includes software written by Tim
56
+ * Hudson (tjh@cryptsoft.com).
57
+ *
58
+ */
59
+
60
+ #ifndef HEADER_DTLS1_H
61
+ # define HEADER_DTLS1_H
62
+
63
+ # include <openssl/buffer.h>
64
+ # include <openssl/pqueue.h>
65
+ # ifdef OPENSSL_SYS_VMS
66
+ # include <resource.h>
67
+ # include <sys/timeb.h>
68
+ # endif
69
+ # ifdef OPENSSL_SYS_WIN32
70
+ /* Needed for struct timeval */
71
+ # include <winsock.h>
72
+ # elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_)
73
+ # include <sys/timeval.h>
74
+ # else
75
+ # if defined(OPENSSL_SYS_VXWORKS)
76
+ # include <sys/times.h>
77
+ # else
78
+ # include <sys/time.h>
79
+ # endif
80
+ # endif
81
+
82
+ #ifdef __cplusplus
83
+ extern "C" {
84
+ #endif
85
+
86
+ # define DTLS1_VERSION 0xFEFF
87
+ # define DTLS1_2_VERSION 0xFEFD
88
+ # define DTLS_MAX_VERSION DTLS1_2_VERSION
89
+ # define DTLS1_VERSION_MAJOR 0xFE
90
+
91
+ # define DTLS1_BAD_VER 0x0100
92
+
93
+ /* Special value for method supporting multiple versions */
94
+ # define DTLS_ANY_VERSION 0x1FFFF
95
+
96
+ # if 0
97
+ /* this alert description is not specified anywhere... */
98
+ # define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110
99
+ # endif
100
+
101
+ /* lengths of messages */
102
+ # define DTLS1_COOKIE_LENGTH 256
103
+
104
+ # define DTLS1_RT_HEADER_LENGTH 13
105
+
106
+ # define DTLS1_HM_HEADER_LENGTH 12
107
+
108
+ # define DTLS1_HM_BAD_FRAGMENT -2
109
+ # define DTLS1_HM_FRAGMENT_RETRY -3
110
+
111
+ # define DTLS1_CCS_HEADER_LENGTH 1
112
+
113
+ # ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE
114
+ # define DTLS1_AL_HEADER_LENGTH 7
115
+ # else
116
+ # define DTLS1_AL_HEADER_LENGTH 2
117
+ # endif
118
+
119
+ # ifndef OPENSSL_NO_SSL_INTERN
120
+
121
+ # ifndef OPENSSL_NO_SCTP
122
+ # define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP"
123
+ # endif
124
+
125
+ /* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */
126
+ # define DTLS1_MAX_MTU_OVERHEAD 48
127
+
128
+ typedef struct dtls1_bitmap_st {
129
+ unsigned long map; /* track 32 packets on 32-bit systems and 64
130
+ * - on 64-bit systems */
131
+ unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit
132
+ * value in big-endian encoding */
133
+ } DTLS1_BITMAP;
134
+
135
+ struct dtls1_retransmit_state {
136
+ EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
137
+ EVP_MD_CTX *write_hash; /* used for mac generation */
138
+ # ifndef OPENSSL_NO_COMP
139
+ COMP_CTX *compress; /* compression */
140
+ # else
141
+ char *compress;
142
+ # endif
143
+ SSL_SESSION *session;
144
+ unsigned short epoch;
145
+ };
146
+
147
+ struct hm_header_st {
148
+ unsigned char type;
149
+ unsigned long msg_len;
150
+ unsigned short seq;
151
+ unsigned long frag_off;
152
+ unsigned long frag_len;
153
+ unsigned int is_ccs;
154
+ struct dtls1_retransmit_state saved_retransmit_state;
155
+ };
156
+
157
+ struct ccs_header_st {
158
+ unsigned char type;
159
+ unsigned short seq;
160
+ };
161
+
162
+ struct dtls1_timeout_st {
163
+ /* Number of read timeouts so far */
164
+ unsigned int read_timeouts;
165
+ /* Number of write timeouts so far */
166
+ unsigned int write_timeouts;
167
+ /* Number of alerts received so far */
168
+ unsigned int num_alerts;
169
+ };
170
+
171
+ typedef struct record_pqueue_st {
172
+ unsigned short epoch;
173
+ pqueue q;
174
+ } record_pqueue;
175
+
176
+ typedef struct hm_fragment_st {
177
+ struct hm_header_st msg_header;
178
+ unsigned char *fragment;
179
+ unsigned char *reassembly;
180
+ } hm_fragment;
181
+
182
+ typedef struct dtls1_state_st {
183
+ unsigned int send_cookie;
184
+ unsigned char cookie[DTLS1_COOKIE_LENGTH];
185
+ unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH];
186
+ unsigned int cookie_len;
187
+ /*
188
+ * The current data and handshake epoch. This is initially
189
+ * undefined, and starts at zero once the initial handshake is
190
+ * completed
191
+ */
192
+ unsigned short r_epoch;
193
+ unsigned short w_epoch;
194
+ /* records being received in the current epoch */
195
+ DTLS1_BITMAP bitmap;
196
+ /* renegotiation starts a new set of sequence numbers */
197
+ DTLS1_BITMAP next_bitmap;
198
+ /* handshake message numbers */
199
+ unsigned short handshake_write_seq;
200
+ unsigned short next_handshake_write_seq;
201
+ unsigned short handshake_read_seq;
202
+ /* save last sequence number for retransmissions */
203
+ unsigned char last_write_sequence[8];
204
+ /* Received handshake records (processed and unprocessed) */
205
+ record_pqueue unprocessed_rcds;
206
+ record_pqueue processed_rcds;
207
+ /* Buffered handshake messages */
208
+ pqueue buffered_messages;
209
+ /* Buffered (sent) handshake records */
210
+ pqueue sent_messages;
211
+ /*
212
+ * Buffered application records. Only for records between CCS and
213
+ * Finished to prevent either protocol violation or unnecessary message
214
+ * loss.
215
+ */
216
+ record_pqueue buffered_app_data;
217
+ /* Is set when listening for new connections with dtls1_listen() */
218
+ unsigned int listen;
219
+ unsigned int link_mtu; /* max on-the-wire DTLS packet size */
220
+ unsigned int mtu; /* max DTLS packet size */
221
+ struct hm_header_st w_msg_hdr;
222
+ struct hm_header_st r_msg_hdr;
223
+ struct dtls1_timeout_st timeout;
224
+ /*
225
+ * Indicates when the last handshake msg or heartbeat sent will timeout
226
+ */
227
+ struct timeval next_timeout;
228
+ /* Timeout duration */
229
+ unsigned short timeout_duration;
230
+ /*
231
+ * storage for Alert/Handshake protocol data received but not yet
232
+ * processed by ssl3_read_bytes:
233
+ */
234
+ unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
235
+ unsigned int alert_fragment_len;
236
+ unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
237
+ unsigned int handshake_fragment_len;
238
+ unsigned int retransmitting;
239
+ /*
240
+ * Set when the handshake is ready to process peer's ChangeCipherSpec message.
241
+ * Cleared after the message has been processed.
242
+ */
243
+ unsigned int change_cipher_spec_ok;
244
+ # ifndef OPENSSL_NO_SCTP
245
+ /* used when SSL_ST_XX_FLUSH is entered */
246
+ int next_state;
247
+ int shutdown_received;
248
+ # endif
249
+ } DTLS1_STATE;
250
+
251
+ typedef struct dtls1_record_data_st {
252
+ unsigned char *packet;
253
+ unsigned int packet_length;
254
+ SSL3_BUFFER rbuf;
255
+ SSL3_RECORD rrec;
256
+ # ifndef OPENSSL_NO_SCTP
257
+ struct bio_dgram_sctp_rcvinfo recordinfo;
258
+ # endif
259
+ } DTLS1_RECORD_DATA;
260
+
261
+ # endif
262
+
263
+ /* Timeout multipliers (timeout slice is defined in apps/timeouts.h */
264
+ # define DTLS1_TMO_READ_COUNT 2
265
+ # define DTLS1_TMO_WRITE_COUNT 2
266
+
267
+ # define DTLS1_TMO_ALERT_COUNT 12
268
+
269
+ #ifdef __cplusplus
270
+ }
271
+ #endif
272
+ #endif