summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/crypto
diff options
context:
space:
mode:
authorcvs2svn <admin@example.com>2015-08-02 21:54:22 +0000
committercvs2svn <admin@example.com>2015-08-02 21:54:22 +0000
commited3760bf4be4a96a89233fb8f8b84a0d44725862 (patch)
tree5609c82060f75c53af0a7641d9b33a88574876cd /src/lib/libcrypto/crypto
parentf8b563fb5ba1524c821d37308f4e6abfc866bc3f (diff)
downloadopenbsd-OPENBSD_5_8_BASE.tar.gz
openbsd-OPENBSD_5_8_BASE.tar.bz2
openbsd-OPENBSD_5_8_BASE.zip
This commit was manufactured by cvs2git to create tag 'OPENBSD_5_8_BASE'.OPENBSD_5_8_BASE
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/crypto.h551
1 files changed, 0 insertions, 551 deletions
diff --git a/src/lib/libcrypto/crypto.h b/src/lib/libcrypto/crypto.h
deleted file mode 100644
index 68028d9c13..0000000000
--- a/src/lib/libcrypto/crypto.h
+++ /dev/null
@@ -1,551 +0,0 @@
1/* $OpenBSD: crypto.h,v 1.35 2015/06/20 12:01:54 jsing Exp $ */
2/* ====================================================================
3 * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * 3. All advertising materials mentioning features or use of this
18 * software must display the following acknowledgment:
19 * "This product includes software developed by the OpenSSL Project
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
21 *
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23 * endorse or promote products derived from this software without
24 * prior written permission. For written permission, please contact
25 * openssl-core@openssl.org.
26 *
27 * 5. Products derived from this software may not be called "OpenSSL"
28 * nor may "OpenSSL" appear in their names without prior written
29 * permission of the OpenSSL Project.
30 *
31 * 6. Redistributions of any form whatsoever must retain the following
32 * acknowledgment:
33 * "This product includes software developed by the OpenSSL Project
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
35 *
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47 * OF THE POSSIBILITY OF SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This product includes cryptographic software written by Eric Young
51 * (eay@cryptsoft.com). This product includes software written by Tim
52 * Hudson (tjh@cryptsoft.com).
53 *
54 */
55/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
56 * All rights reserved.
57 *
58 * This package is an SSL implementation written
59 * by Eric Young (eay@cryptsoft.com).
60 * The implementation was written so as to conform with Netscapes SSL.
61 *
62 * This library is free for commercial and non-commercial use as long as
63 * the following conditions are aheared to. The following conditions
64 * apply to all code found in this distribution, be it the RC4, RSA,
65 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
66 * included with this distribution is covered by the same copyright terms
67 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
68 *
69 * Copyright remains Eric Young's, and as such any Copyright notices in
70 * the code are not to be removed.
71 * If this package is used in a product, Eric Young should be given attribution
72 * as the author of the parts of the library used.
73 * This can be in the form of a textual message at program startup or
74 * in documentation (online or textual) provided with the package.
75 *
76 * Redistribution and use in source and binary forms, with or without
77 * modification, are permitted provided that the following conditions
78 * are met:
79 * 1. Redistributions of source code must retain the copyright
80 * notice, this list of conditions and the following disclaimer.
81 * 2. Redistributions in binary form must reproduce the above copyright
82 * notice, this list of conditions and the following disclaimer in the
83 * documentation and/or other materials provided with the distribution.
84 * 3. All advertising materials mentioning features or use of this software
85 * must display the following acknowledgement:
86 * "This product includes cryptographic software written by
87 * Eric Young (eay@cryptsoft.com)"
88 * The word 'cryptographic' can be left out if the rouines from the library
89 * being used are not cryptographic related :-).
90 * 4. If you include any Windows specific code (or a derivative thereof) from
91 * the apps directory (application code) you must include an acknowledgement:
92 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
93 *
94 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
95 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
96 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
97 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
98 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
99 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
100 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
101 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
102 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
103 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
104 * SUCH DAMAGE.
105 *
106 * The licence and distribution terms for any publically available version or
107 * derivative of this code cannot be changed. i.e. this code cannot simply be
108 * copied and put under another distribution licence
109 * [including the GNU Public Licence.]
110 */
111/* ====================================================================
112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113 * ECDH support in OpenSSL originally developed by
114 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
115 */
116
117#include <stdio.h>
118#include <stdlib.h>
119
120#ifndef HEADER_CRYPTO_H
121#define HEADER_CRYPTO_H
122
123#include <openssl/opensslconf.h>
124
125#include <openssl/stack.h>
126#include <openssl/safestack.h>
127#include <openssl/opensslv.h>
128#include <openssl/ossl_typ.h>
129
130#ifdef __cplusplus
131extern "C" {
132#endif
133
134/* Backward compatibility to SSLeay */
135/* This is more to be used to check the correct DLL is being used
136 * in the MS world. */
137#define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER
138#define SSLEAY_VERSION 0
139/* #define SSLEAY_OPTIONS 1 no longer supported */
140#define SSLEAY_CFLAGS 2
141#define SSLEAY_BUILT_ON 3
142#define SSLEAY_PLATFORM 4
143#define SSLEAY_DIR 5
144
145/* A generic structure to pass assorted data in a expandable way */
146typedef struct openssl_item_st {
147 int code;
148 void *value; /* Not used for flag attributes */
149 size_t value_size; /* Max size of value for output, length for input */
150 size_t *value_length; /* Returned length of value for output */
151} OPENSSL_ITEM;
152
153
154/* When changing the CRYPTO_LOCK_* list, be sure to maintain the text lock
155 * names in cryptlib.c
156 */
157
158#define CRYPTO_LOCK_ERR 1
159#define CRYPTO_LOCK_EX_DATA 2
160#define CRYPTO_LOCK_X509 3
161#define CRYPTO_LOCK_X509_INFO 4
162#define CRYPTO_LOCK_X509_PKEY 5
163#define CRYPTO_LOCK_X509_CRL 6
164#define CRYPTO_LOCK_X509_REQ 7
165#define CRYPTO_LOCK_DSA 8
166#define CRYPTO_LOCK_RSA 9
167#define CRYPTO_LOCK_EVP_PKEY 10
168#define CRYPTO_LOCK_X509_STORE 11
169#define CRYPTO_LOCK_SSL_CTX 12
170#define CRYPTO_LOCK_SSL_CERT 13
171#define CRYPTO_LOCK_SSL_SESSION 14
172#define CRYPTO_LOCK_SSL_SESS_CERT 15
173#define CRYPTO_LOCK_SSL 16
174#define CRYPTO_LOCK_SSL_METHOD 17
175#define CRYPTO_LOCK_RAND 18
176#define CRYPTO_LOCK_RAND2 19
177#define CRYPTO_LOCK_MALLOC 20
178#define CRYPTO_LOCK_BIO 21
179#define CRYPTO_LOCK_GETHOSTBYNAME 22
180#define CRYPTO_LOCK_GETSERVBYNAME 23
181#define CRYPTO_LOCK_READDIR 24
182#define CRYPTO_LOCK_RSA_BLINDING 25
183#define CRYPTO_LOCK_DH 26
184#define CRYPTO_LOCK_MALLOC2 27
185#define CRYPTO_LOCK_DSO 28
186#define CRYPTO_LOCK_DYNLOCK 29
187#define CRYPTO_LOCK_ENGINE 30
188#define CRYPTO_LOCK_UI 31
189#define CRYPTO_LOCK_ECDSA 32
190#define CRYPTO_LOCK_EC 33
191#define CRYPTO_LOCK_ECDH 34
192#define CRYPTO_LOCK_BN 35
193#define CRYPTO_LOCK_EC_PRE_COMP 36
194#define CRYPTO_LOCK_STORE 37
195#define CRYPTO_LOCK_COMP 38
196#define CRYPTO_LOCK_FIPS 39
197#define CRYPTO_LOCK_FIPS2 40
198#define CRYPTO_NUM_LOCKS 41
199
200#define CRYPTO_LOCK 1
201#define CRYPTO_UNLOCK 2
202#define CRYPTO_READ 4
203#define CRYPTO_WRITE 8
204
205#ifndef OPENSSL_NO_LOCKING
206#ifndef CRYPTO_w_lock
207#define CRYPTO_w_lock(type) \
208 CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)
209#define CRYPTO_w_unlock(type) \
210 CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)
211#define CRYPTO_r_lock(type) \
212 CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__)
213#define CRYPTO_r_unlock(type) \
214 CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__)
215#define CRYPTO_add(addr,amount,type) \
216 CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__)
217#endif
218#else
219#define CRYPTO_w_lock(a)
220#define CRYPTO_w_unlock(a)
221#define CRYPTO_r_lock(a)
222#define CRYPTO_r_unlock(a)
223#define CRYPTO_add(a,b,c) ((*(a))+=(b))
224#endif
225
226/* Some applications as well as some parts of OpenSSL need to allocate
227 and deallocate locks in a dynamic fashion. The following typedef
228 makes this possible in a type-safe manner. */
229/* struct CRYPTO_dynlock_value has to be defined by the application. */
230typedef struct {
231 int references;
232 struct CRYPTO_dynlock_value *data;
233} CRYPTO_dynlock;
234
235
236/* The following can be used to detect memory leaks in the SSLeay library.
237 * It used, it turns on malloc checking */
238
239#define CRYPTO_MEM_CHECK_OFF 0x0 /* an enume */
240#define CRYPTO_MEM_CHECK_ON 0x1 /* a bit */
241#define CRYPTO_MEM_CHECK_ENABLE 0x2 /* a bit */
242#define CRYPTO_MEM_CHECK_DISABLE 0x3 /* an enume */
243
244/* The following are bit values to turn on or off options connected to the
245 * malloc checking functionality */
246
247/* Adds time to the memory checking information */
248#define V_CRYPTO_MDEBUG_TIME 0x1 /* a bit */
249/* Adds thread number to the memory checking information */
250#define V_CRYPTO_MDEBUG_THREAD 0x2 /* a bit */
251
252#define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD)
253
254
255/* predec of the BIO type */
256typedef struct bio_st BIO_dummy;
257
258struct crypto_ex_data_st {
259 STACK_OF(void) *sk;
260};
261DECLARE_STACK_OF(void)
262
263/* This stuff is basically class callback functions
264 * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */
265
266typedef struct crypto_ex_data_func_st {
267 long argl; /* Arbitary long */
268 void *argp; /* Arbitary void * */
269 CRYPTO_EX_new *new_func;
270 CRYPTO_EX_free *free_func;
271 CRYPTO_EX_dup *dup_func;
272} CRYPTO_EX_DATA_FUNCS;
273
274DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS)
275
276/* Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA
277 * entry.
278 */
279
280#define CRYPTO_EX_INDEX_BIO 0
281#define CRYPTO_EX_INDEX_SSL 1
282#define CRYPTO_EX_INDEX_SSL_CTX 2
283#define CRYPTO_EX_INDEX_SSL_SESSION 3
284#define CRYPTO_EX_INDEX_X509_STORE 4
285#define CRYPTO_EX_INDEX_X509_STORE_CTX 5
286#define CRYPTO_EX_INDEX_RSA 6
287#define CRYPTO_EX_INDEX_DSA 7
288#define CRYPTO_EX_INDEX_DH 8
289#define CRYPTO_EX_INDEX_ENGINE 9
290#define CRYPTO_EX_INDEX_X509 10
291#define CRYPTO_EX_INDEX_UI 11
292#define CRYPTO_EX_INDEX_ECDSA 12
293#define CRYPTO_EX_INDEX_ECDH 13
294#define CRYPTO_EX_INDEX_COMP 14
295#define CRYPTO_EX_INDEX_STORE 15
296
297/* Dynamically assigned indexes start from this value (don't use directly, use
298 * via CRYPTO_ex_data_new_class). */
299#define CRYPTO_EX_INDEX_USER 100
300
301/* This is the default callbacks, but we can have others as well:
302 * this is needed in Win32 where the application malloc and the
303 * library malloc may not be the same.
304 */
305#define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\
306 malloc, realloc, free)
307
308#if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD
309# ifndef CRYPTO_MDEBUG /* avoid duplicate #define */
310# define CRYPTO_MDEBUG
311# endif
312#endif
313
314/* Set standard debugging functions (not done by default
315 * unless CRYPTO_MDEBUG is defined) */
316#define CRYPTO_malloc_debug_init() do {\
317 CRYPTO_set_mem_debug_functions(\
318 CRYPTO_dbg_malloc,\
319 CRYPTO_dbg_realloc,\
320 CRYPTO_dbg_free,\
321 CRYPTO_dbg_set_options,\
322 CRYPTO_dbg_get_options);\
323 } while(0)
324
325int CRYPTO_mem_ctrl(int mode);
326int CRYPTO_is_mem_check_on(void);
327
328/* for applications */
329#define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON)
330#define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF)
331
332#define OPENSSL_malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__)
333#define OPENSSL_strdup(str) CRYPTO_strdup((str),__FILE__,__LINE__)
334#define OPENSSL_realloc(addr,num) \
335 CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__)
336#define OPENSSL_realloc_clean(addr,old_num,num) \
337 CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__)
338#define OPENSSL_remalloc(addr,num) \
339 CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__)
340#define OPENSSL_freeFunc CRYPTO_free
341#define OPENSSL_free(addr) CRYPTO_free(addr)
342
343#define OPENSSL_malloc_locked(num) \
344 CRYPTO_malloc_locked((int)num,__FILE__,__LINE__)
345#define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr)
346
347
348const char *SSLeay_version(int type);
349unsigned long SSLeay(void);
350
351/* An opaque type representing an implementation of "ex_data" support */
352typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL;
353/* Return an opaque pointer to the current "ex_data" implementation */
354const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void);
355/* Sets the "ex_data" implementation to be used (if it's not too late) */
356int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i);
357/* Get a new "ex_data" class, and return the corresponding "class_index" */
358int CRYPTO_ex_data_new_class(void);
359/* Within a given class, get/register a new index */
360int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp,
361 CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func,
362 CRYPTO_EX_free *free_func);
363/* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a given
364 * class (invokes whatever per-class callbacks are applicable) */
365int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
366int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to,
367 CRYPTO_EX_DATA *from);
368void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);
369/* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular index
370 * (relative to the class type involved) */
371int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);
372void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx);
373/* This function cleans up all "ex_data" state. It mustn't be called under
374 * potential race-conditions. */
375void CRYPTO_cleanup_all_ex_data(void);
376
377int CRYPTO_get_new_lockid(char *name);
378
379int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */
380void CRYPTO_lock(int mode, int type, const char *file, int line);
381void CRYPTO_set_locking_callback(void (*func)(int mode, int type,
382 const char *file, int line));
383void (*CRYPTO_get_locking_callback(void))(int mode, int type,
384 const char *file, int line);
385void CRYPTO_set_add_lock_callback(int (*func)(int *num, int mount, int type,
386 const char *file, int line));
387int (*CRYPTO_get_add_lock_callback(void))(int *num, int mount, int type,
388 const char *file, int line);
389
390/* Don't use this structure directly. */
391typedef struct crypto_threadid_st {
392 void *ptr;
393 unsigned long val;
394} CRYPTO_THREADID;
395/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */
396void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val);
397void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr);
398int CRYPTO_THREADID_set_callback(void (*threadid_func)(CRYPTO_THREADID *));
399void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *);
400void CRYPTO_THREADID_current(CRYPTO_THREADID *id);
401int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b);
402void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src);
403unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id);
404#ifndef OPENSSL_NO_DEPRECATED
405void CRYPTO_set_id_callback(unsigned long (*func)(void));
406unsigned long (*CRYPTO_get_id_callback(void))(void);
407unsigned long CRYPTO_thread_id(void);
408#endif
409
410const char *CRYPTO_get_lock_name(int type);
411int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,
412 int line);
413
414int CRYPTO_get_new_dynlockid(void);
415void CRYPTO_destroy_dynlockid(int i);
416struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i);
417void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line));
418void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line));
419void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line));
420struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file, int line);
421void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line);
422void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file, int line);
423
424/* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions --
425 * call the latter last if you need different functions */
426int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), void (*f)(void *));
427int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *));
428int CRYPTO_set_mem_ex_functions(void *(*m)(size_t, const char *, int),
429 void *(*r)(void *, size_t, const char *, int), void (*f)(void *));
430int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t, const char *, int),
431 void (*free_func)(void *));
432int CRYPTO_set_mem_debug_functions(
433 void (*m)(void *, int, const char *, int, int),
434 void (*r)(void *, void *, int, const char *, int, int),
435 void (*f)(void *, int), void (*so)(long), long (*go)(void));
436void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t),
437 void (**f)(void *));
438void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *));
439void CRYPTO_get_mem_ex_functions(void *(**m)(size_t, const char *, int),
440 void *(**r)(void *, size_t, const char *, int), void (**f)(void *));
441void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t, const char *, int),
442 void (**f)(void *));
443void CRYPTO_get_mem_debug_functions(
444 void (**m)(void *, int, const char *, int, int),
445 void (**r)(void *, void *, int, const char *, int, int),
446 void (**f)(void *, int), void (**so)(long), long (**go)(void));
447
448#ifndef LIBRESSL_INTERNAL
449void *CRYPTO_malloc_locked(int num, const char *file, int line);
450void CRYPTO_free_locked(void *ptr);
451void *CRYPTO_malloc(int num, const char *file, int line);
452char *CRYPTO_strdup(const char *str, const char *file, int line);
453void CRYPTO_free(void *ptr);
454void *CRYPTO_realloc(void *addr, int num, const char *file, int line);
455#endif
456void *CRYPTO_realloc_clean(void *addr, int old_num, int num,
457 const char *file, int line);
458void *CRYPTO_remalloc(void *addr, int num, const char *file, int line);
459
460void OPENSSL_cleanse(void *ptr, size_t len);
461
462void CRYPTO_set_mem_debug_options(long bits);
463long CRYPTO_get_mem_debug_options(void);
464
465#define CRYPTO_push_info(info) \
466 CRYPTO_push_info_(info, __FILE__, __LINE__);
467int CRYPTO_push_info_(const char *info, const char *file, int line);
468int CRYPTO_pop_info(void);
469int CRYPTO_remove_all_info(void);
470
471
472/* Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro;
473 * used as default in CRYPTO_MDEBUG compilations): */
474/* The last argument has the following significance:
475 *
476 * 0: called before the actual memory allocation has taken place
477 * 1: called after the actual memory allocation has taken place
478 */
479void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, int before_p)
480 __attribute__ ((deprecated));
481void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, int line, int before_p)
482 __attribute__ ((deprecated));
483void CRYPTO_dbg_free(void *addr, int before_p)
484 __attribute__ ((deprecated));
485/* Tell the debugging code about options. By default, the following values
486 * apply:
487 *
488 * 0: Clear all options.
489 * V_CRYPTO_MDEBUG_TIME (1): Set the "Show Time" option.
490 * V_CRYPTO_MDEBUG_THREAD (2): Set the "Show Thread Number" option.
491 * V_CRYPTO_MDEBUG_ALL (3): 1 + 2
492 */
493void CRYPTO_dbg_set_options(long bits)
494 __attribute__ ((deprecated));
495long CRYPTO_dbg_get_options(void)
496 __attribute__ ((deprecated));
497
498
499void CRYPTO_mem_leaks_fp(FILE *);
500void CRYPTO_mem_leaks(struct bio_st *bio);
501/* unsigned long order, char *file, int line, int num_bytes, char *addr */
502typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *);
503void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb);
504
505/* die if we have to */
506void OpenSSLDie(const char *file, int line, const char *assertion);
507#define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1))
508
509unsigned long *OPENSSL_ia32cap_loc(void);
510#define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc()))
511int OPENSSL_isservice(void);
512
513void OPENSSL_init(void);
514
515#ifndef LIBRESSL_INTERNAL
516/* CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. It
517 * takes an amount of time dependent on |len|, but independent of the contents
518 * of |a| and |b|. Unlike memcmp, it cannot be used to put elements into a
519 * defined order as the return value when a != b is undefined, other than to be
520 * non-zero. */
521int CRYPTO_memcmp(const void *a, const void *b, size_t len);
522#endif
523
524/* BEGIN ERROR CODES */
525/* The following lines are auto generated by the script mkerr.pl. Any changes
526 * made after this point may be overwritten when the script is next run.
527 */
528void ERR_load_CRYPTO_strings(void);
529
530/* Error codes for the CRYPTO functions. */
531
532/* Function codes. */
533#define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100
534#define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID 103
535#define CRYPTO_F_CRYPTO_GET_NEW_LOCKID 101
536#define CRYPTO_F_CRYPTO_SET_EX_DATA 102
537#define CRYPTO_F_DEF_ADD_INDEX 104
538#define CRYPTO_F_DEF_GET_CLASS 105
539#define CRYPTO_F_FIPS_MODE_SET 109
540#define CRYPTO_F_INT_DUP_EX_DATA 106
541#define CRYPTO_F_INT_FREE_EX_DATA 107
542#define CRYPTO_F_INT_NEW_EX_DATA 108
543
544/* Reason codes. */
545#define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101
546#define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK 100
547
548#ifdef __cplusplus
549}
550#endif
551#endif