diff options
| author | tb <> | 2023-07-28 10:19:20 +0000 |
|---|---|---|
| committer | tb <> | 2023-07-28 10:19:20 +0000 |
| commit | df077cec5ce229b03845385f6f75dbe7cd5f7080 (patch) | |
| tree | 2ee287d6ab4c68a054e3379b662b9a6d1a67c316 /src | |
| parent | e393551162848dd712d0c5a922f6ef5522fb5ca2 (diff) | |
| download | openbsd-df077cec5ce229b03845385f6f75dbe7cd5f7080.tar.gz openbsd-df077cec5ce229b03845385f6f75dbe7cd5f7080.tar.bz2 openbsd-df077cec5ce229b03845385f6f75dbe7cd5f7080.zip | |
Make ex_data implementations internal
To state the obvious: library suffers from way too much extensibility. In
theory, applications can implement their own ex_data implementation. In
practice, none did. A glance at ex_data.c might give an idea as to why.
Make this internal so this particular turd can be replaced with something
slightly saner.
Also sync up the CRYPTO_EX_INDEX_* defines with OpenSSL - at least
the parts we support.
ok jsing
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/Symbols.list | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/Symbols.namespace | 3 | ||||
| -rw-r--r-- | src/lib/libcrypto/crypto.h | 64 | ||||
| -rw-r--r-- | src/lib/libcrypto/ex_data.c | 56 | ||||
| -rw-r--r-- | src/lib/libcrypto/hidden/openssl/crypto.h | 5 | ||||
| -rw-r--r-- | src/lib/libcrypto/stack/safestack.h | 24 |
6 files changed, 41 insertions, 114 deletions
diff --git a/src/lib/libcrypto/Symbols.list b/src/lib/libcrypto/Symbols.list index 2f081c1a4c..8129d9f182 100644 --- a/src/lib/libcrypto/Symbols.list +++ b/src/lib/libcrypto/Symbols.list | |||
| @@ -691,7 +691,6 @@ CRYPTO_dbg_realloc | |||
| 691 | CRYPTO_dbg_set_options | 691 | CRYPTO_dbg_set_options |
| 692 | CRYPTO_destroy_dynlockid | 692 | CRYPTO_destroy_dynlockid |
| 693 | CRYPTO_dup_ex_data | 693 | CRYPTO_dup_ex_data |
| 694 | CRYPTO_ex_data_new_class | ||
| 695 | CRYPTO_free | 694 | CRYPTO_free |
| 696 | CRYPTO_free_ex_data | 695 | CRYPTO_free_ex_data |
| 697 | CRYPTO_free_locked | 696 | CRYPTO_free_locked |
| @@ -712,7 +711,6 @@ CRYPTO_get_dynlock_destroy_callback | |||
| 712 | CRYPTO_get_dynlock_lock_callback | 711 | CRYPTO_get_dynlock_lock_callback |
| 713 | CRYPTO_get_dynlock_value | 712 | CRYPTO_get_dynlock_value |
| 714 | CRYPTO_get_ex_data | 713 | CRYPTO_get_ex_data |
| 715 | CRYPTO_get_ex_data_implementation | ||
| 716 | CRYPTO_get_ex_new_index | 714 | CRYPTO_get_ex_new_index |
| 717 | CRYPTO_get_id_callback | 715 | CRYPTO_get_id_callback |
| 718 | CRYPTO_get_lock_name | 716 | CRYPTO_get_lock_name |
| @@ -752,7 +750,6 @@ CRYPTO_set_dynlock_create_callback | |||
| 752 | CRYPTO_set_dynlock_destroy_callback | 750 | CRYPTO_set_dynlock_destroy_callback |
| 753 | CRYPTO_set_dynlock_lock_callback | 751 | CRYPTO_set_dynlock_lock_callback |
| 754 | CRYPTO_set_ex_data | 752 | CRYPTO_set_ex_data |
| 755 | CRYPTO_set_ex_data_implementation | ||
| 756 | CRYPTO_set_id_callback | 753 | CRYPTO_set_id_callback |
| 757 | CRYPTO_set_locked_mem_ex_functions | 754 | CRYPTO_set_locked_mem_ex_functions |
| 758 | CRYPTO_set_locked_mem_functions | 755 | CRYPTO_set_locked_mem_functions |
diff --git a/src/lib/libcrypto/Symbols.namespace b/src/lib/libcrypto/Symbols.namespace index 07a1b86ad1..dcf70a63e6 100644 --- a/src/lib/libcrypto/Symbols.namespace +++ b/src/lib/libcrypto/Symbols.namespace | |||
| @@ -1945,9 +1945,6 @@ _libre_OpenSSL_version | |||
| 1945 | _libre_OpenSSL_version_num | 1945 | _libre_OpenSSL_version_num |
| 1946 | _libre_SSLeay_version | 1946 | _libre_SSLeay_version |
| 1947 | _libre_SSLeay | 1947 | _libre_SSLeay |
| 1948 | _libre_CRYPTO_get_ex_data_implementation | ||
| 1949 | _libre_CRYPTO_set_ex_data_implementation | ||
| 1950 | _libre_CRYPTO_ex_data_new_class | ||
| 1951 | _libre_CRYPTO_get_ex_new_index | 1948 | _libre_CRYPTO_get_ex_new_index |
| 1952 | _libre_CRYPTO_new_ex_data | 1949 | _libre_CRYPTO_new_ex_data |
| 1953 | _libre_CRYPTO_dup_ex_data | 1950 | _libre_CRYPTO_dup_ex_data |
diff --git a/src/lib/libcrypto/crypto.h b/src/lib/libcrypto/crypto.h index f91374f496..07a55ec1f6 100644 --- a/src/lib/libcrypto/crypto.h +++ b/src/lib/libcrypto/crypto.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: crypto.h,v 1.62 2023/07/05 13:06:06 bcook Exp $ */ | 1 | /* $OpenBSD: crypto.h,v 1.63 2023/07/28 10:19:20 tb Exp $ */ |
| 2 | /* ==================================================================== | 2 | /* ==================================================================== |
| 3 | * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. |
| 4 | * | 4 | * |
| @@ -244,44 +244,22 @@ struct crypto_ex_data_st { | |||
| 244 | }; | 244 | }; |
| 245 | DECLARE_STACK_OF(void) | 245 | DECLARE_STACK_OF(void) |
| 246 | 246 | ||
| 247 | /* This stuff is basically class callback functions | 247 | #define CRYPTO_EX_INDEX_SSL 0 |
| 248 | * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */ | 248 | #define CRYPTO_EX_INDEX_SSL_CTX 1 |
| 249 | 249 | #define CRYPTO_EX_INDEX_SSL_SESSION 2 | |
| 250 | typedef struct crypto_ex_data_func_st { | 250 | #define CRYPTO_EX_INDEX_APP 3 |
| 251 | long argl; /* Arbitrary long */ | 251 | #define CRYPTO_EX_INDEX_BIO 4 |
| 252 | void *argp; /* Arbitrary void * */ | 252 | #define CRYPTO_EX_INDEX_DH 5 |
| 253 | CRYPTO_EX_new *new_func; | 253 | #define CRYPTO_EX_INDEX_DSA 6 |
| 254 | CRYPTO_EX_free *free_func; | 254 | #define CRYPTO_EX_INDEX_EC_KEY 7 |
| 255 | CRYPTO_EX_dup *dup_func; | 255 | #define CRYPTO_EX_INDEX_ENGINE 8 |
| 256 | } CRYPTO_EX_DATA_FUNCS; | 256 | #define CRYPTO_EX_INDEX_RSA 9 |
| 257 | 257 | #define CRYPTO_EX_INDEX_UI 10 | |
| 258 | DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) | 258 | #define CRYPTO_EX_INDEX_UI_METHOD 11 |
| 259 | 259 | #define CRYPTO_EX_INDEX_X509 12 | |
| 260 | /* Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA | 260 | #define CRYPTO_EX_INDEX_X509_STORE 13 |
| 261 | * entry. | 261 | #define CRYPTO_EX_INDEX_X509_STORE_CTX 14 |
| 262 | */ | 262 | #define CRYPTO_EX_INDEX__COUNT 15 |
| 263 | |||
| 264 | #define CRYPTO_EX_INDEX_BIO 0 | ||
| 265 | #define CRYPTO_EX_INDEX_SSL 1 | ||
| 266 | #define CRYPTO_EX_INDEX_SSL_CTX 2 | ||
| 267 | #define CRYPTO_EX_INDEX_SSL_SESSION 3 | ||
| 268 | #define CRYPTO_EX_INDEX_X509_STORE 4 | ||
| 269 | #define CRYPTO_EX_INDEX_X509_STORE_CTX 5 | ||
| 270 | #define CRYPTO_EX_INDEX_RSA 6 | ||
| 271 | #define CRYPTO_EX_INDEX_DSA 7 | ||
| 272 | #define CRYPTO_EX_INDEX_DH 8 | ||
| 273 | #define CRYPTO_EX_INDEX_ENGINE 9 | ||
| 274 | #define CRYPTO_EX_INDEX_X509 10 | ||
| 275 | #define CRYPTO_EX_INDEX_UI 11 | ||
| 276 | #define CRYPTO_EX_INDEX_ECDSA 12 | ||
| 277 | #define CRYPTO_EX_INDEX_ECDH 13 | ||
| 278 | #define CRYPTO_EX_INDEX_COMP 14 | ||
| 279 | #define CRYPTO_EX_INDEX_STORE 15 | ||
| 280 | #define CRYPTO_EX_INDEX_EC_KEY 16 | ||
| 281 | |||
| 282 | /* Dynamically assigned indexes start from this value (don't use directly, use | ||
| 283 | * via CRYPTO_ex_data_new_class). */ | ||
| 284 | #define CRYPTO_EX_INDEX_USER 100 | ||
| 285 | 263 | ||
| 286 | #ifndef LIBRESSL_INTERNAL | 264 | #ifndef LIBRESSL_INTERNAL |
| 287 | #define CRYPTO_malloc_init() (0) | 265 | #define CRYPTO_malloc_init() (0) |
| @@ -328,14 +306,6 @@ unsigned long OpenSSL_version_num(void); | |||
| 328 | const char *SSLeay_version(int type); | 306 | const char *SSLeay_version(int type); |
| 329 | unsigned long SSLeay(void); | 307 | unsigned long SSLeay(void); |
| 330 | 308 | ||
| 331 | /* An opaque type representing an implementation of "ex_data" support */ | ||
| 332 | typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; | ||
| 333 | /* Return an opaque pointer to the current "ex_data" implementation */ | ||
| 334 | const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void); | ||
| 335 | /* Sets the "ex_data" implementation to be used (if it's not too late) */ | ||
| 336 | int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); | ||
| 337 | /* Get a new "ex_data" class, and return the corresponding "class_index" */ | ||
| 338 | int CRYPTO_ex_data_new_class(void); | ||
| 339 | /* Within a given class, get/register a new index */ | 309 | /* Within a given class, get/register a new index */ |
| 340 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, | 310 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, |
| 341 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 311 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
diff --git a/src/lib/libcrypto/ex_data.c b/src/lib/libcrypto/ex_data.c index 71b2fc397b..17db16e58d 100644 --- a/src/lib/libcrypto/ex_data.c +++ b/src/lib/libcrypto/ex_data.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ex_data.c,v 1.22 2023/07/08 08:28:23 beck Exp $ */ | 1 | /* $OpenBSD: ex_data.c,v 1.23 2023/07/28 10:19:20 tb Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Overhaul notes; | 4 | * Overhaul notes; |
| @@ -141,6 +141,26 @@ | |||
| 141 | #include <openssl/err.h> | 141 | #include <openssl/err.h> |
| 142 | #include <openssl/lhash.h> | 142 | #include <openssl/lhash.h> |
| 143 | 143 | ||
| 144 | typedef struct crypto_ex_data_func_st { | ||
| 145 | long argl; /* Arbitrary long */ | ||
| 146 | void *argp; /* Arbitrary void * */ | ||
| 147 | CRYPTO_EX_new *new_func; | ||
| 148 | CRYPTO_EX_free *free_func; | ||
| 149 | CRYPTO_EX_dup *dup_func; | ||
| 150 | } CRYPTO_EX_DATA_FUNCS; | ||
| 151 | |||
| 152 | DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) | ||
| 153 | |||
| 154 | #define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) | ||
| 155 | #define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 156 | #define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) | ||
| 157 | #define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) | ||
| 158 | #define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) | ||
| 159 | #define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) | ||
| 160 | |||
| 161 | /* An opaque type representing an implementation of "ex_data" support */ | ||
| 162 | typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; | ||
| 163 | |||
| 144 | /* What an "implementation of ex_data functionality" looks like */ | 164 | /* What an "implementation of ex_data functionality" looks like */ |
| 145 | struct st_CRYPTO_EX_DATA_IMPL { | 165 | struct st_CRYPTO_EX_DATA_IMPL { |
| 146 | /*********************/ | 166 | /*********************/ |
| @@ -210,29 +230,6 @@ impl_check(void) | |||
| 210 | * invoking the function (which checks again inside a lock). */ | 230 | * invoking the function (which checks again inside a lock). */ |
| 211 | #define IMPL_CHECK if(!impl) impl_check(); | 231 | #define IMPL_CHECK if(!impl) impl_check(); |
| 212 | 232 | ||
| 213 | /* API functions to get/set the "ex_data" implementation */ | ||
| 214 | const CRYPTO_EX_DATA_IMPL * | ||
| 215 | CRYPTO_get_ex_data_implementation(void) | ||
| 216 | { | ||
| 217 | IMPL_CHECK | ||
| 218 | return impl; | ||
| 219 | } | ||
| 220 | LCRYPTO_ALIAS(CRYPTO_get_ex_data_implementation); | ||
| 221 | |||
| 222 | int | ||
| 223 | CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i) | ||
| 224 | { | ||
| 225 | int toret = 0; | ||
| 226 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | ||
| 227 | if (!impl) { | ||
| 228 | impl = i; | ||
| 229 | toret = 1; | ||
| 230 | } | ||
| 231 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | ||
| 232 | return toret; | ||
| 233 | } | ||
| 234 | LCRYPTO_ALIAS(CRYPTO_set_ex_data_implementation); | ||
| 235 | |||
| 236 | /****************************************************************************/ | 233 | /****************************************************************************/ |
| 237 | /* Interal (default) implementation of "ex_data" support. API functions are | 234 | /* Interal (default) implementation of "ex_data" support. API functions are |
| 238 | * further down. */ | 235 | * further down. */ |
| @@ -247,6 +244,7 @@ typedef struct st_ex_class_item { | |||
| 247 | } EX_CLASS_ITEM; | 244 | } EX_CLASS_ITEM; |
| 248 | 245 | ||
| 249 | /* When assigning new class indexes, this is our counter */ | 246 | /* When assigning new class indexes, this is our counter */ |
| 247 | #define CRYPTO_EX_INDEX_USER 100 | ||
| 250 | static int ex_class = CRYPTO_EX_INDEX_USER; | 248 | static int ex_class = CRYPTO_EX_INDEX_USER; |
| 251 | 249 | ||
| 252 | /* The global hash table of EX_CLASS_ITEM items */ | 250 | /* The global hash table of EX_CLASS_ITEM items */ |
| @@ -541,16 +539,6 @@ skip: | |||
| 541 | /* API functions that defer all "state" operations to the "ex_data" | 539 | /* API functions that defer all "state" operations to the "ex_data" |
| 542 | * implementation we have set. */ | 540 | * implementation we have set. */ |
| 543 | 541 | ||
| 544 | /* Obtain an index for a new class (not the same as getting a new index within | ||
| 545 | * an existing class - this is actually getting a new *class*) */ | ||
| 546 | int | ||
| 547 | CRYPTO_ex_data_new_class(void) | ||
| 548 | { | ||
| 549 | IMPL_CHECK | ||
| 550 | return EX_IMPL(new_class)(); | ||
| 551 | } | ||
| 552 | LCRYPTO_ALIAS(CRYPTO_ex_data_new_class); | ||
| 553 | |||
| 554 | /* Release all "ex_data" state to prevent memory leaks. This can't be made | 542 | /* Release all "ex_data" state to prevent memory leaks. This can't be made |
| 555 | * thread-safe without overhauling a lot of stuff, and shouldn't really be | 543 | * thread-safe without overhauling a lot of stuff, and shouldn't really be |
| 556 | * called under potential race-conditions anyway (it's for program shutdown | 544 | * called under potential race-conditions anyway (it's for program shutdown |
diff --git a/src/lib/libcrypto/hidden/openssl/crypto.h b/src/lib/libcrypto/hidden/openssl/crypto.h index 69ffa9480b..dc0b7a02b1 100644 --- a/src/lib/libcrypto/hidden/openssl/crypto.h +++ b/src/lib/libcrypto/hidden/openssl/crypto.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: crypto.h,v 1.1 2023/07/08 08:28:23 beck Exp $ */ | 1 | /* $OpenBSD: crypto.h,v 1.2 2023/07/28 10:19:20 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2023 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2023 Bob Beck <beck@openbsd.org> |
| 4 | * | 4 | * |
| @@ -29,9 +29,6 @@ LCRYPTO_USED(OpenSSL_version); | |||
| 29 | LCRYPTO_USED(OpenSSL_version_num); | 29 | LCRYPTO_USED(OpenSSL_version_num); |
| 30 | LCRYPTO_USED(SSLeay_version); | 30 | LCRYPTO_USED(SSLeay_version); |
| 31 | LCRYPTO_USED(SSLeay); | 31 | LCRYPTO_USED(SSLeay); |
| 32 | LCRYPTO_USED(CRYPTO_get_ex_data_implementation); | ||
| 33 | LCRYPTO_USED(CRYPTO_set_ex_data_implementation); | ||
| 34 | LCRYPTO_USED(CRYPTO_ex_data_new_class); | ||
| 35 | LCRYPTO_USED(CRYPTO_get_ex_new_index); | 32 | LCRYPTO_USED(CRYPTO_get_ex_new_index); |
| 36 | LCRYPTO_USED(CRYPTO_new_ex_data); | 33 | LCRYPTO_USED(CRYPTO_new_ex_data); |
| 37 | LCRYPTO_USED(CRYPTO_dup_ex_data); | 34 | LCRYPTO_USED(CRYPTO_dup_ex_data); |
diff --git a/src/lib/libcrypto/stack/safestack.h b/src/lib/libcrypto/stack/safestack.h index c58ebea449..5b8ffed6a1 100644 --- a/src/lib/libcrypto/stack/safestack.h +++ b/src/lib/libcrypto/stack/safestack.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: safestack.h,v 1.26 2023/04/25 18:53:42 tb Exp $ */ | 1 | /* $OpenBSD: safestack.h,v 1.27 2023/07/28 10:19:20 tb Exp $ */ |
| 2 | /* ==================================================================== | 2 | /* ==================================================================== |
| 3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. |
| 4 | * | 4 | * |
| @@ -619,28 +619,6 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) | |||
| 619 | #define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) | 619 | #define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) |
| 620 | #define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) | 620 | #define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) |
| 621 | 621 | ||
| 622 | #define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp)) | ||
| 623 | #define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) | ||
| 624 | #define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 625 | #define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 626 | #define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) | ||
| 627 | #define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) | ||
| 628 | #define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 629 | #define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) | ||
| 630 | #define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val)) | ||
| 631 | #define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val)) | ||
| 632 | #define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val)) | ||
| 633 | #define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i)) | ||
| 634 | #define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr)) | ||
| 635 | #define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i)) | ||
| 636 | #define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp)) | ||
| 637 | #define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st) | ||
| 638 | #define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) | ||
| 639 | #define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 640 | #define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 641 | #define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 642 | #define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) | ||
| 643 | |||
| 644 | #define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) | 622 | #define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) |
| 645 | #define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) | 623 | #define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) |
| 646 | #define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) | 624 | #define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) |
