summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/stack
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/stack')
-rw-r--r--src/lib/libcrypto/stack/Makefile.ssl5
-rw-r--r--src/lib/libcrypto/stack/safestack.h1137
-rw-r--r--src/lib/libcrypto/stack/stack.c73
-rw-r--r--src/lib/libcrypto/stack/stack.h18
4 files changed, 1130 insertions, 103 deletions
diff --git a/src/lib/libcrypto/stack/Makefile.ssl b/src/lib/libcrypto/stack/Makefile.ssl
index 64a93b33ac..86ed928750 100644
--- a/src/lib/libcrypto/stack/Makefile.ssl
+++ b/src/lib/libcrypto/stack/Makefile.ssl
@@ -81,6 +81,7 @@ clean:
81stack.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h 81stack.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
82stack.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h 82stack.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
83stack.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h 83stack.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
84stack.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h 84stack.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
85stack.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h 85stack.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
86stack.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
86stack.o: ../cryptlib.h 87stack.o: ../cryptlib.h
diff --git a/src/lib/libcrypto/stack/safestack.h b/src/lib/libcrypto/stack/safestack.h
index 38934981e3..9fa63e1be5 100644
--- a/src/lib/libcrypto/stack/safestack.h
+++ b/src/lib/libcrypto/stack/safestack.h
@@ -57,73 +57,1078 @@
57 57
58#include <openssl/stack.h> 58#include <openssl/stack.h>
59 59
60#define STACK_OF(type) STACK_##type 60#ifdef DEBUG_SAFESTACK
61
62#define STACK_OF(type) struct stack_st_##type
63#define PREDECLARE_STACK_OF(type) STACK_OF(type);
61 64
62#define DECLARE_STACK_OF(type) \ 65#define DECLARE_STACK_OF(type) \
63typedef struct stack_st_##type \ 66STACK_OF(type) \
64 { \ 67 { \
65 STACK stack; \ 68 STACK stack; \
66 } STACK_OF(type); \ 69 };
67STACK_OF(type) *sk_##type##_new(int (*cmp)(type **,type **)); \ 70
68STACK_OF(type) *sk_##type##_new_null(void); \ 71#define IMPLEMENT_STACK_OF(type) /* nada (obsolete in new safestack approach)*/
69void sk_##type##_free(STACK_OF(type) *sk); \ 72
70int sk_##type##_num(const STACK_OF(type) *sk); \ 73/* SKM_sk_... stack macros are internal to safestack.h:
71type *sk_##type##_value(const STACK_OF(type) *sk,int n); \ 74 * never use them directly, use sk_<type>_... instead */
72type *sk_##type##_set(STACK_OF(type) *sk,int n,type *v); \ 75#define SKM_sk_new(type, cmp) \
73void sk_##type##_zero(STACK_OF(type) *sk); \ 76 ((STACK_OF(type) * (*)(int (*)(const type * const *, const type * const *)))sk_new)(cmp)
74int sk_##type##_push(STACK_OF(type) *sk,type *v); \ 77#define SKM_sk_new_null(type) \
75int sk_##type##_unshift(STACK_OF(type) *sk,type *v); \ 78 ((STACK_OF(type) * (*)(void))sk_new_null)()
76int sk_##type##_find(STACK_OF(type) *sk,type *v); \ 79#define SKM_sk_free(type, st) \
77type *sk_##type##_delete(STACK_OF(type) *sk,int n); \ 80 ((void (*)(STACK_OF(type) *))sk_free)(st)
78void sk_##type##_delete_ptr(STACK_OF(type) *sk,type *v); \ 81#define SKM_sk_num(type, st) \
79int sk_##type##_insert(STACK_OF(type) *sk,type *v,int n); \ 82 ((int (*)(const STACK_OF(type) *))sk_num)(st)
80int (*sk_##type##_set_cmp_func(STACK_OF(type) *sk, \ 83#define SKM_sk_value(type, st,i) \
81 int (*cmp)(type **,type **)))(type **,type **); \ 84 ((type * (*)(const STACK_OF(type) *, int))sk_value)(st, i)
82STACK_OF(type) *sk_##type##_dup(STACK_OF(type) *sk); \ 85#define SKM_sk_set(type, st,i,val) \
83void sk_##type##_pop_free(STACK_OF(type) *sk,void (*func)(type *)); \ 86 ((type * (*)(STACK_OF(type) *, int, type *))sk_set)(st, i, val)
84type *sk_##type##_shift(STACK_OF(type) *sk); \ 87#define SKM_sk_zero(type, st) \
85type *sk_##type##_pop(STACK_OF(type) *sk); \ 88 ((void (*)(STACK_OF(type) *))sk_zero)(st)
86void sk_##type##_sort(STACK_OF(type) *sk); 89#define SKM_sk_push(type, st,val) \
87 90 ((int (*)(STACK_OF(type) *, type *))sk_push)(st, val)
88#define IMPLEMENT_STACK_OF(type) \ 91#define SKM_sk_unshift(type, st,val) \
89STACK_OF(type) *sk_##type##_new(int (*cmp)(type **,type **)) \ 92 ((int (*)(STACK_OF(type) *, type *))sk_unshift)(st, val)
90 { return (STACK_OF(type) *)sk_new(cmp); } \ 93#define SKM_sk_find(type, st,val) \
91STACK_OF(type) *sk_##type##_new_null() \ 94 ((int (*)(STACK_OF(type) *, type *))sk_find)(st, val)
92 { return (STACK_OF(type) *)sk_new_null(); } \ 95#define SKM_sk_delete(type, st,i) \
93void sk_##type##_free(STACK_OF(type) *sk) \ 96 ((type * (*)(STACK_OF(type) *, int))sk_delete)(st, i)
94 { sk_free((STACK *)sk); } \ 97#define SKM_sk_delete_ptr(type, st,ptr) \
95int sk_##type##_num(const STACK_OF(type) *sk) \ 98 ((type * (*)(STACK_OF(type) *, type *))sk_delete_ptr)(st, ptr)
96 { return M_sk_num((const STACK *)sk); } \ 99#define SKM_sk_insert(type, st,val,i) \
97type *sk_##type##_value(const STACK_OF(type) *sk,int n) \ 100 ((int (*)(STACK_OF(type) *, type *, int))sk_insert)(st, val, i)
98 { return (type *)sk_value((STACK *)sk,n); } \ 101#define SKM_sk_set_cmp_func(type, st,cmp) \
99type *sk_##type##_set(STACK_OF(type) *sk,int n,type *v) \ 102 ((int (*(*)(STACK_OF(type) *, int (*)(const type * const *, const type * const *))) \
100 { return (type *)(sk_set((STACK *)sk,n,(char *)v)); } \ 103 (const type * const *, const type * const *))sk_set_cmp_func)\
101void sk_##type##_zero(STACK_OF(type) *sk) \ 104 (st, cmp)
102 { sk_zero((STACK *)sk); } \ 105#define SKM_sk_dup(type, st) \
103int sk_##type##_push(STACK_OF(type) *sk,type *v) \ 106 ((STACK_OF(type) *(*)(STACK_OF(type) *))sk_dup)(st)
104 { return sk_push((STACK *)sk,(char *)v); } \ 107#define SKM_sk_pop_free(type, st,free_func) \
105int sk_##type##_unshift(STACK_OF(type) *sk,type *v) \ 108 ((void (*)(STACK_OF(type) *, void (*)(type *)))sk_pop_free)\
106 { return sk_unshift((STACK *)sk,(char *)v); } \ 109 (st, free_func)
107int sk_##type##_find(STACK_OF(type) *sk,type *v) \ 110#define SKM_sk_shift(type, st) \
108 { return sk_find((STACK *)sk,(char *)v); } \ 111 ((type * (*)(STACK_OF(type) *))sk_shift)(st)
109type *sk_##type##_delete(STACK_OF(type) *sk,int n) \ 112#define SKM_sk_pop(type, st) \
110 { return (type *)sk_delete((STACK *)sk,n); } \ 113 ((type * (*)(STACK_OF(type) *))sk_pop)(st)
111void sk_##type##_delete_ptr(STACK_OF(type) *sk,type *v) \ 114#define SKM_sk_sort(type, st) \
112 { sk_delete_ptr((STACK *)sk,(char *)v); } \ 115 ((void (*)(STACK_OF(type) *))sk_sort)(st)
113int sk_##type##_insert(STACK_OF(type) *sk,type *v,int n) \ 116
114 { return sk_insert((STACK *)sk,(char *)v,n); } \ 117#define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
115int (*sk_##type##_set_cmp_func(STACK_OF(type) *sk, \ 118 ((STACK_OF(type) * (*) (STACK_OF(type) **,unsigned char **, long , \
116 int (*cmp)(type **,type **)))(type **,type **) \ 119 type *(*)(type **, unsigned char **,long), \
117 { return (int (*)(type **,type **))sk_set_cmp_func((STACK *)sk,cmp); } \ 120 void (*)(type *), int ,int )) d2i_ASN1_SET) \
118STACK_OF(type) *sk_##type##_dup(STACK_OF(type) *sk) \ 121 (st,pp,length, d2i_func, free_func, ex_tag,ex_class)
119 { return (STACK_OF(type) *)sk_dup((STACK *)sk); } \ 122#define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \
120void sk_##type##_pop_free(STACK_OF(type) *sk,void (*func)(type *)) \ 123 ((int (*)(STACK_OF(type) *,unsigned char **, \
121 { sk_pop_free((STACK *)sk,func); } \ 124 int (*)(type *,unsigned char **), int , int , int)) i2d_ASN1_SET) \
122type *sk_##type##_shift(STACK_OF(type) *sk) \ 125 (st,pp,i2d_func,ex_tag,ex_class,is_set)
123 { return (type *)sk_shift((STACK *)sk); } \ 126
124type *sk_##type##_pop(STACK_OF(type) *sk) \ 127#define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \
125 { return (type *)sk_pop((STACK *)sk); } \ 128 ((unsigned char *(*)(STACK_OF(type) *, \
126void sk_##type##_sort(STACK_OF(type) *sk) \ 129 int (*)(type *,unsigned char **), unsigned char **,int *)) ASN1_seq_pack) \
127 { sk_sort((STACK *)sk); } 130 (st, i2d_func, buf, len)
128 131#define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \
129#endif /* ndef HEADER_SAFESTACK_H */ 132 ((STACK_OF(type) * (*)(unsigned char *,int, \
133 type *(*)(type **,unsigned char **, long), \
134 void (*)(type *)))ASN1_seq_unpack) \
135 (buf,len,d2i_func, free_func)
136
137#define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \
138 ((STACK_OF(type) * (*)(X509_ALGOR *, \
139 type *(*)(type **, unsigned char **, long), void (*)(type *), \
140 const char *, int, \
141 ASN1_STRING *, int))PKCS12_decrypt_d2i) \
142 (algor,d2i_func,free_func,pass,passlen,oct,seq)
143
144#else
145
146#define STACK_OF(type) STACK
147#define PREDECLARE_STACK_OF(type) /* nada */
148#define DECLARE_STACK_OF(type) /* nada */
149#define IMPLEMENT_STACK_OF(type) /* nada */
150
151#define SKM_sk_new(type, cmp) \
152 sk_new((int (*)(const char * const *, const char * const *))(cmp))
153#define SKM_sk_new_null(type) \
154 sk_new_null()
155#define SKM_sk_free(type, st) \
156 sk_free(st)
157#define SKM_sk_num(type, st) \
158 sk_num(st)
159#define SKM_sk_value(type, st,i) \
160 ((type *)sk_value(st, i))
161#define SKM_sk_set(type, st,i,val) \
162 ((type *)sk_set(st, i,(char *)val))
163#define SKM_sk_zero(type, st) \
164 sk_zero(st)
165#define SKM_sk_push(type, st,val) \
166 sk_push(st, (char *)val)
167#define SKM_sk_unshift(type, st,val) \
168 sk_unshift(st, val)
169#define SKM_sk_find(type, st,val) \
170 sk_find(st, (char *)val)
171#define SKM_sk_delete(type, st,i) \
172 ((type *)sk_delete(st, i))
173#define SKM_sk_delete_ptr(type, st,ptr) \
174 ((type *)sk_delete_ptr(st,(char *)ptr))
175#define SKM_sk_insert(type, st,val,i) \
176 sk_insert(st, (char *)val, i)
177#define SKM_sk_set_cmp_func(type, st,cmp) \
178 ((int (*)(const type * const *,const type * const *)) \
179 sk_set_cmp_func(st, (int (*)(const char * const *, const char * const *))(cmp)))
180#define SKM_sk_dup(type, st) \
181 sk_dup(st)
182#define SKM_sk_pop_free(type, st,free_func) \
183 sk_pop_free(st, (void (*)(void *))free_func)
184#define SKM_sk_shift(type, st) \
185 ((type *)sk_shift(st))
186#define SKM_sk_pop(type, st) \
187 ((type *)sk_pop(st))
188#define SKM_sk_sort(type, st) \
189 sk_sort(st)
190
191#define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
192 d2i_ASN1_SET(st,pp,length, (char *(*)())d2i_func, (void (*)(void *))free_func, ex_tag,ex_class)
193#define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \
194 i2d_ASN1_SET(st,pp,i2d_func,ex_tag,ex_class,is_set)
195
196#define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \
197 ASN1_seq_pack(st, i2d_func, buf, len)
198#define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \
199 ASN1_seq_unpack(buf,len,(char *(*)())d2i_func, (void(*)(void *))free_func)
200
201#define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \
202 ((STACK *)PKCS12_decrypt_d2i(algor,(char *(*)())d2i_func, (void(*)(void *))free_func,pass,passlen,oct,seq))
203
204#endif
205
206/* This block of defines is updated by util/mkstack.pl, please do not touch! */
207#define sk_ACCESS_DESCRIPTION_new(st) SKM_sk_new(ACCESS_DESCRIPTION, (st))
208#define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION)
209#define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st))
210#define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st))
211#define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i))
212#define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val))
213#define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st))
214#define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val))
215#define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val))
216#define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val))
217#define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i))
218#define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr))
219#define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i))
220#define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp))
221#define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st)
222#define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func))
223#define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st))
224#define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st))
225#define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st))
226
227#define sk_ASN1_INTEGER_new(st) SKM_sk_new(ASN1_INTEGER, (st))
228#define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER)
229#define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st))
230#define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st))
231#define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i))
232#define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val))
233#define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st))
234#define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val))
235#define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val))
236#define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val))
237#define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i))
238#define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr))
239#define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i))
240#define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp))
241#define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st)
242#define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func))
243#define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st))
244#define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st))
245#define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st))
246
247#define sk_ASN1_OBJECT_new(st) SKM_sk_new(ASN1_OBJECT, (st))
248#define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT)
249#define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st))
250#define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st))
251#define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i))
252#define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val))
253#define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st))
254#define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val))
255#define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val))
256#define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val))
257#define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i))
258#define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr))
259#define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i))
260#define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp))
261#define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st)
262#define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func))
263#define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st))
264#define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st))
265#define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st))
266
267#define sk_ASN1_STRING_TABLE_new(st) SKM_sk_new(ASN1_STRING_TABLE, (st))
268#define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE)
269#define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st))
270#define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st))
271#define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i))
272#define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val))
273#define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st))
274#define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val))
275#define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val))
276#define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val))
277#define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i))
278#define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr))
279#define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i))
280#define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp))
281#define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st)
282#define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func))
283#define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st))
284#define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st))
285#define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st))
286
287#define sk_ASN1_TYPE_new(st) SKM_sk_new(ASN1_TYPE, (st))
288#define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE)
289#define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st))
290#define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st))
291#define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i))
292#define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val))
293#define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st))
294#define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val))
295#define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val))
296#define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val))
297#define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i))
298#define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr))
299#define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i))
300#define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp))
301#define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st)
302#define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func))
303#define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st))
304#define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st))
305#define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st))
306
307#define sk_BIO_new(st) SKM_sk_new(BIO, (st))
308#define sk_BIO_new_null() SKM_sk_new_null(BIO)
309#define sk_BIO_free(st) SKM_sk_free(BIO, (st))
310#define sk_BIO_num(st) SKM_sk_num(BIO, (st))
311#define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i))
312#define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val))
313#define sk_BIO_zero(st) SKM_sk_zero(BIO, (st))
314#define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val))
315#define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val))
316#define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val))
317#define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i))
318#define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr))
319#define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i))
320#define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp))
321#define sk_BIO_dup(st) SKM_sk_dup(BIO, st)
322#define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func))
323#define sk_BIO_shift(st) SKM_sk_shift(BIO, (st))
324#define sk_BIO_pop(st) SKM_sk_pop(BIO, (st))
325#define sk_BIO_sort(st) SKM_sk_sort(BIO, (st))
326
327#define sk_CONF_VALUE_new(st) SKM_sk_new(CONF_VALUE, (st))
328#define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE)
329#define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st))
330#define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st))
331#define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i))
332#define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val))
333#define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st))
334#define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val))
335#define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val))
336#define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val))
337#define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i))
338#define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr))
339#define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i))
340#define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp))
341#define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st)
342#define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func))
343#define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st))
344#define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st))
345#define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st))
346
347#define sk_CRYPTO_EX_DATA_FUNCS_new(st) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (st))
348#define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS)
349#define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st))
350#define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st))
351#define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i))
352#define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val))
353#define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st))
354#define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val))
355#define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val))
356#define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val))
357#define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i))
358#define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr))
359#define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i))
360#define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp))
361#define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st)
362#define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func))
363#define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st))
364#define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st))
365#define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st))
366
367#define sk_CRYPTO_dynlock_new(st) SKM_sk_new(CRYPTO_dynlock, (st))
368#define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock)
369#define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st))
370#define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st))
371#define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i))
372#define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val))
373#define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st))
374#define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val))
375#define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val))
376#define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val))
377#define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i))
378#define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr))
379#define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i))
380#define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp))
381#define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st)
382#define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func))
383#define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st))
384#define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st))
385#define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st))
386
387#define sk_DIST_POINT_new(st) SKM_sk_new(DIST_POINT, (st))
388#define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT)
389#define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st))
390#define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st))
391#define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i))
392#define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val))
393#define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st))
394#define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val))
395#define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val))
396#define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val))
397#define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i))
398#define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr))
399#define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i))
400#define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp))
401#define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st)
402#define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func))
403#define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st))
404#define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st))
405#define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st))
406
407#define sk_GENERAL_NAME_new(st) SKM_sk_new(GENERAL_NAME, (st))
408#define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME)
409#define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st))
410#define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st))
411#define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i))
412#define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val))
413#define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st))
414#define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val))
415#define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val))
416#define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val))
417#define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i))
418#define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr))
419#define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i))
420#define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp))
421#define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st)
422#define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func))
423#define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st))
424#define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st))
425#define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st))
426
427#define sk_MIME_HEADER_new(st) SKM_sk_new(MIME_HEADER, (st))
428#define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER)
429#define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st))
430#define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st))
431#define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i))
432#define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val))
433#define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st))
434#define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val))
435#define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val))
436#define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val))
437#define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i))
438#define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr))
439#define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i))
440#define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp))
441#define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st)
442#define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func))
443#define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st))
444#define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st))
445#define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st))
446
447#define sk_MIME_PARAM_new(st) SKM_sk_new(MIME_PARAM, (st))
448#define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM)
449#define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st))
450#define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st))
451#define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i))
452#define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val))
453#define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st))
454#define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val))
455#define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val))
456#define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val))
457#define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i))
458#define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr))
459#define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i))
460#define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp))
461#define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st)
462#define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func))
463#define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st))
464#define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st))
465#define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st))
466
467#define sk_NAME_FUNCS_new(st) SKM_sk_new(NAME_FUNCS, (st))
468#define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS)
469#define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st))
470#define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st))
471#define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i))
472#define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val))
473#define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st))
474#define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val))
475#define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val))
476#define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val))
477#define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i))
478#define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr))
479#define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i))
480#define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp))
481#define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st)
482#define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func))
483#define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st))
484#define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st))
485#define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st))
486
487#define sk_PKCS12_SAFEBAG_new(st) SKM_sk_new(PKCS12_SAFEBAG, (st))
488#define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG)
489#define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st))
490#define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st))
491#define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i))
492#define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val))
493#define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st))
494#define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val))
495#define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val))
496#define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val))
497#define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i))
498#define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr))
499#define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i))
500#define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp))
501#define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st)
502#define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func))
503#define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st))
504#define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st))
505#define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st))
506
507#define sk_PKCS7_new(st) SKM_sk_new(PKCS7, (st))
508#define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7)
509#define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st))
510#define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st))
511#define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i))
512#define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val))
513#define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st))
514#define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val))
515#define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val))
516#define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val))
517#define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i))
518#define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr))
519#define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i))
520#define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp))
521#define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st)
522#define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func))
523#define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st))
524#define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st))
525#define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st))
526
527#define sk_PKCS7_RECIP_INFO_new(st) SKM_sk_new(PKCS7_RECIP_INFO, (st))
528#define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO)
529#define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st))
530#define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st))
531#define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i))
532#define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val))
533#define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st))
534#define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val))
535#define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val))
536#define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val))
537#define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i))
538#define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr))
539#define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i))
540#define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp))
541#define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st)
542#define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func))
543#define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st))
544#define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st))
545#define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st))
546
547#define sk_PKCS7_SIGNER_INFO_new(st) SKM_sk_new(PKCS7_SIGNER_INFO, (st))
548#define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO)
549#define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st))
550#define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st))
551#define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i))
552#define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val))
553#define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st))
554#define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val))
555#define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val))
556#define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val))
557#define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i))
558#define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr))
559#define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i))
560#define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp))
561#define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st)
562#define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func))
563#define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st))
564#define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st))
565#define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st))
566
567#define sk_POLICYINFO_new(st) SKM_sk_new(POLICYINFO, (st))
568#define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO)
569#define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st))
570#define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st))
571#define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i))
572#define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val))
573#define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st))
574#define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val))
575#define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val))
576#define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val))
577#define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i))
578#define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr))
579#define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i))
580#define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp))
581#define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st)
582#define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func))
583#define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st))
584#define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st))
585#define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st))
586
587#define sk_POLICYQUALINFO_new(st) SKM_sk_new(POLICYQUALINFO, (st))
588#define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO)
589#define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st))
590#define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st))
591#define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i))
592#define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val))
593#define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st))
594#define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val))
595#define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val))
596#define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val))
597#define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i))
598#define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr))
599#define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i))
600#define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp))
601#define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st)
602#define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func))
603#define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st))
604#define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st))
605#define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st))
606
607#define sk_SSL_CIPHER_new(st) SKM_sk_new(SSL_CIPHER, (st))
608#define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER)
609#define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st))
610#define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st))
611#define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i))
612#define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val))
613#define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st))
614#define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val))
615#define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val))
616#define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val))
617#define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i))
618#define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr))
619#define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i))
620#define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp))
621#define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st)
622#define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func))
623#define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st))
624#define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st))
625#define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st))
626
627#define sk_SSL_COMP_new(st) SKM_sk_new(SSL_COMP, (st))
628#define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP)
629#define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st))
630#define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st))
631#define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i))
632#define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val))
633#define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st))
634#define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val))
635#define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val))
636#define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val))
637#define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i))
638#define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr))
639#define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i))
640#define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp))
641#define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st)
642#define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func))
643#define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st))
644#define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st))
645#define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st))
646
647#define sk_SXNETID_new(st) SKM_sk_new(SXNETID, (st))
648#define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID)
649#define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st))
650#define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st))
651#define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i))
652#define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val))
653#define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st))
654#define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val))
655#define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val))
656#define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val))
657#define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i))
658#define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr))
659#define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i))
660#define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp))
661#define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st)
662#define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func))
663#define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st))
664#define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st))
665#define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st))
666
667#define sk_X509_new(st) SKM_sk_new(X509, (st))
668#define sk_X509_new_null() SKM_sk_new_null(X509)
669#define sk_X509_free(st) SKM_sk_free(X509, (st))
670#define sk_X509_num(st) SKM_sk_num(X509, (st))
671#define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i))
672#define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val))
673#define sk_X509_zero(st) SKM_sk_zero(X509, (st))
674#define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val))
675#define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val))
676#define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val))
677#define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i))
678#define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr))
679#define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i))
680#define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp))
681#define sk_X509_dup(st) SKM_sk_dup(X509, st)
682#define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func))
683#define sk_X509_shift(st) SKM_sk_shift(X509, (st))
684#define sk_X509_pop(st) SKM_sk_pop(X509, (st))
685#define sk_X509_sort(st) SKM_sk_sort(X509, (st))
686
687#define sk_X509V3_EXT_METHOD_new(st) SKM_sk_new(X509V3_EXT_METHOD, (st))
688#define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD)
689#define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st))
690#define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st))
691#define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i))
692#define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val))
693#define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st))
694#define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val))
695#define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val))
696#define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val))
697#define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i))
698#define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr))
699#define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i))
700#define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp))
701#define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st)
702#define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func))
703#define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st))
704#define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st))
705#define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st))
706
707#define sk_X509_ALGOR_new(st) SKM_sk_new(X509_ALGOR, (st))
708#define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR)
709#define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st))
710#define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st))
711#define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i))
712#define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val))
713#define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st))
714#define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val))
715#define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val))
716#define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val))
717#define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i))
718#define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr))
719#define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i))
720#define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp))
721#define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st)
722#define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func))
723#define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st))
724#define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st))
725#define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st))
726
727#define sk_X509_ATTRIBUTE_new(st) SKM_sk_new(X509_ATTRIBUTE, (st))
728#define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE)
729#define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st))
730#define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st))
731#define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i))
732#define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val))
733#define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st))
734#define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val))
735#define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val))
736#define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val))
737#define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i))
738#define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr))
739#define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i))
740#define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp))
741#define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st)
742#define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func))
743#define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st))
744#define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st))
745#define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st))
746
747#define sk_X509_CRL_new(st) SKM_sk_new(X509_CRL, (st))
748#define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL)
749#define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st))
750#define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st))
751#define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i))
752#define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val))
753#define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st))
754#define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val))
755#define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val))
756#define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val))
757#define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i))
758#define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr))
759#define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i))
760#define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp))
761#define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st)
762#define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func))
763#define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st))
764#define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st))
765#define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st))
766
767#define sk_X509_EXTENSION_new(st) SKM_sk_new(X509_EXTENSION, (st))
768#define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION)
769#define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st))
770#define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st))
771#define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i))
772#define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val))
773#define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st))
774#define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val))
775#define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val))
776#define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val))
777#define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i))
778#define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr))
779#define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i))
780#define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp))
781#define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st)
782#define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func))
783#define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st))
784#define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st))
785#define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st))
786
787#define sk_X509_INFO_new(st) SKM_sk_new(X509_INFO, (st))
788#define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO)
789#define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st))
790#define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st))
791#define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i))
792#define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val))
793#define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st))
794#define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val))
795#define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val))
796#define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val))
797#define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i))
798#define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr))
799#define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i))
800#define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp))
801#define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st)
802#define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func))
803#define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st))
804#define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st))
805#define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st))
806
807#define sk_X509_LOOKUP_new(st) SKM_sk_new(X509_LOOKUP, (st))
808#define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP)
809#define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st))
810#define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st))
811#define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i))
812#define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val))
813#define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st))
814#define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val))
815#define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val))
816#define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val))
817#define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i))
818#define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr))
819#define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i))
820#define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp))
821#define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st)
822#define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func))
823#define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st))
824#define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st))
825#define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st))
826
827#define sk_X509_NAME_new(st) SKM_sk_new(X509_NAME, (st))
828#define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME)
829#define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st))
830#define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st))
831#define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i))
832#define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val))
833#define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st))
834#define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val))
835#define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val))
836#define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val))
837#define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i))
838#define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr))
839#define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i))
840#define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp))
841#define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st)
842#define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func))
843#define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st))
844#define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st))
845#define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st))
846
847#define sk_X509_NAME_ENTRY_new(st) SKM_sk_new(X509_NAME_ENTRY, (st))
848#define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY)
849#define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st))
850#define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st))
851#define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i))
852#define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val))
853#define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st))
854#define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val))
855#define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val))
856#define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val))
857#define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i))
858#define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr))
859#define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i))
860#define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp))
861#define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st)
862#define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func))
863#define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st))
864#define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st))
865#define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st))
866
867#define sk_X509_OBJECT_new(st) SKM_sk_new(X509_OBJECT, (st))
868#define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT)
869#define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st))
870#define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st))
871#define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i))
872#define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val))
873#define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st))
874#define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val))
875#define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val))
876#define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val))
877#define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i))
878#define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr))
879#define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i))
880#define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp))
881#define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st)
882#define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func))
883#define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st))
884#define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st))
885#define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st))
886
887#define sk_X509_PURPOSE_new(st) SKM_sk_new(X509_PURPOSE, (st))
888#define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE)
889#define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st))
890#define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st))
891#define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i))
892#define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val))
893#define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st))
894#define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val))
895#define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val))
896#define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val))
897#define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i))
898#define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr))
899#define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i))
900#define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp))
901#define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st)
902#define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func))
903#define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st))
904#define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st))
905#define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st))
906
907#define sk_X509_REVOKED_new(st) SKM_sk_new(X509_REVOKED, (st))
908#define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED)
909#define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st))
910#define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st))
911#define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i))
912#define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val))
913#define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st))
914#define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val))
915#define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val))
916#define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val))
917#define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i))
918#define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr))
919#define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i))
920#define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp))
921#define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st)
922#define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func))
923#define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st))
924#define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st))
925#define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st))
926
927#define sk_X509_TRUST_new(st) SKM_sk_new(X509_TRUST, (st))
928#define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST)
929#define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st))
930#define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st))
931#define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i))
932#define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val))
933#define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st))
934#define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val))
935#define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val))
936#define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val))
937#define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i))
938#define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr))
939#define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i))
940#define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp))
941#define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st)
942#define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func))
943#define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st))
944#define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st))
945#define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st))
946
947#define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
948 SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
949#define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \
950 SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
951#define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \
952 SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len))
953#define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \
954 SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func))
955
956#define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
957 SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
958#define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \
959 SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
960#define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \
961 SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len))
962#define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \
963 SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func))
964
965#define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
966 SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
967#define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \
968 SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
969#define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \
970 SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len))
971#define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \
972 SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func))
973
974#define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
975 SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
976#define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \
977 SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
978#define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \
979 SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len))
980#define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \
981 SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func))
982
983#define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
984 SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
985#define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \
986 SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
987#define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \
988 SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len))
989#define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \
990 SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func))
991
992#define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
993 SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
994#define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \
995 SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
996#define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \
997 SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len))
998#define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \
999 SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func))
1000
1001#define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1002 SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1003#define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1004 SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1005#define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \
1006 SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len))
1007#define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \
1008 SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func))
1009
1010#define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1011 SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1012#define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1013 SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1014#define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \
1015 SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len))
1016#define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \
1017 SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func))
1018
1019#define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1020 SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1021#define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1022 SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1023#define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \
1024 SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len))
1025#define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \
1026 SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func))
1027
1028#define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1029 SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1030#define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1031 SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1032#define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \
1033 SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len))
1034#define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \
1035 SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func))
1036
1037#define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1038 SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1039#define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1040 SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1041#define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \
1042 SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len))
1043#define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \
1044 SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func))
1045
1046#define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1047 SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1048#define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1049 SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1050#define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \
1051 SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len))
1052#define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \
1053 SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func))
1054
1055#define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1056 SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1057#define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1058 SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1059#define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \
1060 SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len))
1061#define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \
1062 SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func))
1063
1064#define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1065 SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1066#define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1067 SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1068#define ASN1_seq_pack_X509(st, i2d_func, buf, len) \
1069 SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len))
1070#define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \
1071 SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func))
1072
1073#define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1074 SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1075#define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1076 SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1077#define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \
1078 SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len))
1079#define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \
1080 SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func))
1081
1082#define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1083 SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1084#define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1085 SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1086#define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \
1087 SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len))
1088#define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \
1089 SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func))
1090
1091#define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1092 SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1093#define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1094 SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1095#define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \
1096 SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len))
1097#define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \
1098 SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func))
1099
1100#define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1101 SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1102#define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1103 SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1104#define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \
1105 SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len))
1106#define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \
1107 SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func))
1108
1109#define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1110 SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1111#define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1112 SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1113#define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \
1114 SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len))
1115#define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \
1116 SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func))
1117
1118#define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \
1119 SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))
1120#define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \
1121 SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
1122#define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \
1123 SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len))
1124#define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \
1125 SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func))
1126
1127#define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \
1128 SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq))
1129
1130#define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \
1131 SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq))
1132/* End of util/mkstack.pl block, you may now edit :-) */
1133
1134#endif /* !defined HEADER_SAFESTACK_H */
diff --git a/src/lib/libcrypto/stack/stack.c b/src/lib/libcrypto/stack/stack.c
index 58e9126339..02857f0446 100644
--- a/src/lib/libcrypto/stack/stack.c
+++ b/src/lib/libcrypto/stack/stack.c
@@ -74,12 +74,12 @@
74 74
75const char *STACK_version="Stack" OPENSSL_VERSION_PTEXT; 75const char *STACK_version="Stack" OPENSSL_VERSION_PTEXT;
76 76
77#define FP_ICC (int (*)(const void *,const void *))
78#include <errno.h> 77#include <errno.h>
79 78
80int (*sk_set_cmp_func(STACK *sk, int (*c)()))(void) 79int (*sk_set_cmp_func(STACK *sk, int (*c)(const char * const *,const char * const *)))
80 (const char * const *, const char * const *)
81 { 81 {
82 int (*old)()=sk->comp; 82 int (*old)(const char * const *,const char * const *)=sk->comp;
83 83
84 if (sk->comp != c) 84 if (sk->comp != c)
85 sk->sorted=0; 85 sk->sorted=0;
@@ -94,7 +94,7 @@ STACK *sk_dup(STACK *sk)
94 char **s; 94 char **s;
95 95
96 if ((ret=sk_new(sk->comp)) == NULL) goto err; 96 if ((ret=sk_new(sk->comp)) == NULL) goto err;
97 s=(char **)Realloc((char *)ret->data, 97 s=(char **)OPENSSL_realloc((char *)ret->data,
98 (unsigned int)sizeof(char *)*sk->num_alloc); 98 (unsigned int)sizeof(char *)*sk->num_alloc);
99 if (s == NULL) goto err; 99 if (s == NULL) goto err;
100 ret->data=s; 100 ret->data=s;
@@ -109,14 +109,19 @@ err:
109 return(NULL); 109 return(NULL);
110 } 110 }
111 111
112STACK *sk_new(int (*c)()) 112STACK *sk_new_null(void)
113 {
114 return sk_new((int (*)(const char * const *, const char * const *))0);
115 }
116
117STACK *sk_new(int (*c)(const char * const *, const char * const *))
113 { 118 {
114 STACK *ret; 119 STACK *ret;
115 int i; 120 int i;
116 121
117 if ((ret=(STACK *)Malloc(sizeof(STACK))) == NULL) 122 if ((ret=(STACK *)OPENSSL_malloc(sizeof(STACK))) == NULL)
118 goto err0; 123 goto err0;
119 if ((ret->data=(char **)Malloc(sizeof(char *)*MIN_NODES)) == NULL) 124 if ((ret->data=(char **)OPENSSL_malloc(sizeof(char *)*MIN_NODES)) == NULL)
120 goto err1; 125 goto err1;
121 for (i=0; i<MIN_NODES; i++) 126 for (i=0; i<MIN_NODES; i++)
122 ret->data[i]=NULL; 127 ret->data[i]=NULL;
@@ -126,7 +131,7 @@ STACK *sk_new(int (*c)())
126 ret->sorted=0; 131 ret->sorted=0;
127 return(ret); 132 return(ret);
128err1: 133err1:
129 Free(ret); 134 OPENSSL_free(ret);
130err0: 135err0:
131 return(NULL); 136 return(NULL);
132 } 137 }
@@ -138,7 +143,7 @@ int sk_insert(STACK *st, char *data, int loc)
138 if(st == NULL) return 0; 143 if(st == NULL) return 0;
139 if (st->num_alloc <= st->num+1) 144 if (st->num_alloc <= st->num+1)
140 { 145 {
141 s=(char **)Realloc((char *)st->data, 146 s=(char **)OPENSSL_realloc((char *)st->data,
142 (unsigned int)sizeof(char *)*st->num_alloc*2); 147 (unsigned int)sizeof(char *)*st->num_alloc*2);
143 if (s == NULL) 148 if (s == NULL)
144 return(0); 149 return(0);
@@ -207,7 +212,7 @@ int sk_find(STACK *st, char *data)
207 { 212 {
208 char **r; 213 char **r;
209 int i; 214 int i;
210 int (*comp_func)(); 215 int (*comp_func)(const void *,const void *);
211 if(st == NULL) return -1; 216 if(st == NULL) return -1;
212 217
213 if (st->comp == NULL) 218 if (st->comp == NULL)
@@ -219,13 +224,24 @@ int sk_find(STACK *st, char *data)
219 } 224 }
220 sk_sort(st); 225 sk_sort(st);
221 if (data == NULL) return(-1); 226 if (data == NULL) return(-1);
222 comp_func=(int (*)())st->comp; 227 /* This (and the "qsort" below) are the two places in OpenSSL
228 * where we need to convert from our standard (type **,type **)
229 * compare callback type to the (void *,void *) type required by
230 * bsearch. However, the "data" it is being called(back) with are
231 * not (type *) pointers, but the *pointers* to (type *) pointers,
232 * so we get our extra level of pointer dereferencing that way. */
233 comp_func=(int (*)(const void *,const void *))(st->comp);
223 r=(char **)bsearch(&data,(char *)st->data, 234 r=(char **)bsearch(&data,(char *)st->data,
224 st->num,sizeof(char *),FP_ICC comp_func); 235 st->num,sizeof(char *), comp_func);
225 if (r == NULL) return(-1); 236 if (r == NULL) return(-1);
226 i=(int)(r-st->data); 237 i=(int)(r-st->data);
227 for ( ; i>0; i--) 238 for ( ; i>0; i--)
228 if ((*st->comp)(&(st->data[i-1]),&data) < 0) 239 /* This needs a cast because the type being pointed to from
240 * the "&" expressions are (char *) rather than (const char *).
241 * For an explanation, read:
242 * http://www.eskimo.com/~scs/C-faq/q11.10.html :-) */
243 if ((*st->comp)((const char * const *)&(st->data[i-1]),
244 (const char * const *)&data) < 0)
229 break; 245 break;
230 return(i); 246 return(i);
231 } 247 }
@@ -262,7 +278,7 @@ void sk_zero(STACK *st)
262 st->num=0; 278 st->num=0;
263 } 279 }
264 280
265void sk_pop_free(STACK *st, void (*func)()) 281void sk_pop_free(STACK *st, void (*func)(void *))
266 { 282 {
267 int i; 283 int i;
268 284
@@ -276,17 +292,17 @@ void sk_pop_free(STACK *st, void (*func)())
276void sk_free(STACK *st) 292void sk_free(STACK *st)
277 { 293 {
278 if (st == NULL) return; 294 if (st == NULL) return;
279 if (st->data != NULL) Free(st->data); 295 if (st->data != NULL) OPENSSL_free(st->data);
280 Free(st); 296 OPENSSL_free(st);
281 } 297 }
282 298
283int sk_num(STACK *st) 299int sk_num(const STACK *st)
284{ 300{
285 if(st == NULL) return -1; 301 if(st == NULL) return -1;
286 return st->num; 302 return st->num;
287} 303}
288 304
289char *sk_value(STACK *st, int i) 305char *sk_value(const STACK *st, int i)
290{ 306{
291 if(st == NULL) return NULL; 307 if(st == NULL) return NULL;
292 return st->data[i]; 308 return st->data[i];
@@ -299,13 +315,18 @@ char *sk_set(STACK *st, int i, char *value)
299} 315}
300 316
301void sk_sort(STACK *st) 317void sk_sort(STACK *st)
302 {
303 if (!st->sorted)
304 { 318 {
305 int (*comp_func)(); 319 if (!st->sorted)
306 320 {
307 comp_func=(int (*)())st->comp; 321 int (*comp_func)(const void *,const void *);
308 qsort(st->data,st->num,sizeof(char *),FP_ICC comp_func); 322
309 st->sorted=1; 323 /* same comment as in sk_find ... previously st->comp was declared
324 * as a (void*,void*) callback type, but this made the population
325 * of the callback pointer illogical - our callbacks compare
326 * type** with type**, so we leave the casting until absolutely
327 * necessary (ie. "now"). */
328 comp_func=(int (*)(const void *,const void *))(st->comp);
329 qsort(st->data,st->num,sizeof(char *), comp_func);
330 st->sorted=1;
331 }
310 } 332 }
311 }
diff --git a/src/lib/libcrypto/stack/stack.h b/src/lib/libcrypto/stack/stack.h
index a615d9b4c9..8b436ca4b9 100644
--- a/src/lib/libcrypto/stack/stack.h
+++ b/src/lib/libcrypto/stack/stack.h
@@ -70,23 +70,21 @@ typedef struct stack_st
70 int sorted; 70 int sorted;
71 71
72 int num_alloc; 72 int num_alloc;
73 int (*comp)(); 73 int (*comp)(const char * const *, const char * const *);
74 } STACK; 74 } STACK;
75 75
76
77#define sk_new_null() sk_new(NULL)
78
79#define M_sk_num(sk) ((sk) ? (sk)->num:-1) 76#define M_sk_num(sk) ((sk) ? (sk)->num:-1)
80#define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL) 77#define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL)
81 78
82int sk_num(STACK *); 79int sk_num(const STACK *);
83char *sk_value(STACK *, int); 80char *sk_value(const STACK *, int);
84 81
85char *sk_set(STACK *, int, char *); 82char *sk_set(STACK *, int, char *);
86 83
87STACK *sk_new(int (*cmp)()); 84STACK *sk_new(int (*cmp)(const char * const *, const char * const *));
85STACK *sk_new_null(void);
88void sk_free(STACK *); 86void sk_free(STACK *);
89void sk_pop_free(STACK *st, void (*func)()); 87void sk_pop_free(STACK *st, void (*func)(void *));
90int sk_insert(STACK *sk,char *data,int where); 88int sk_insert(STACK *sk,char *data,int where);
91char *sk_delete(STACK *st,int loc); 89char *sk_delete(STACK *st,int loc);
92char *sk_delete_ptr(STACK *st, char *p); 90char *sk_delete_ptr(STACK *st, char *p);
@@ -96,7 +94,9 @@ int sk_unshift(STACK *st,char *data);
96char *sk_shift(STACK *st); 94char *sk_shift(STACK *st);
97char *sk_pop(STACK *st); 95char *sk_pop(STACK *st);
98void sk_zero(STACK *st); 96void sk_zero(STACK *st);
99int (*sk_set_cmp_func(STACK *sk, int (*c)()))(); 97int (*sk_set_cmp_func(STACK *sk, int (*c)(const char * const *,
98 const char * const *)))
99 (const char * const *, const char * const *);
100STACK *sk_dup(STACK *st); 100STACK *sk_dup(STACK *st);
101void sk_sort(STACK *st); 101void sk_sort(STACK *st);
102 102