diff options
author | tb <> | 2023-07-28 10:19:20 +0000 |
---|---|---|
committer | tb <> | 2023-07-28 10:19:20 +0000 |
commit | 80044b19f0ece8df72ab24e3c1d89b8ca3d14bf7 (patch) | |
tree | 2ee287d6ab4c68a054e3379b662b9a6d1a67c316 | |
parent | 39fd8a543e6f18ed3accea6db537f4a36fdb017d (diff) | |
download | openbsd-80044b19f0ece8df72ab24e3c1d89b8ca3d14bf7.tar.gz openbsd-80044b19f0ece8df72ab24e3c1d89b8ca3d14bf7.tar.bz2 openbsd-80044b19f0ece8df72ab24e3c1d89b8ca3d14bf7.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
-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)) |