OpenCoverage

crypto.h

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/include/openssl/crypto.h
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved-
4 *-
5 * Licensed under the OpenSSL license (the "License"). You may not use-
6 * this file except in compliance with the License. You can obtain a copy-
7 * in the file LICENSE in the source distribution or at-
8 * https://www.openssl.org/source/license.html-
9 */-
10-
11#ifndef HEADER_CRYPTO_H-
12# define HEADER_CRYPTO_H-
13-
14# include <stdlib.h>-
15# include <time.h>-
16-
17# include <openssl/e_os2.h>-
18-
19# ifndef OPENSSL_NO_STDIO-
20# include <stdio.h>-
21# endif-
22-
23# include <openssl/safestack.h>-
24# include <openssl/opensslv.h>-
25# include <openssl/ossl_typ.h>-
26# include <openssl/opensslconf.h>-
27# include <openssl/cryptoerr.h>-
28-
29# ifdef CHARSET_EBCDIC-
30# include <openssl/ebcdic.h>-
31# endif-
32-
33/*-
34 * Resolve problems on some operating systems with symbol names that clash-
35 * one way or another-
36 */-
37# include <openssl/symhacks.h>-
38-
39# if OPENSSL_API_COMPAT < 0x10100000L-
40# include <openssl/opensslv.h>-
41# endif-
42-
43#ifdef __cplusplus-
44extern "C" {-
45#endif-
46-
47# if OPENSSL_API_COMPAT < 0x10100000L-
48# define SSLeay OpenSSL_version_num-
49# define SSLeay_version OpenSSL_version-
50# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER-
51# define SSLEAY_VERSION OPENSSL_VERSION-
52# define SSLEAY_CFLAGS OPENSSL_CFLAGS-
53# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON-
54# define SSLEAY_PLATFORM OPENSSL_PLATFORM-
55# define SSLEAY_DIR OPENSSL_DIR-
56-
57/*-
58 * Old type for allocating dynamic locks. No longer used. Use the new thread-
59 * API instead.-
60 */-
61typedef struct {-
62 int dummy;-
63} CRYPTO_dynlock;-
64-
65# endif /* OPENSSL_API_COMPAT */-
66-
67typedef void CRYPTO_RWLOCK;-
68-
69CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void);-
70int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock);-
71int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock);-
72int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock);-
73void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock);-
74-
75int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock);-
76-
77/*-
78 * The following can be used to detect memory leaks in the library. If-
79 * used, it turns on malloc checking-
80 */-
81# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */-
82# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */-
83# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */-
84# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */-
85-
86struct crypto_ex_data_st {-
87 STACK_OF(void) *sk;-
88};-
89DEFINE_STACK_OF(void)
executed 387991 times by 12 tests: end of block
Executed by:
  • asn1_internal_test
  • chacha_internal_test
  • ctype_internal_test
  • curve448_internal_test
  • libcrypto.so.1.1
  • modes_internal_test
  • poly1305_internal_test
  • rdrand_sanitytest
  • siphash_internal_test
  • sm2_internal_test
  • sm4_internal_test
  • x509_internal_test
never executed: end of block
never executed: end of block
never executed: end of block
executed 28627 times by 1 test: return OPENSSL_sk_num((const OPENSSL_STACK *)sk);
Executed by:
  • libcrypto.so.1.1
executed 17721 times by 1 test: return (void *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);
Executed by:
  • libcrypto.so.1.1
never executed: return (struct stack_st_void *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare);
executed 10155 times by 1 test: return (struct stack_st_void *)OPENSSL_sk_new_null();
Executed by:
  • libcrypto.so.1.1
never executed: return (struct stack_st_void *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n);
never executed: return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n);
never executed: return (void *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i);
never executed: return (void *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, (const void *)ptr);
executed 508007 times by 1 test: return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);
Executed by:
  • libcrypto.so.1.1
never executed: return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr);
executed 368 times by 1 test: return (void *)OPENSSL_sk_pop((OPENSSL_STACK *)sk);
Executed by:
  • libcrypto.so.1.1
never executed: return (void *)OPENSSL_sk_shift((OPENSSL_STACK *)sk);
never executed: return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx);
executed 9801 times by 1 test: return (void *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr);
Executed by:
  • libcrypto.so.1.1
never executed: return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr);
never executed: return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr);
never executed: return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk);
never executed: return (struct stack_st_void *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk);
never executed: return (struct stack_st_void *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, (OPENSSL_sk_copyfunc)copyfunc, (OPENSSL_sk_freefunc)freefunc);
never executed: return (sk_void_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare);
0-508007
90-
91/*-
92 * Per class, we have a STACK of function pointers.-
93 */-
94# define CRYPTO_EX_INDEX_SSL 0-
95# define CRYPTO_EX_INDEX_SSL_CTX 1-
96# define CRYPTO_EX_INDEX_SSL_SESSION 2-
97# define CRYPTO_EX_INDEX_X509 3-
98# define CRYPTO_EX_INDEX_X509_STORE 4-
99# define CRYPTO_EX_INDEX_X509_STORE_CTX 5-
100# define CRYPTO_EX_INDEX_DH 6-
101# define CRYPTO_EX_INDEX_DSA 7-
102# define CRYPTO_EX_INDEX_EC_KEY 8-
103# define CRYPTO_EX_INDEX_RSA 9-
104# define CRYPTO_EX_INDEX_ENGINE 10-
105# define CRYPTO_EX_INDEX_UI 11-
106# define CRYPTO_EX_INDEX_BIO 12-
107# define CRYPTO_EX_INDEX_APP 13-
108# define CRYPTO_EX_INDEX_UI_METHOD 14-
109# define CRYPTO_EX_INDEX_DRBG 15-
110# define CRYPTO_EX_INDEX__COUNT 16-
111-
112/*-
113 * This is the default callbacks, but we can have others as well: this is-
114 * needed in Win32 where the application malloc and the library malloc may-
115 * not be the same.-
116 */-
117#define OPENSSL_malloc_init() \-
118 CRYPTO_set_mem_functions(CRYPTO_malloc, CRYPTO_realloc, CRYPTO_free)-
119-
120int CRYPTO_mem_ctrl(int mode);-
121-
122# define OPENSSL_malloc(num) \-
123 CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)-
124# define OPENSSL_zalloc(num) \-
125 CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)-
126# define OPENSSL_realloc(addr, num) \-
127 CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)-
128# define OPENSSL_clear_realloc(addr, old_num, num) \-
129 CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE)-
130# define OPENSSL_clear_free(addr, num) \-
131 CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)-
132# define OPENSSL_free(addr) \-
133 CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)-
134# define OPENSSL_memdup(str, s) \-
135 CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE)-
136# define OPENSSL_strdup(str) \-
137 CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)-
138# define OPENSSL_strndup(str, n) \-
139 CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)-
140# define OPENSSL_secure_malloc(num) \-
141 CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE)-
142# define OPENSSL_secure_zalloc(num) \-
143 CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)-
144# define OPENSSL_secure_free(addr) \-
145 CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE)-
146# define OPENSSL_secure_clear_free(addr, num) \-
147 CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)-
148# define OPENSSL_secure_actual_size(ptr) \-
149 CRYPTO_secure_actual_size(ptr)-
150-
151size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz);-
152size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz);-
153size_t OPENSSL_strnlen(const char *str, size_t maxlen);-
154char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len);-
155unsigned char *OPENSSL_hexstr2buf(const char *str, long *len);-
156int OPENSSL_hexchar2int(unsigned char c);-
157-
158# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type))-
159-
160unsigned long OpenSSL_version_num(void);-
161const char *OpenSSL_version(int type);-
162# define OPENSSL_VERSION 0-
163# define OPENSSL_CFLAGS 1-
164# define OPENSSL_BUILT_ON 2-
165# define OPENSSL_PLATFORM 3-
166# define OPENSSL_DIR 4-
167# define OPENSSL_ENGINES_DIR 5-
168-
169int OPENSSL_issetugid(void);-
170-
171typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad,-
172 int idx, long argl, void *argp);-
173typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad,-
174 int idx, long argl, void *argp);-
175typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from,-
176 void *from_d, int idx, long argl, void *argp);-
177__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp,-
178 CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func,-
179 CRYPTO_EX_free *free_func);-
180/* No longer use an index. */-
181int CRYPTO_free_ex_index(int class_index, int idx);-
182-
183/*-
184 * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a-
185 * given class (invokes whatever per-class callbacks are applicable)-
186 */-
187int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);-
188int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to,-
189 const CRYPTO_EX_DATA *from);-
190-
191void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);-
192-
193/*-
194 * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular-
195 * index (relative to the class type involved)-
196 */-
197int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);-
198void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx);-
199-
200# if OPENSSL_API_COMPAT < 0x10100000L-
201/*-
202 * This function cleans up all "ex_data" state. It mustn't be called under-
203 * potential race-conditions.-
204 */-
205# define CRYPTO_cleanup_all_ex_data() while(0) continue-
206-
207/*-
208 * The old locking functions have been removed completely without compatibility-
209 * macros. This is because the old functions either could not properly report-
210 * errors, or the returned error values were not clearly documented.-
211 * Replacing the locking functions with no-ops would cause race condition-
212 * issues in the affected applications. It is far better for them to fail at-
213 * compile time.-
214 * On the other hand, the locking callbacks are no longer used. Consequently,-
215 * the callback management functions can be safely replaced with no-op macros.-
216 */-
217# define CRYPTO_num_locks() (1)-
218# define CRYPTO_set_locking_callback(func)-
219# define CRYPTO_get_locking_callback() (NULL)-
220# define CRYPTO_set_add_lock_callback(func)-
221# define CRYPTO_get_add_lock_callback() (NULL)-
222-
223/*-
224 * These defines where used in combination with the old locking callbacks,-
225 * they are not called anymore, but old code that's not called might still-
226 * use them.-
227 */-
228# define CRYPTO_LOCK 1-
229# define CRYPTO_UNLOCK 2-
230# define CRYPTO_READ 4-
231# define CRYPTO_WRITE 8-
232-
233/* This structure is no longer used */-
234typedef struct crypto_threadid_st {-
235 int dummy;-
236} CRYPTO_THREADID;-
237/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */-
238# define CRYPTO_THREADID_set_numeric(id, val)-
239# define CRYPTO_THREADID_set_pointer(id, ptr)-
240# define CRYPTO_THREADID_set_callback(threadid_func) (0)-
241# define CRYPTO_THREADID_get_callback() (NULL)-
242# define CRYPTO_THREADID_current(id)-
243# define CRYPTO_THREADID_cmp(a, b) (-1)-
244# define CRYPTO_THREADID_cpy(dest, src)-
245# define CRYPTO_THREADID_hash(id) (0UL)-
246-
247# if OPENSSL_API_COMPAT < 0x10000000L-
248# define CRYPTO_set_id_callback(func)-
249# define CRYPTO_get_id_callback() (NULL)-
250# define CRYPTO_thread_id() (0UL)-
251# endif /* OPENSSL_API_COMPAT < 0x10000000L */-
252-
253# define CRYPTO_set_dynlock_create_callback(dyn_create_function)-
254# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function)-
255# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function)-
256# define CRYPTO_get_dynlock_create_callback() (NULL)-
257# define CRYPTO_get_dynlock_lock_callback() (NULL)-
258# define CRYPTO_get_dynlock_destroy_callback() (NULL)-
259# endif /* OPENSSL_API_COMPAT < 0x10100000L */-
260-
261int CRYPTO_set_mem_functions(-
262 void *(*m) (size_t, const char *, int),-
263 void *(*r) (void *, size_t, const char *, int),-
264 void (*f) (void *, const char *, int));-
265int CRYPTO_set_mem_debug(int flag);-
266void CRYPTO_get_mem_functions(-
267 void *(**m) (size_t, const char *, int),-
268 void *(**r) (void *, size_t, const char *, int),-
269 void (**f) (void *, const char *, int));-
270-
271void *CRYPTO_malloc(size_t num, const char *file, int line);-
272void *CRYPTO_zalloc(size_t num, const char *file, int line);-
273void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line);-
274char *CRYPTO_strdup(const char *str, const char *file, int line);-
275char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line);-
276void CRYPTO_free(void *ptr, const char *file, int line);-
277void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line);-
278void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line);-
279void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num,-
280 const char *file, int line);-
281-
282int CRYPTO_secure_malloc_init(size_t sz, int minsize);-
283int CRYPTO_secure_malloc_done(void);-
284void *CRYPTO_secure_malloc(size_t num, const char *file, int line);-
285void *CRYPTO_secure_zalloc(size_t num, const char *file, int line);-
286void CRYPTO_secure_free(void *ptr, const char *file, int line);-
287void CRYPTO_secure_clear_free(void *ptr, size_t num,-
288 const char *file, int line);-
289int CRYPTO_secure_allocated(const void *ptr);-
290int CRYPTO_secure_malloc_initialized(void);-
291size_t CRYPTO_secure_actual_size(void *ptr);-
292size_t CRYPTO_secure_used(void);-
293-
294void OPENSSL_cleanse(void *ptr, size_t len);-
295-
296# ifndef OPENSSL_NO_CRYPTO_MDEBUG-
297# define OPENSSL_mem_debug_push(info) \-
298 CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE)-
299# define OPENSSL_mem_debug_pop() \-
300 CRYPTO_mem_debug_pop()-
301int CRYPTO_mem_debug_push(const char *info, const char *file, int line);-
302int CRYPTO_mem_debug_pop(void);-
303void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount);-
304-
305/*--
306 * Debugging functions (enabled by CRYPTO_set_mem_debug(1))-
307 * The flag argument has the following significance:-
308 * 0: called before the actual memory allocation has taken place-
309 * 1: called after the actual memory allocation has taken place-
310 */-
311void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag,-
312 const char *file, int line);-
313void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag,-
314 const char *file, int line);-
315void CRYPTO_mem_debug_free(void *addr, int flag,-
316 const char *file, int line);-
317-
318int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u),-
319 void *u);-
320# ifndef OPENSSL_NO_STDIO-
321int CRYPTO_mem_leaks_fp(FILE *);-
322# endif-
323int CRYPTO_mem_leaks(BIO *bio);-
324# endif-
325-
326/* die if we have to */-
327ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line);-
328# if OPENSSL_API_COMPAT < 0x10100000L-
329# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l))-
330# endif-
331# define OPENSSL_assert(e) \-
332 (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1))-
333-
334int OPENSSL_isservice(void);-
335-
336int FIPS_mode(void);-
337int FIPS_mode_set(int r);-
338-
339void OPENSSL_init(void);-
340# ifdef OPENSSL_SYS_UNIX-
341void OPENSSL_fork_prepare(void);-
342void OPENSSL_fork_parent(void);-
343void OPENSSL_fork_child(void);-
344# endif-
345-
346struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result);-
347int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec);-
348int OPENSSL_gmtime_diff(int *pday, int *psec,-
349 const struct tm *from, const struct tm *to);-
350-
351/*-
352 * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal.-
353 * It takes an amount of time dependent on |len|, but independent of the-
354 * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements-
355 * into a defined order as the return value when a != b is undefined, other-
356 * than to be non-zero.-
357 */-
358int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len);-
359-
360/* Standard initialisation options */-
361# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L-
362# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L-
363# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L-
364# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L-
365# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L-
366# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L-
367# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L-
368# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L-
369# define OPENSSL_INIT_ASYNC 0x00000100L-
370# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L-
371# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L-
372# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L-
373# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L-
374# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L-
375# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L-
376# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L-
377/* OPENSSL_INIT_ZLIB 0x00010000L */-
378# define OPENSSL_INIT_ATFORK 0x00020000L-
379/* OPENSSL_INIT_BASE_ONLY 0x00040000L */-
380/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */-
381/* Max OPENSSL_INIT flag value is 0x80000000 */-
382-
383/* openssl and dasync not counted as builtin */-
384# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \-
385 (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \-
386 | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \-
387 OPENSSL_INIT_ENGINE_PADLOCK)-
388-
389-
390/* Library initialisation functions */-
391void OPENSSL_cleanup(void);-
392int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);-
393int OPENSSL_atexit(void (*handler)(void));-
394void OPENSSL_thread_stop(void);-
395-
396/* Low-level control of initialization */-
397OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void);-
398# ifndef OPENSSL_NO_STDIO-
399int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings,-
400 const char *config_file);-
401# endif-
402void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings);-
403-
404# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG)-
405# if defined(_WIN32)-
406# if defined(BASETYPES) || defined(_WINDEF_H)-
407/* application has to include <windows.h> in order to use this */-
408typedef DWORD CRYPTO_THREAD_LOCAL;-
409typedef DWORD CRYPTO_THREAD_ID;-
410-
411typedef LONG CRYPTO_ONCE;-
412# define CRYPTO_ONCE_STATIC_INIT 0-
413# endif-
414# else-
415# include <pthread.h>-
416typedef pthread_once_t CRYPTO_ONCE;-
417typedef pthread_key_t CRYPTO_THREAD_LOCAL;-
418typedef pthread_t CRYPTO_THREAD_ID;-
419-
420# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT-
421# endif-
422# endif-
423-
424# if !defined(CRYPTO_ONCE_STATIC_INIT)-
425typedef unsigned int CRYPTO_ONCE;-
426typedef unsigned int CRYPTO_THREAD_LOCAL;-
427typedef unsigned int CRYPTO_THREAD_ID;-
428# define CRYPTO_ONCE_STATIC_INIT 0-
429# endif-
430-
431int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void));-
432-
433int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *));-
434void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key);-
435int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val);-
436int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key);-
437-
438CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void);-
439int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b);-
440-
441-
442# ifdef __cplusplus-
443}-
444# endif-
445#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2