1 /* 2 * WARNING: do not edit! 3 * Generated by Makefile from include/openssl/crypto.h.in 4 * 5 * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. 6 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved 7 * 8 * Licensed under the Apache License 2.0 (the "License"). You may not use 9 * this file except in compliance with the License. You can obtain a copy 10 * in the file LICENSE in the source distribution or at 11 * https://www.openssl.org/source/license.html 12 */ 13 14 /* clang-format off */ 15 16 /* clang-format on */ 17 18 #ifndef OPENSSL_CRYPTO_H 19 #define OPENSSL_CRYPTO_H 20 #pragma once 21 22 #include <openssl/macros.h> 23 #ifndef OPENSSL_NO_DEPRECATED_3_0 24 #define HEADER_CRYPTO_H 25 #endif 26 27 #include <stdlib.h> 28 #include <time.h> 29 30 #include <openssl/e_os2.h> 31 32 #ifndef OPENSSL_NO_STDIO 33 #include <stdio.h> 34 #endif 35 36 #include <openssl/safestack.h> 37 #include <openssl/opensslv.h> 38 #include <openssl/types.h> 39 #include <openssl/opensslconf.h> 40 #include <openssl/cryptoerr.h> 41 #include <openssl/core.h> 42 43 #ifdef CHARSET_EBCDIC 44 #include <openssl/ebcdic.h> 45 #endif 46 47 /* 48 * Resolve problems on some operating systems with symbol names that clash 49 * one way or another 50 */ 51 #include <openssl/symhacks.h> 52 53 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 54 #include <openssl/opensslv.h> 55 #endif 56 57 #ifdef __cplusplus 58 extern "C" { 59 #endif 60 61 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 62 #define SSLeay OpenSSL_version_num 63 #define SSLeay_version OpenSSL_version 64 #define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER 65 #define SSLEAY_VERSION OPENSSL_VERSION 66 #define SSLEAY_CFLAGS OPENSSL_CFLAGS 67 #define SSLEAY_BUILT_ON OPENSSL_BUILT_ON 68 #define SSLEAY_PLATFORM OPENSSL_PLATFORM 69 #define SSLEAY_DIR OPENSSL_DIR 70 71 /* 72 * Old type for allocating dynamic locks. No longer used. Use the new thread 73 * API instead. 74 */ 75 typedef struct { 76 int dummy; 77 } CRYPTO_dynlock; 78 79 #endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ 80 81 typedef void CRYPTO_RWLOCK; 82 83 CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); 84 __owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); 85 __owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); 86 int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); 87 void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); 88 89 int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); 90 int CRYPTO_atomic_add64(uint64_t *val, uint64_t op, uint64_t *ret, 91 CRYPTO_RWLOCK *lock); 92 int CRYPTO_atomic_and(uint64_t *val, uint64_t op, uint64_t *ret, 93 CRYPTO_RWLOCK *lock); 94 int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, 95 CRYPTO_RWLOCK *lock); 96 int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); 97 int CRYPTO_atomic_load_int(int *val, int *ret, CRYPTO_RWLOCK *lock); 98 int CRYPTO_atomic_store(uint64_t *dst, uint64_t val, CRYPTO_RWLOCK *lock); 99 100 /* No longer needed, so this is a no-op */ 101 #define OPENSSL_malloc_init() \ 102 while (0) \ 103 continue 104 105 #define OPENSSL_malloc(num) \ 106 CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) 107 #define OPENSSL_zalloc(num) \ 108 CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) 109 #define OPENSSL_aligned_alloc(num, alignment, freeptr) \ 110 CRYPTO_aligned_alloc(num, alignment, freeptr, \ 111 OPENSSL_FILE, OPENSSL_LINE) 112 #define OPENSSL_realloc(addr, num) \ 113 CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) 114 #define OPENSSL_clear_realloc(addr, old_num, num) \ 115 CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) 116 #define OPENSSL_clear_free(addr, num) \ 117 CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) 118 #define OPENSSL_free(addr) \ 119 CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) 120 #define OPENSSL_memdup(str, s) \ 121 CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) 122 #define OPENSSL_strdup(str) \ 123 CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) 124 #define OPENSSL_strndup(str, n) \ 125 CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) 126 #define OPENSSL_secure_malloc(num) \ 127 CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) 128 #define OPENSSL_secure_zalloc(num) \ 129 CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) 130 #define OPENSSL_secure_free(addr) \ 131 CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) 132 #define OPENSSL_secure_clear_free(addr, num) \ 133 CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) 134 #define OPENSSL_secure_actual_size(ptr) \ 135 CRYPTO_secure_actual_size(ptr) 136 137 size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); 138 size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); 139 size_t OPENSSL_strnlen(const char *str, size_t maxlen); 140 int OPENSSL_strtoul(const char *str, char **endptr, int base, unsigned long *num); 141 int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, 142 const unsigned char *buf, size_t buflen, 143 const char sep); 144 char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); 145 int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, 146 const char *str, const char sep); 147 unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); 148 int OPENSSL_hexchar2int(unsigned char c); 149 int OPENSSL_strcasecmp(const char *s1, const char *s2); 150 int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); 151 152 #define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U << (sizeof(int) * 8 - 1)) - 1) / sizeof(type)) 153 154 /* 155 * These functions return the values of OPENSSL_VERSION_MAJOR, 156 * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE 157 * and OPENSSL_VERSION_BUILD_METADATA, respectively. 158 */ 159 unsigned int OPENSSL_version_major(void); 160 unsigned int OPENSSL_version_minor(void); 161 unsigned int OPENSSL_version_patch(void); 162 const char *OPENSSL_version_pre_release(void); 163 const char *OPENSSL_version_build_metadata(void); 164 165 unsigned long OpenSSL_version_num(void); 166 const char *OpenSSL_version(int type); 167 #define OPENSSL_VERSION 0 168 #define OPENSSL_CFLAGS 1 169 #define OPENSSL_BUILT_ON 2 170 #define OPENSSL_PLATFORM 3 171 #define OPENSSL_DIR 4 172 #define OPENSSL_ENGINES_DIR 5 173 #define OPENSSL_VERSION_STRING 6 174 #define OPENSSL_FULL_VERSION_STRING 7 175 #define OPENSSL_MODULES_DIR 8 176 #define OPENSSL_CPU_INFO 9 177 #define OPENSSL_WINCTX 10 178 179 const char *OPENSSL_info(int type); 180 /* 181 * The series starts at 1001 to avoid confusion with the OpenSSL_version 182 * types. 183 */ 184 #define OPENSSL_INFO_CONFIG_DIR 1001 185 #define OPENSSL_INFO_ENGINES_DIR 1002 186 #define OPENSSL_INFO_MODULES_DIR 1003 187 #define OPENSSL_INFO_DSO_EXTENSION 1004 188 #define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 189 #define OPENSSL_INFO_LIST_SEPARATOR 1006 190 #define OPENSSL_INFO_SEED_SOURCE 1007 191 #define OPENSSL_INFO_CPU_SETTINGS 1008 192 #define OPENSSL_INFO_WINDOWS_CONTEXT 1009 193 194 int OPENSSL_issetugid(void); 195 196 struct crypto_ex_data_st { 197 OSSL_LIB_CTX *ctx; 198 STACK_OF(void) *sk; 199 }; 200 201 /* clang-format off */ 202 SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) 203 #define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk)) 204 #define sk_void_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_void_sk_type(sk), (idx))) 205 #define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp))) 206 #define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_new_null()) 207 #define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n))) 208 #define sk_void_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_void_sk_type(sk), (n)) 209 #define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk)) 210 #define sk_void_zero(sk) OPENSSL_sk_zero(ossl_check_void_sk_type(sk)) 211 #define sk_void_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_void_sk_type(sk), (i))) 212 #define sk_void_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))) 213 #define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) 214 #define sk_void_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) 215 #define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk))) 216 #define sk_void_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_void_sk_type(sk))) 217 #define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk),ossl_check_void_freefunc_type(freefunc)) 218 #define sk_void_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), (idx)) 219 #define sk_void_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_void_sk_type(sk), (idx), ossl_check_void_type(ptr))) 220 #define sk_void_find(sk, ptr) OPENSSL_sk_find(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) 221 #define sk_void_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) 222 #define sk_void_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), pnum) 223 #define sk_void_sort(sk) OPENSSL_sk_sort(ossl_check_void_sk_type(sk)) 224 #define sk_void_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_void_sk_type(sk)) 225 #define sk_void_dup(sk) ((STACK_OF(void) *)OPENSSL_sk_dup(ossl_check_const_void_sk_type(sk))) 226 #define sk_void_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(void) *)OPENSSL_sk_deep_copy(ossl_check_const_void_sk_type(sk), ossl_check_void_copyfunc_type(copyfunc), ossl_check_void_freefunc_type(freefunc))) 227 #define sk_void_set_cmp_func(sk, cmp) ((sk_void_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_void_sk_type(sk), ossl_check_void_compfunc_type(cmp))) 228 229 /* clang-format on */ 230 231 /* 232 * Per class, we have a STACK of function pointers. 233 */ 234 #define CRYPTO_EX_INDEX_SSL 0 235 #define CRYPTO_EX_INDEX_SSL_CTX 1 236 #define CRYPTO_EX_INDEX_SSL_SESSION 2 237 #define CRYPTO_EX_INDEX_X509 3 238 #define CRYPTO_EX_INDEX_X509_STORE 4 239 #define CRYPTO_EX_INDEX_X509_STORE_CTX 5 240 #define CRYPTO_EX_INDEX_DH 6 241 #define CRYPTO_EX_INDEX_DSA 7 242 #define CRYPTO_EX_INDEX_EC_KEY 8 243 #define CRYPTO_EX_INDEX_RSA 9 244 #define CRYPTO_EX_INDEX_ENGINE 10 245 #define CRYPTO_EX_INDEX_UI 11 246 #define CRYPTO_EX_INDEX_BIO 12 247 #define CRYPTO_EX_INDEX_APP 13 248 #define CRYPTO_EX_INDEX_UI_METHOD 14 249 #define CRYPTO_EX_INDEX_RAND_DRBG 15 250 #define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG 251 #define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 252 #define CRYPTO_EX_INDEX_EVP_PKEY 17 253 #define CRYPTO_EX_INDEX__COUNT 18 254 255 typedef void CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, 256 int idx, long argl, void *argp); 257 typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, 258 int idx, long argl, void *argp); 259 typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, 260 void **from_d, int idx, long argl, void *argp); 261 __owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, 262 CRYPTO_EX_new *new_func, 263 CRYPTO_EX_dup *dup_func, 264 CRYPTO_EX_free *free_func); 265 /* No longer use an index. */ 266 int CRYPTO_free_ex_index(int class_index, int idx); 267 268 /* 269 * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a 270 * given class (invokes whatever per-class callbacks are applicable) 271 */ 272 int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); 273 int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, 274 const CRYPTO_EX_DATA *from); 275 276 void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); 277 278 /* Allocate a single item in the CRYPTO_EX_DATA variable */ 279 int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, 280 int idx); 281 282 /* 283 * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular 284 * index (relative to the class type involved) 285 */ 286 int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); 287 void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); 288 289 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 290 /* 291 * This function cleans up all "ex_data" state. It mustn't be called under 292 * potential race-conditions. 293 */ 294 #define CRYPTO_cleanup_all_ex_data() \ 295 while (0) \ 296 continue 297 298 /* 299 * The old locking functions have been removed completely without compatibility 300 * macros. This is because the old functions either could not properly report 301 * errors, or the returned error values were not clearly documented. 302 * Replacing the locking functions with no-ops would cause race condition 303 * issues in the affected applications. It is far better for them to fail at 304 * compile time. 305 * On the other hand, the locking callbacks are no longer used. Consequently, 306 * the callback management functions can be safely replaced with no-op macros. 307 */ 308 #define CRYPTO_num_locks() (1) 309 #define CRYPTO_set_locking_callback(func) 310 #define CRYPTO_get_locking_callback() (NULL) 311 #define CRYPTO_set_add_lock_callback(func) 312 #define CRYPTO_get_add_lock_callback() (NULL) 313 314 /* 315 * These defines where used in combination with the old locking callbacks, 316 * they are not called anymore, but old code that's not called might still 317 * use them. 318 */ 319 #define CRYPTO_LOCK 1 320 #define CRYPTO_UNLOCK 2 321 #define CRYPTO_READ 4 322 #define CRYPTO_WRITE 8 323 324 /* This structure is no longer used */ 325 typedef struct crypto_threadid_st { 326 int dummy; 327 } CRYPTO_THREADID; 328 /* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ 329 #define CRYPTO_THREADID_set_numeric(id, val) 330 #define CRYPTO_THREADID_set_pointer(id, ptr) 331 #define CRYPTO_THREADID_set_callback(threadid_func) (0) 332 #define CRYPTO_THREADID_get_callback() (NULL) 333 #define CRYPTO_THREADID_current(id) 334 #define CRYPTO_THREADID_cmp(a, b) (-1) 335 #define CRYPTO_THREADID_cpy(dest, src) 336 #define CRYPTO_THREADID_hash(id) (0UL) 337 338 #ifndef OPENSSL_NO_DEPRECATED_1_0_0 339 #define CRYPTO_set_id_callback(func) 340 #define CRYPTO_get_id_callback() (NULL) 341 #define CRYPTO_thread_id() (0UL) 342 #endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ 343 344 #define CRYPTO_set_dynlock_create_callback(dyn_create_function) 345 #define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) 346 #define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) 347 #define CRYPTO_get_dynlock_create_callback() (NULL) 348 #define CRYPTO_get_dynlock_lock_callback() (NULL) 349 #define CRYPTO_get_dynlock_destroy_callback() (NULL) 350 #endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ 351 352 typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); 353 typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, 354 int line); 355 typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); 356 int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, 357 CRYPTO_realloc_fn realloc_fn, 358 CRYPTO_free_fn free_fn); 359 void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, 360 CRYPTO_realloc_fn *realloc_fn, 361 CRYPTO_free_fn *free_fn); 362 363 OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); 364 OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); 365 OSSL_CRYPTO_ALLOC void *CRYPTO_aligned_alloc(size_t num, size_t align, 366 void **freeptr, const char *file, 367 int line); 368 void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); 369 char *CRYPTO_strdup(const char *str, const char *file, int line); 370 char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); 371 void CRYPTO_free(void *ptr, const char *file, int line); 372 void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); 373 void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); 374 void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, 375 const char *file, int line); 376 377 int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); 378 int CRYPTO_secure_malloc_done(void); 379 OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); 380 OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); 381 void CRYPTO_secure_free(void *ptr, const char *file, int line); 382 void CRYPTO_secure_clear_free(void *ptr, size_t num, 383 const char *file, int line); 384 int CRYPTO_secure_allocated(const void *ptr); 385 int CRYPTO_secure_malloc_initialized(void); 386 size_t CRYPTO_secure_actual_size(void *ptr); 387 size_t CRYPTO_secure_used(void); 388 389 void OPENSSL_cleanse(void *ptr, size_t len); 390 391 #ifndef OPENSSL_NO_CRYPTO_MDEBUG 392 /* 393 * The following can be used to detect memory leaks in the library. If 394 * used, it turns on malloc checking 395 */ 396 #define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ 397 #define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ 398 #define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ 399 #define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ 400 401 /* max allowed length for value of OPENSSL_MALLOC_FAILURES env var. */ 402 #define CRYPTO_MEM_CHECK_MAX_FS 256 403 404 void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); 405 #ifndef OPENSSL_NO_DEPRECATED_3_0 406 #define OPENSSL_mem_debug_push(info) \ 407 CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) 408 #define OPENSSL_mem_debug_pop() \ 409 CRYPTO_mem_debug_pop() 410 #endif 411 #ifndef OPENSSL_NO_DEPRECATED_3_0 412 OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); 413 OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); 414 OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, 415 const char *file, int line); 416 OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); 417 OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, 418 int flag, 419 const char *file, int line); 420 OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, 421 size_t num, int flag, 422 const char *file, int line); 423 OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, 424 const char *file, int line); 425 OSSL_DEPRECATEDIN_3_0 426 int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), 427 void *u); 428 #endif 429 #ifndef OPENSSL_NO_STDIO 430 #ifndef OPENSSL_NO_DEPRECATED_3_0 431 OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); 432 #endif 433 #endif 434 #ifndef OPENSSL_NO_DEPRECATED_3_0 435 OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); 436 #endif 437 #endif /* OPENSSL_NO_CRYPTO_MDEBUG */ 438 439 /* die if we have to */ 440 ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); 441 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 442 #define OpenSSLDie(f, l, a) OPENSSL_die((a), (f), (l)) 443 #endif 444 #define OPENSSL_assert(e) \ 445 (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) 446 447 int OPENSSL_isservice(void); 448 449 void OPENSSL_init(void); 450 #ifdef OPENSSL_SYS_UNIX 451 #ifndef OPENSSL_NO_DEPRECATED_3_0 452 OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); 453 OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); 454 OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); 455 #endif 456 #endif 457 458 struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); 459 int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); 460 int OPENSSL_gmtime_diff(int *pday, int *psec, 461 const struct tm *from, const struct tm *to); 462 463 /* 464 * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. 465 * It takes an amount of time dependent on |len|, but independent of the 466 * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements 467 * into a defined order as the return value when a != b is undefined, other 468 * than to be non-zero. 469 */ 470 int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len); 471 472 /* Standard initialisation options */ 473 #define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L 474 #define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L 475 #define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L 476 #define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L 477 #define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L 478 #define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L 479 #define OPENSSL_INIT_LOAD_CONFIG 0x00000040L 480 #define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L 481 #define OPENSSL_INIT_ASYNC 0x00000100L 482 #define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L 483 #define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L 484 #define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L 485 #define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L 486 #define OPENSSL_INIT_ENGINE_CAPI 0x00002000L 487 #define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L 488 #define OPENSSL_INIT_ENGINE_AFALG 0x00008000L 489 /* FREE: 0x00010000L */ 490 #define OPENSSL_INIT_ATFORK 0x00020000L 491 /* OPENSSL_INIT_BASE_ONLY 0x00040000L */ 492 #define OPENSSL_INIT_NO_ATEXIT 0x00080000L 493 /* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ 494 /* FREE: 0x04000000L */ 495 /* FREE: 0x08000000L */ 496 /* FREE: 0x10000000L */ 497 /* FREE: 0x20000000L */ 498 /* FREE: 0x40000000L */ 499 /* FREE: 0x80000000L */ 500 /* Max OPENSSL_INIT flag value is 0x80000000 */ 501 502 /* openssl and dasync not counted as builtin */ 503 #define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ 504 (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ 505 | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | OPENSSL_INIT_ENGINE_PADLOCK) 506 507 /* Library initialisation functions */ 508 void OPENSSL_cleanup(void); 509 int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); 510 int OPENSSL_atexit(void (*handler)(void)); 511 void OPENSSL_thread_stop(void); 512 void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); 513 514 /* Low-level control of initialization */ 515 OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); 516 #ifndef OPENSSL_NO_STDIO 517 int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, 518 const char *config_filename); 519 void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, 520 unsigned long flags); 521 int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, 522 const char *config_appname); 523 #endif 524 void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); 525 526 #if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) 527 #if defined(_WIN32) 528 #if defined(BASETYPES) || defined(_WINDEF_H) 529 /* application has to include <windows.h> in order to use this */ 530 typedef DWORD CRYPTO_THREAD_LOCAL; 531 typedef DWORD CRYPTO_THREAD_ID; 532 533 typedef LONG CRYPTO_ONCE; 534 #define CRYPTO_ONCE_STATIC_INIT 0 535 #endif 536 #else 537 #if defined(__TANDEM) && defined(_SPT_MODEL_) 538 #define SPT_THREAD_SIGNAL 1 539 #define SPT_THREAD_AWARE 1 540 #include <spthread.h> 541 #else 542 #include <pthread.h> 543 #endif 544 typedef pthread_once_t CRYPTO_ONCE; 545 typedef pthread_key_t CRYPTO_THREAD_LOCAL; 546 typedef pthread_t CRYPTO_THREAD_ID; 547 548 #define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT 549 #endif 550 #endif 551 552 #if !defined(CRYPTO_ONCE_STATIC_INIT) 553 typedef unsigned int CRYPTO_ONCE; 554 typedef unsigned int CRYPTO_THREAD_LOCAL; 555 typedef unsigned int CRYPTO_THREAD_ID; 556 #define CRYPTO_ONCE_STATIC_INIT 0 557 #endif 558 559 int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); 560 561 int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); 562 void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); 563 int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); 564 int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); 565 566 CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); 567 int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); 568 569 OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); 570 OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, 571 const OSSL_DISPATCH *in); 572 OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, 573 const OSSL_DISPATCH *in); 574 int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); 575 void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); 576 OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); 577 OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); 578 int OSSL_LIB_CTX_get_conf_diagnostics(OSSL_LIB_CTX *ctx); 579 void OSSL_LIB_CTX_set_conf_diagnostics(OSSL_LIB_CTX *ctx, int value); 580 581 void OSSL_sleep(uint64_t millis); 582 583 void *OSSL_LIB_CTX_get_data(OSSL_LIB_CTX *ctx, int index); 584 585 #ifdef __cplusplus 586 } 587 #endif 588 #endif 589