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.
- checksums.yaml +7 -0
- data/README.md +53 -0
- data/lib/OpenSSL/aes.h +149 -0
- data/lib/OpenSSL/asn1.h +1419 -0
- data/lib/OpenSSL/asn1_mac.h +579 -0
- data/lib/OpenSSL/asn1t.h +973 -0
- data/lib/OpenSSL/bio.h +879 -0
- data/lib/OpenSSL/blowfish.h +130 -0
- data/lib/OpenSSL/bn.h +939 -0
- data/lib/OpenSSL/buffer.h +125 -0
- data/lib/OpenSSL/camellia.h +132 -0
- data/lib/OpenSSL/cast.h +107 -0
- data/lib/OpenSSL/cmac.h +82 -0
- data/lib/OpenSSL/cms.h +555 -0
- data/lib/OpenSSL/comp.h +79 -0
- data/lib/OpenSSL/conf.h +267 -0
- data/lib/OpenSSL/conf_api.h +89 -0
- data/lib/OpenSSL/crypto.h +661 -0
- data/lib/OpenSSL/des.h +257 -0
- data/lib/OpenSSL/des_old.h +497 -0
- data/lib/OpenSSL/dh.h +392 -0
- data/lib/OpenSSL/dsa.h +332 -0
- data/lib/OpenSSL/dso.h +451 -0
- data/lib/OpenSSL/dtls1.h +272 -0
- data/lib/OpenSSL/e_os2.h +328 -0
- data/lib/OpenSSL/ebcdic.h +26 -0
- data/lib/OpenSSL/ec.h +1282 -0
- data/lib/OpenSSL/ecdh.h +134 -0
- data/lib/OpenSSL/ecdsa.h +335 -0
- data/lib/OpenSSL/engine.h +960 -0
- data/lib/OpenSSL/err.h +389 -0
- data/lib/OpenSSL/evp.h +1534 -0
- data/lib/OpenSSL/hmac.h +109 -0
- data/lib/OpenSSL/idea.h +105 -0
- data/lib/OpenSSL/krb5_asn.h +240 -0
- data/lib/OpenSSL/kssl.h +197 -0
- data/lib/OpenSSL/lhash.h +240 -0
- data/lib/OpenSSL/libcrypto-tvOS.a +0 -0
- data/lib/OpenSSL/libcrypto.a +0 -0
- data/lib/OpenSSL/libssl-tvOS.a +0 -0
- data/lib/OpenSSL/libssl.a +0 -0
- data/lib/OpenSSL/md4.h +119 -0
- data/lib/OpenSSL/md5.h +119 -0
- data/lib/OpenSSL/mdc2.h +94 -0
- data/lib/OpenSSL/modes.h +163 -0
- data/lib/OpenSSL/obj_mac.h +4194 -0
- data/lib/OpenSSL/objects.h +1143 -0
- data/lib/OpenSSL/ocsp.h +637 -0
- data/lib/OpenSSL/opensslconf.h +262 -0
- data/lib/OpenSSL/opensslv.h +97 -0
- data/lib/OpenSSL/ossl_typ.h +211 -0
- data/lib/OpenSSL/pem.h +615 -0
- data/lib/OpenSSL/pem2.h +70 -0
- data/lib/OpenSSL/pkcs12.h +342 -0
- data/lib/OpenSSL/pkcs7.h +481 -0
- data/lib/OpenSSL/pqueue.h +99 -0
- data/lib/OpenSSL/rand.h +150 -0
- data/lib/OpenSSL/rc2.h +103 -0
- data/lib/OpenSSL/rc4.h +88 -0
- data/lib/OpenSSL/ripemd.h +105 -0
- data/lib/OpenSSL/rsa.h +664 -0
- data/lib/OpenSSL/safestack.h +2672 -0
- data/lib/OpenSSL/seed.h +149 -0
- data/lib/OpenSSL/sha.h +214 -0
- data/lib/OpenSSL/srp.h +169 -0
- data/lib/OpenSSL/srtp.h +147 -0
- data/lib/OpenSSL/ssl.h +3168 -0
- data/lib/OpenSSL/ssl2.h +265 -0
- data/lib/OpenSSL/ssl23.h +84 -0
- data/lib/OpenSSL/ssl3.h +774 -0
- data/lib/OpenSSL/stack.h +107 -0
- data/lib/OpenSSL/symhacks.h +516 -0
- data/lib/OpenSSL/tls1.h +810 -0
- data/lib/OpenSSL/ts.h +862 -0
- data/lib/OpenSSL/txt_db.h +112 -0
- data/lib/OpenSSL/ui.h +415 -0
- data/lib/OpenSSL/ui_compat.h +88 -0
- data/lib/OpenSSL/whrlpool.h +41 -0
- data/lib/OpenSSL/x509.h +1327 -0
- data/lib/OpenSSL/x509_vfy.h +647 -0
- data/lib/OpenSSL/x509v3.h +1055 -0
- data/lib/motion-openssl.rb +8 -0
- data/lib/motion-openssl/hooks.rb +8 -0
- data/lib/motion-openssl/hooks/openssl.rb +20 -0
- data/lib/motion-openssl/version.rb +5 -0
- data/motion/openssl.rb +1 -0
- data/motion/openssl/random.rb +18 -0
- metadata +229 -0
data/lib/OpenSSL/dso.h
ADDED
@@ -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
|
data/lib/OpenSSL/dtls1.h
ADDED
@@ -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
|