1/* Copyright (c) 2014, Google Inc.
2 *
3 * Permission to use, copy, modify, and/or distribute this software for any
4 * purpose with or without fee is hereby granted, provided that the above
5 * copyright notice and this permission notice appear in all copies.
6 *
7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
15#if !defined(IN_STACK_H)
16#error "Don't include this file directly. Include stack.h."
17#endif
18
19/* ACCESS_DESCRIPTION */
20#define sk_ACCESS_DESCRIPTION_new(comp)                                    \
21  ((STACK_OF(ACCESS_DESCRIPTION) *)sk_new(CHECKED_CAST(                    \
22      stack_cmp_func,                                                      \
23      int (*)(const ACCESS_DESCRIPTION **a, const ACCESS_DESCRIPTION **b), \
24      comp)))
25
26#define sk_ACCESS_DESCRIPTION_new_null() \
27  ((STACK_OF(ACCESS_DESCRIPTION) *)sk_new_null())
28
29#define sk_ACCESS_DESCRIPTION_num(sk) \
30  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk))
31
32#define sk_ACCESS_DESCRIPTION_zero(sk) \
33  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk));
34
35#define sk_ACCESS_DESCRIPTION_value(sk, i) \
36  ((ACCESS_DESCRIPTION *)sk_value(         \
37      CHECKED_CAST(_STACK *, const STACK_OF(ACCESS_DESCRIPTION) *, sk), (i)))
38
39#define sk_ACCESS_DESCRIPTION_set(sk, i, p)                            \
40  ((ACCESS_DESCRIPTION *)sk_set(                                       \
41      CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk), (i), \
42      CHECKED_CAST(void *, ACCESS_DESCRIPTION *, p)))
43
44#define sk_ACCESS_DESCRIPTION_free(sk) \
45  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk))
46
47#define sk_ACCESS_DESCRIPTION_pop_free(sk, free_func)                        \
48  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk),    \
49              CHECKED_CAST(void (*)(void *), void (*)(ACCESS_DESCRIPTION *), \
50                           free_func))
51
52#define sk_ACCESS_DESCRIPTION_insert(sk, p, where)                      \
53  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk), \
54            CHECKED_CAST(void *, ACCESS_DESCRIPTION *, p), (where))
55
56#define sk_ACCESS_DESCRIPTION_delete(sk, where) \
57  ((ACCESS_DESCRIPTION *)sk_delete(             \
58      CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk), (where)))
59
60#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, p)                   \
61  ((ACCESS_DESCRIPTION *)sk_delete_ptr(                           \
62      CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk), \
63      CHECKED_CAST(void *, ACCESS_DESCRIPTION *, p)))
64
65#define sk_ACCESS_DESCRIPTION_find(sk, out_index, p)                  \
66  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk), \
67          (out_index), CHECKED_CAST(void *, ACCESS_DESCRIPTION *, p))
68
69#define sk_ACCESS_DESCRIPTION_shift(sk) \
70  ((ACCESS_DESCRIPTION *)sk_shift(      \
71      CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk)))
72
73#define sk_ACCESS_DESCRIPTION_push(sk, p)                             \
74  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk), \
75          CHECKED_CAST(void *, ACCESS_DESCRIPTION *, p))
76
77#define sk_ACCESS_DESCRIPTION_pop(sk) \
78  ((ACCESS_DESCRIPTION *)sk_pop(      \
79      CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk)))
80
81#define sk_ACCESS_DESCRIPTION_dup(sk)      \
82  ((STACK_OF(ACCESS_DESCRIPTION) *)sk_dup( \
83      CHECKED_CAST(_STACK *, const STACK_OF(ACCESS_DESCRIPTION) *, sk)))
84
85#define sk_ACCESS_DESCRIPTION_sort(sk) \
86  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk))
87
88#define sk_ACCESS_DESCRIPTION_is_sorted(sk) \
89  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ACCESS_DESCRIPTION) *, sk))
90
91#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, comp)                           \
92  ((int (*)(const ACCESS_DESCRIPTION **a, const ACCESS_DESCRIPTION **b))       \
93       sk_set_cmp_func(                                                        \
94           CHECKED_CAST(_STACK *, STACK_OF(ACCESS_DESCRIPTION) *, sk),         \
95           CHECKED_CAST(stack_cmp_func, int (*)(const ACCESS_DESCRIPTION **a,  \
96                                                const ACCESS_DESCRIPTION **b), \
97                        comp)))
98
99#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copy_func, free_func)             \
100  ((STACK_OF(ACCESS_DESCRIPTION) *)sk_deep_copy(                              \
101      CHECKED_CAST(const _STACK *, const STACK_OF(ACCESS_DESCRIPTION) *, sk), \
102      CHECKED_CAST(void *(*)(void *),                                         \
103                   ACCESS_DESCRIPTION *(*)(ACCESS_DESCRIPTION *), copy_func), \
104      CHECKED_CAST(void (*)(void *), void (*)(ACCESS_DESCRIPTION *),          \
105                   free_func)))
106
107/* ASN1_ADB_TABLE */
108#define sk_ASN1_ADB_TABLE_new(comp)                 \
109  ((STACK_OF(ASN1_ADB_TABLE) *)sk_new(CHECKED_CAST( \
110      stack_cmp_func,                               \
111      int (*)(const ASN1_ADB_TABLE **a, const ASN1_ADB_TABLE **b), comp)))
112
113#define sk_ASN1_ADB_TABLE_new_null() ((STACK_OF(ASN1_ADB_TABLE) *)sk_new_null())
114
115#define sk_ASN1_ADB_TABLE_num(sk) \
116  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk))
117
118#define sk_ASN1_ADB_TABLE_zero(sk) \
119  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk));
120
121#define sk_ASN1_ADB_TABLE_value(sk, i) \
122  ((ASN1_ADB_TABLE *)sk_value(         \
123      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_ADB_TABLE) *, sk), (i)))
124
125#define sk_ASN1_ADB_TABLE_set(sk, i, p)                            \
126  ((ASN1_ADB_TABLE *)sk_set(                                       \
127      CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk), (i), \
128      CHECKED_CAST(void *, ASN1_ADB_TABLE *, p)))
129
130#define sk_ASN1_ADB_TABLE_free(sk) \
131  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk))
132
133#define sk_ASN1_ADB_TABLE_pop_free(sk, free_func)             \
134  sk_pop_free(                                                \
135      CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk), \
136      CHECKED_CAST(void (*)(void *), void (*)(ASN1_ADB_TABLE *), free_func))
137
138#define sk_ASN1_ADB_TABLE_insert(sk, p, where)                      \
139  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk), \
140            CHECKED_CAST(void *, ASN1_ADB_TABLE *, p), (where))
141
142#define sk_ASN1_ADB_TABLE_delete(sk, where) \
143  ((ASN1_ADB_TABLE *)sk_delete(             \
144      CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk), (where)))
145
146#define sk_ASN1_ADB_TABLE_delete_ptr(sk, p)                   \
147  ((ASN1_ADB_TABLE *)sk_delete_ptr(                           \
148      CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk), \
149      CHECKED_CAST(void *, ASN1_ADB_TABLE *, p)))
150
151#define sk_ASN1_ADB_TABLE_find(sk, out_index, p)                               \
152  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk), (out_index), \
153          CHECKED_CAST(void *, ASN1_ADB_TABLE *, p))
154
155#define sk_ASN1_ADB_TABLE_shift(sk) \
156  ((ASN1_ADB_TABLE *)sk_shift(      \
157      CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk)))
158
159#define sk_ASN1_ADB_TABLE_push(sk, p)                             \
160  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk), \
161          CHECKED_CAST(void *, ASN1_ADB_TABLE *, p))
162
163#define sk_ASN1_ADB_TABLE_pop(sk) \
164  ((ASN1_ADB_TABLE *)sk_pop(      \
165      CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk)))
166
167#define sk_ASN1_ADB_TABLE_dup(sk)      \
168  ((STACK_OF(ASN1_ADB_TABLE) *)sk_dup( \
169      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_ADB_TABLE) *, sk)))
170
171#define sk_ASN1_ADB_TABLE_sort(sk) \
172  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk))
173
174#define sk_ASN1_ADB_TABLE_is_sorted(sk) \
175  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ASN1_ADB_TABLE) *, sk))
176
177#define sk_ASN1_ADB_TABLE_set_cmp_func(sk, comp)                           \
178  ((int (*)(const ASN1_ADB_TABLE **a, const ASN1_ADB_TABLE **b))           \
179       sk_set_cmp_func(                                                    \
180           CHECKED_CAST(_STACK *, STACK_OF(ASN1_ADB_TABLE) *, sk),         \
181           CHECKED_CAST(stack_cmp_func, int (*)(const ASN1_ADB_TABLE **a,  \
182                                                const ASN1_ADB_TABLE **b), \
183                        comp)))
184
185#define sk_ASN1_ADB_TABLE_deep_copy(sk, copy_func, free_func)                \
186  ((STACK_OF(ASN1_ADB_TABLE) *)sk_deep_copy(                                 \
187      CHECKED_CAST(const _STACK *, const STACK_OF(ASN1_ADB_TABLE) *, sk),    \
188      CHECKED_CAST(void *(*)(void *), ASN1_ADB_TABLE *(*)(ASN1_ADB_TABLE *), \
189                   copy_func),                                               \
190      CHECKED_CAST(void (*)(void *), void (*)(ASN1_ADB_TABLE *), free_func)))
191
192/* ASN1_GENERALSTRING */
193#define sk_ASN1_GENERALSTRING_new(comp)                                    \
194  ((STACK_OF(ASN1_GENERALSTRING) *)sk_new(CHECKED_CAST(                    \
195      stack_cmp_func,                                                      \
196      int (*)(const ASN1_GENERALSTRING **a, const ASN1_GENERALSTRING **b), \
197      comp)))
198
199#define sk_ASN1_GENERALSTRING_new_null() \
200  ((STACK_OF(ASN1_GENERALSTRING) *)sk_new_null())
201
202#define sk_ASN1_GENERALSTRING_num(sk) \
203  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk))
204
205#define sk_ASN1_GENERALSTRING_zero(sk) \
206  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk));
207
208#define sk_ASN1_GENERALSTRING_value(sk, i) \
209  ((ASN1_GENERALSTRING *)sk_value(         \
210      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_GENERALSTRING) *, sk), (i)))
211
212#define sk_ASN1_GENERALSTRING_set(sk, i, p)                            \
213  ((ASN1_GENERALSTRING *)sk_set(                                       \
214      CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk), (i), \
215      CHECKED_CAST(void *, ASN1_GENERALSTRING *, p)))
216
217#define sk_ASN1_GENERALSTRING_free(sk) \
218  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk))
219
220#define sk_ASN1_GENERALSTRING_pop_free(sk, free_func)                        \
221  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk),    \
222              CHECKED_CAST(void (*)(void *), void (*)(ASN1_GENERALSTRING *), \
223                           free_func))
224
225#define sk_ASN1_GENERALSTRING_insert(sk, p, where)                      \
226  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk), \
227            CHECKED_CAST(void *, ASN1_GENERALSTRING *, p), (where))
228
229#define sk_ASN1_GENERALSTRING_delete(sk, where) \
230  ((ASN1_GENERALSTRING *)sk_delete(             \
231      CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk), (where)))
232
233#define sk_ASN1_GENERALSTRING_delete_ptr(sk, p)                   \
234  ((ASN1_GENERALSTRING *)sk_delete_ptr(                           \
235      CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk), \
236      CHECKED_CAST(void *, ASN1_GENERALSTRING *, p)))
237
238#define sk_ASN1_GENERALSTRING_find(sk, out_index, p)                  \
239  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk), \
240          (out_index), CHECKED_CAST(void *, ASN1_GENERALSTRING *, p))
241
242#define sk_ASN1_GENERALSTRING_shift(sk) \
243  ((ASN1_GENERALSTRING *)sk_shift(      \
244      CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk)))
245
246#define sk_ASN1_GENERALSTRING_push(sk, p)                             \
247  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk), \
248          CHECKED_CAST(void *, ASN1_GENERALSTRING *, p))
249
250#define sk_ASN1_GENERALSTRING_pop(sk) \
251  ((ASN1_GENERALSTRING *)sk_pop(      \
252      CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk)))
253
254#define sk_ASN1_GENERALSTRING_dup(sk)      \
255  ((STACK_OF(ASN1_GENERALSTRING) *)sk_dup( \
256      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_GENERALSTRING) *, sk)))
257
258#define sk_ASN1_GENERALSTRING_sort(sk) \
259  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk))
260
261#define sk_ASN1_GENERALSTRING_is_sorted(sk) \
262  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ASN1_GENERALSTRING) *, sk))
263
264#define sk_ASN1_GENERALSTRING_set_cmp_func(sk, comp)                           \
265  ((int (*)(const ASN1_GENERALSTRING **a, const ASN1_GENERALSTRING **b))       \
266       sk_set_cmp_func(                                                        \
267           CHECKED_CAST(_STACK *, STACK_OF(ASN1_GENERALSTRING) *, sk),         \
268           CHECKED_CAST(stack_cmp_func, int (*)(const ASN1_GENERALSTRING **a,  \
269                                                const ASN1_GENERALSTRING **b), \
270                        comp)))
271
272#define sk_ASN1_GENERALSTRING_deep_copy(sk, copy_func, free_func)             \
273  ((STACK_OF(ASN1_GENERALSTRING) *)sk_deep_copy(                              \
274      CHECKED_CAST(const _STACK *, const STACK_OF(ASN1_GENERALSTRING) *, sk), \
275      CHECKED_CAST(void *(*)(void *),                                         \
276                   ASN1_GENERALSTRING *(*)(ASN1_GENERALSTRING *), copy_func), \
277      CHECKED_CAST(void (*)(void *), void (*)(ASN1_GENERALSTRING *),          \
278                   free_func)))
279
280/* ASN1_INTEGER */
281#define sk_ASN1_INTEGER_new(comp)                                              \
282  ((STACK_OF(ASN1_INTEGER) *)sk_new(CHECKED_CAST(                              \
283      stack_cmp_func, int (*)(const ASN1_INTEGER **a, const ASN1_INTEGER **b), \
284      comp)))
285
286#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)sk_new_null())
287
288#define sk_ASN1_INTEGER_num(sk) \
289  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk))
290
291#define sk_ASN1_INTEGER_zero(sk) \
292  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk));
293
294#define sk_ASN1_INTEGER_value(sk, i) \
295  ((ASN1_INTEGER *)sk_value(         \
296      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_INTEGER) *, sk), (i)))
297
298#define sk_ASN1_INTEGER_set(sk, i, p)                            \
299  ((ASN1_INTEGER *)sk_set(                                       \
300      CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk), (i), \
301      CHECKED_CAST(void *, ASN1_INTEGER *, p)))
302
303#define sk_ASN1_INTEGER_free(sk) \
304  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk))
305
306#define sk_ASN1_INTEGER_pop_free(sk, free_func)             \
307  sk_pop_free(                                              \
308      CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk), \
309      CHECKED_CAST(void (*)(void *), void (*)(ASN1_INTEGER *), free_func))
310
311#define sk_ASN1_INTEGER_insert(sk, p, where)                      \
312  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk), \
313            CHECKED_CAST(void *, ASN1_INTEGER *, p), (where))
314
315#define sk_ASN1_INTEGER_delete(sk, where) \
316  ((ASN1_INTEGER *)sk_delete(             \
317      CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk), (where)))
318
319#define sk_ASN1_INTEGER_delete_ptr(sk, p)                   \
320  ((ASN1_INTEGER *)sk_delete_ptr(                           \
321      CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk), \
322      CHECKED_CAST(void *, ASN1_INTEGER *, p)))
323
324#define sk_ASN1_INTEGER_find(sk, out_index, p)                               \
325  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk), (out_index), \
326          CHECKED_CAST(void *, ASN1_INTEGER *, p))
327
328#define sk_ASN1_INTEGER_shift(sk) \
329  ((ASN1_INTEGER *)sk_shift(      \
330      CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk)))
331
332#define sk_ASN1_INTEGER_push(sk, p)                             \
333  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk), \
334          CHECKED_CAST(void *, ASN1_INTEGER *, p))
335
336#define sk_ASN1_INTEGER_pop(sk) \
337  ((ASN1_INTEGER *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk)))
338
339#define sk_ASN1_INTEGER_dup(sk)      \
340  ((STACK_OF(ASN1_INTEGER) *)sk_dup( \
341      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_INTEGER) *, sk)))
342
343#define sk_ASN1_INTEGER_sort(sk) \
344  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk))
345
346#define sk_ASN1_INTEGER_is_sorted(sk) \
347  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ASN1_INTEGER) *, sk))
348
349#define sk_ASN1_INTEGER_set_cmp_func(sk, comp)                               \
350  ((int (*)(const ASN1_INTEGER **a, const ASN1_INTEGER **b))sk_set_cmp_func( \
351      CHECKED_CAST(_STACK *, STACK_OF(ASN1_INTEGER) *, sk),                  \
352      CHECKED_CAST(stack_cmp_func,                                           \
353                   int (*)(const ASN1_INTEGER **a, const ASN1_INTEGER **b),  \
354                   comp)))
355
356#define sk_ASN1_INTEGER_deep_copy(sk, copy_func, free_func)              \
357  ((STACK_OF(ASN1_INTEGER) *)sk_deep_copy(                               \
358      CHECKED_CAST(const _STACK *, const STACK_OF(ASN1_INTEGER) *, sk),  \
359      CHECKED_CAST(void *(*)(void *), ASN1_INTEGER *(*)(ASN1_INTEGER *), \
360                   copy_func),                                           \
361      CHECKED_CAST(void (*)(void *), void (*)(ASN1_INTEGER *), free_func)))
362
363/* ASN1_OBJECT */
364#define sk_ASN1_OBJECT_new(comp)                                             \
365  ((STACK_OF(ASN1_OBJECT) *)sk_new(CHECKED_CAST(                             \
366      stack_cmp_func, int (*)(const ASN1_OBJECT **a, const ASN1_OBJECT **b), \
367      comp)))
368
369#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)sk_new_null())
370
371#define sk_ASN1_OBJECT_num(sk) \
372  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk))
373
374#define sk_ASN1_OBJECT_zero(sk) \
375  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk));
376
377#define sk_ASN1_OBJECT_value(sk, i) \
378  ((ASN1_OBJECT *)sk_value(         \
379      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_OBJECT) *, sk), (i)))
380
381#define sk_ASN1_OBJECT_set(sk, i, p)                                          \
382  ((ASN1_OBJECT *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk), \
383                         (i), CHECKED_CAST(void *, ASN1_OBJECT *, p)))
384
385#define sk_ASN1_OBJECT_free(sk) \
386  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk))
387
388#define sk_ASN1_OBJECT_pop_free(sk, free_func)             \
389  sk_pop_free(                                             \
390      CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk), \
391      CHECKED_CAST(void (*)(void *), void (*)(ASN1_OBJECT *), free_func))
392
393#define sk_ASN1_OBJECT_insert(sk, p, where)                      \
394  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk), \
395            CHECKED_CAST(void *, ASN1_OBJECT *, p), (where))
396
397#define sk_ASN1_OBJECT_delete(sk, where) \
398  ((ASN1_OBJECT *)sk_delete(             \
399      CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk), (where)))
400
401#define sk_ASN1_OBJECT_delete_ptr(sk, p)                   \
402  ((ASN1_OBJECT *)sk_delete_ptr(                           \
403      CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk), \
404      CHECKED_CAST(void *, ASN1_OBJECT *, p)))
405
406#define sk_ASN1_OBJECT_find(sk, out_index, p)                               \
407  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk), (out_index), \
408          CHECKED_CAST(void *, ASN1_OBJECT *, p))
409
410#define sk_ASN1_OBJECT_shift(sk) \
411  ((ASN1_OBJECT *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk)))
412
413#define sk_ASN1_OBJECT_push(sk, p)                             \
414  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk), \
415          CHECKED_CAST(void *, ASN1_OBJECT *, p))
416
417#define sk_ASN1_OBJECT_pop(sk) \
418  ((ASN1_OBJECT *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk)))
419
420#define sk_ASN1_OBJECT_dup(sk)      \
421  ((STACK_OF(ASN1_OBJECT) *)sk_dup( \
422      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_OBJECT) *, sk)))
423
424#define sk_ASN1_OBJECT_sort(sk) \
425  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk))
426
427#define sk_ASN1_OBJECT_is_sorted(sk) \
428  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ASN1_OBJECT) *, sk))
429
430#define sk_ASN1_OBJECT_set_cmp_func(sk, comp)                              \
431  ((int (*)(const ASN1_OBJECT **a, const ASN1_OBJECT **b))sk_set_cmp_func( \
432      CHECKED_CAST(_STACK *, STACK_OF(ASN1_OBJECT) *, sk),                 \
433      CHECKED_CAST(stack_cmp_func,                                         \
434                   int (*)(const ASN1_OBJECT **a, const ASN1_OBJECT **b),  \
435                   comp)))
436
437#define sk_ASN1_OBJECT_deep_copy(sk, copy_func, free_func)             \
438  ((STACK_OF(ASN1_OBJECT) *)sk_deep_copy(                              \
439      CHECKED_CAST(const _STACK *, const STACK_OF(ASN1_OBJECT) *, sk), \
440      CHECKED_CAST(void *(*)(void *), ASN1_OBJECT *(*)(ASN1_OBJECT *), \
441                   copy_func),                                         \
442      CHECKED_CAST(void (*)(void *), void (*)(ASN1_OBJECT *), free_func)))
443
444/* ASN1_STRING_TABLE */
445#define sk_ASN1_STRING_TABLE_new(comp)                                   \
446  ((STACK_OF(ASN1_STRING_TABLE) *)sk_new(CHECKED_CAST(                   \
447      stack_cmp_func,                                                    \
448      int (*)(const ASN1_STRING_TABLE **a, const ASN1_STRING_TABLE **b), \
449      comp)))
450
451#define sk_ASN1_STRING_TABLE_new_null() \
452  ((STACK_OF(ASN1_STRING_TABLE) *)sk_new_null())
453
454#define sk_ASN1_STRING_TABLE_num(sk) \
455  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk))
456
457#define sk_ASN1_STRING_TABLE_zero(sk) \
458  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk));
459
460#define sk_ASN1_STRING_TABLE_value(sk, i) \
461  ((ASN1_STRING_TABLE *)sk_value(         \
462      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_STRING_TABLE) *, sk), (i)))
463
464#define sk_ASN1_STRING_TABLE_set(sk, i, p)                            \
465  ((ASN1_STRING_TABLE *)sk_set(                                       \
466      CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk), (i), \
467      CHECKED_CAST(void *, ASN1_STRING_TABLE *, p)))
468
469#define sk_ASN1_STRING_TABLE_free(sk) \
470  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk))
471
472#define sk_ASN1_STRING_TABLE_pop_free(sk, free_func)                        \
473  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk),    \
474              CHECKED_CAST(void (*)(void *), void (*)(ASN1_STRING_TABLE *), \
475                           free_func))
476
477#define sk_ASN1_STRING_TABLE_insert(sk, p, where)                      \
478  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk), \
479            CHECKED_CAST(void *, ASN1_STRING_TABLE *, p), (where))
480
481#define sk_ASN1_STRING_TABLE_delete(sk, where) \
482  ((ASN1_STRING_TABLE *)sk_delete(             \
483      CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk), (where)))
484
485#define sk_ASN1_STRING_TABLE_delete_ptr(sk, p)                   \
486  ((ASN1_STRING_TABLE *)sk_delete_ptr(                           \
487      CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk), \
488      CHECKED_CAST(void *, ASN1_STRING_TABLE *, p)))
489
490#define sk_ASN1_STRING_TABLE_find(sk, out_index, p)                  \
491  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk), \
492          (out_index), CHECKED_CAST(void *, ASN1_STRING_TABLE *, p))
493
494#define sk_ASN1_STRING_TABLE_shift(sk) \
495  ((ASN1_STRING_TABLE *)sk_shift(      \
496      CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk)))
497
498#define sk_ASN1_STRING_TABLE_push(sk, p)                             \
499  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk), \
500          CHECKED_CAST(void *, ASN1_STRING_TABLE *, p))
501
502#define sk_ASN1_STRING_TABLE_pop(sk) \
503  ((ASN1_STRING_TABLE *)sk_pop(      \
504      CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk)))
505
506#define sk_ASN1_STRING_TABLE_dup(sk)      \
507  ((STACK_OF(ASN1_STRING_TABLE) *)sk_dup( \
508      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_STRING_TABLE) *, sk)))
509
510#define sk_ASN1_STRING_TABLE_sort(sk) \
511  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk))
512
513#define sk_ASN1_STRING_TABLE_is_sorted(sk) \
514  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ASN1_STRING_TABLE) *, sk))
515
516#define sk_ASN1_STRING_TABLE_set_cmp_func(sk, comp)                           \
517  ((int (*)(const ASN1_STRING_TABLE **a, const ASN1_STRING_TABLE **b))        \
518       sk_set_cmp_func(                                                       \
519           CHECKED_CAST(_STACK *, STACK_OF(ASN1_STRING_TABLE) *, sk),         \
520           CHECKED_CAST(stack_cmp_func, int (*)(const ASN1_STRING_TABLE **a,  \
521                                                const ASN1_STRING_TABLE **b), \
522                        comp)))
523
524#define sk_ASN1_STRING_TABLE_deep_copy(sk, copy_func, free_func)             \
525  ((STACK_OF(ASN1_STRING_TABLE) *)sk_deep_copy(                              \
526      CHECKED_CAST(const _STACK *, const STACK_OF(ASN1_STRING_TABLE) *, sk), \
527      CHECKED_CAST(void *(*)(void *),                                        \
528                   ASN1_STRING_TABLE *(*)(ASN1_STRING_TABLE *), copy_func),  \
529      CHECKED_CAST(void (*)(void *), void (*)(ASN1_STRING_TABLE *),          \
530                   free_func)))
531
532/* ASN1_TYPE */
533#define sk_ASN1_TYPE_new(comp)     \
534  ((STACK_OF(ASN1_TYPE) *)sk_new(  \
535      CHECKED_CAST(stack_cmp_func, \
536                   int (*)(const ASN1_TYPE **a, const ASN1_TYPE **b), comp)))
537
538#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)sk_new_null())
539
540#define sk_ASN1_TYPE_num(sk) \
541  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk))
542
543#define sk_ASN1_TYPE_zero(sk) \
544  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk));
545
546#define sk_ASN1_TYPE_value(sk, i) \
547  ((ASN1_TYPE *)sk_value(         \
548      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_TYPE) *, sk), (i)))
549
550#define sk_ASN1_TYPE_set(sk, i, p)                                             \
551  ((ASN1_TYPE *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk), (i), \
552                       CHECKED_CAST(void *, ASN1_TYPE *, p)))
553
554#define sk_ASN1_TYPE_free(sk) \
555  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk))
556
557#define sk_ASN1_TYPE_pop_free(sk, free_func)             \
558  sk_pop_free(                                           \
559      CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk), \
560      CHECKED_CAST(void (*)(void *), void (*)(ASN1_TYPE *), free_func))
561
562#define sk_ASN1_TYPE_insert(sk, p, where)                      \
563  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk), \
564            CHECKED_CAST(void *, ASN1_TYPE *, p), (where))
565
566#define sk_ASN1_TYPE_delete(sk, where)                                       \
567  ((ASN1_TYPE *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk), \
568                          (where)))
569
570#define sk_ASN1_TYPE_delete_ptr(sk, p)                   \
571  ((ASN1_TYPE *)sk_delete_ptr(                           \
572      CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk), \
573      CHECKED_CAST(void *, ASN1_TYPE *, p)))
574
575#define sk_ASN1_TYPE_find(sk, out_index, p)                               \
576  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk), (out_index), \
577          CHECKED_CAST(void *, ASN1_TYPE *, p))
578
579#define sk_ASN1_TYPE_shift(sk) \
580  ((ASN1_TYPE *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk)))
581
582#define sk_ASN1_TYPE_push(sk, p)                             \
583  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk), \
584          CHECKED_CAST(void *, ASN1_TYPE *, p))
585
586#define sk_ASN1_TYPE_pop(sk) \
587  ((ASN1_TYPE *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk)))
588
589#define sk_ASN1_TYPE_dup(sk)      \
590  ((STACK_OF(ASN1_TYPE) *)sk_dup( \
591      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_TYPE) *, sk)))
592
593#define sk_ASN1_TYPE_sort(sk) \
594  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk))
595
596#define sk_ASN1_TYPE_is_sorted(sk) \
597  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ASN1_TYPE) *, sk))
598
599#define sk_ASN1_TYPE_set_cmp_func(sk, comp)                            \
600  ((int (*)(const ASN1_TYPE **a, const ASN1_TYPE **b))sk_set_cmp_func( \
601      CHECKED_CAST(_STACK *, STACK_OF(ASN1_TYPE) *, sk),               \
602      CHECKED_CAST(stack_cmp_func,                                     \
603                   int (*)(const ASN1_TYPE **a, const ASN1_TYPE **b), comp)))
604
605#define sk_ASN1_TYPE_deep_copy(sk, copy_func, free_func)                       \
606  ((STACK_OF(ASN1_TYPE) *)sk_deep_copy(                                        \
607      CHECKED_CAST(const _STACK *, const STACK_OF(ASN1_TYPE) *, sk),           \
608      CHECKED_CAST(void *(*)(void *), ASN1_TYPE *(*)(ASN1_TYPE *), copy_func), \
609      CHECKED_CAST(void (*)(void *), void (*)(ASN1_TYPE *), free_func)))
610
611/* ASN1_VALUE */
612#define sk_ASN1_VALUE_new(comp)                                            \
613  ((STACK_OF(ASN1_VALUE) *)sk_new(CHECKED_CAST(                            \
614      stack_cmp_func, int (*)(const ASN1_VALUE **a, const ASN1_VALUE **b), \
615      comp)))
616
617#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)sk_new_null())
618
619#define sk_ASN1_VALUE_num(sk) \
620  sk_num(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk))
621
622#define sk_ASN1_VALUE_zero(sk) \
623  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk));
624
625#define sk_ASN1_VALUE_value(sk, i) \
626  ((ASN1_VALUE *)sk_value(         \
627      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_VALUE) *, sk), (i)))
628
629#define sk_ASN1_VALUE_set(sk, i, p)                                         \
630  ((ASN1_VALUE *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk), \
631                        (i), CHECKED_CAST(void *, ASN1_VALUE *, p)))
632
633#define sk_ASN1_VALUE_free(sk) \
634  sk_free(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk))
635
636#define sk_ASN1_VALUE_pop_free(sk, free_func)             \
637  sk_pop_free(                                            \
638      CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk), \
639      CHECKED_CAST(void (*)(void *), void (*)(ASN1_VALUE *), free_func))
640
641#define sk_ASN1_VALUE_insert(sk, p, where)                      \
642  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk), \
643            CHECKED_CAST(void *, ASN1_VALUE *, p), (where))
644
645#define sk_ASN1_VALUE_delete(sk, where)                                        \
646  ((ASN1_VALUE *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk), \
647                           (where)))
648
649#define sk_ASN1_VALUE_delete_ptr(sk, p)                   \
650  ((ASN1_VALUE *)sk_delete_ptr(                           \
651      CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk), \
652      CHECKED_CAST(void *, ASN1_VALUE *, p)))
653
654#define sk_ASN1_VALUE_find(sk, out_index, p)                               \
655  sk_find(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk), (out_index), \
656          CHECKED_CAST(void *, ASN1_VALUE *, p))
657
658#define sk_ASN1_VALUE_shift(sk) \
659  ((ASN1_VALUE *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk)))
660
661#define sk_ASN1_VALUE_push(sk, p)                             \
662  sk_push(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk), \
663          CHECKED_CAST(void *, ASN1_VALUE *, p))
664
665#define sk_ASN1_VALUE_pop(sk) \
666  ((ASN1_VALUE *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk)))
667
668#define sk_ASN1_VALUE_dup(sk)      \
669  ((STACK_OF(ASN1_VALUE) *)sk_dup( \
670      CHECKED_CAST(_STACK *, const STACK_OF(ASN1_VALUE) *, sk)))
671
672#define sk_ASN1_VALUE_sort(sk) \
673  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk))
674
675#define sk_ASN1_VALUE_is_sorted(sk) \
676  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(ASN1_VALUE) *, sk))
677
678#define sk_ASN1_VALUE_set_cmp_func(sk, comp)                             \
679  ((int (*)(const ASN1_VALUE **a, const ASN1_VALUE **b))sk_set_cmp_func( \
680      CHECKED_CAST(_STACK *, STACK_OF(ASN1_VALUE) *, sk),                \
681      CHECKED_CAST(stack_cmp_func,                                       \
682                   int (*)(const ASN1_VALUE **a, const ASN1_VALUE **b),  \
683                   comp)))
684
685#define sk_ASN1_VALUE_deep_copy(sk, copy_func, free_func)             \
686  ((STACK_OF(ASN1_VALUE) *)sk_deep_copy(                              \
687      CHECKED_CAST(const _STACK *, const STACK_OF(ASN1_VALUE) *, sk), \
688      CHECKED_CAST(void *(*)(void *), ASN1_VALUE *(*)(ASN1_VALUE *),  \
689                   copy_func),                                        \
690      CHECKED_CAST(void (*)(void *), void (*)(ASN1_VALUE *), free_func)))
691
692/* BIO */
693#define sk_BIO_new(comp)                 \
694  ((STACK_OF(BIO) *)sk_new(CHECKED_CAST( \
695      stack_cmp_func, int (*)(const BIO **a, const BIO **b), comp)))
696
697#define sk_BIO_new_null() ((STACK_OF(BIO) *)sk_new_null())
698
699#define sk_BIO_num(sk) sk_num(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk))
700
701#define sk_BIO_zero(sk) sk_zero(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk));
702
703#define sk_BIO_value(sk, i) \
704  ((BIO *)sk_value(CHECKED_CAST(_STACK *, const STACK_OF(BIO) *, sk), (i)))
705
706#define sk_BIO_set(sk, i, p)                                       \
707  ((BIO *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk), (i), \
708                 CHECKED_CAST(void *, BIO *, p)))
709
710#define sk_BIO_free(sk) sk_free(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk))
711
712#define sk_BIO_pop_free(sk, free_func)                     \
713  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk), \
714              CHECKED_CAST(void (*)(void *), void (*)(BIO *), free_func))
715
716#define sk_BIO_insert(sk, p, where)                      \
717  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk), \
718            CHECKED_CAST(void *, BIO *, p), (where))
719
720#define sk_BIO_delete(sk, where) \
721  ((BIO *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk), (where)))
722
723#define sk_BIO_delete_ptr(sk, p)                                     \
724  ((BIO *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk), \
725                        CHECKED_CAST(void *, BIO *, p)))
726
727#define sk_BIO_find(sk, out_index, p)                               \
728  sk_find(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk), (out_index), \
729          CHECKED_CAST(void *, BIO *, p))
730
731#define sk_BIO_shift(sk) \
732  ((BIO *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk)))
733
734#define sk_BIO_push(sk, p)                             \
735  sk_push(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk), \
736          CHECKED_CAST(void *, BIO *, p))
737
738#define sk_BIO_pop(sk) \
739  ((BIO *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk)))
740
741#define sk_BIO_dup(sk) \
742  ((STACK_OF(BIO) *)sk_dup(CHECKED_CAST(_STACK *, const STACK_OF(BIO) *, sk)))
743
744#define sk_BIO_sort(sk) sk_sort(CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk))
745
746#define sk_BIO_is_sorted(sk) \
747  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(BIO) *, sk))
748
749#define sk_BIO_set_cmp_func(sk, comp)                                     \
750  ((int (*)(const BIO **a, const BIO **b))sk_set_cmp_func(                \
751      CHECKED_CAST(_STACK *, STACK_OF(BIO) *, sk),                        \
752      CHECKED_CAST(stack_cmp_func, int (*)(const BIO **a, const BIO **b), \
753                   comp)))
754
755#define sk_BIO_deep_copy(sk, copy_func, free_func)                 \
756  ((STACK_OF(BIO) *)sk_deep_copy(                                  \
757      CHECKED_CAST(const _STACK *, const STACK_OF(BIO) *, sk),     \
758      CHECKED_CAST(void *(*)(void *), BIO *(*)(BIO *), copy_func), \
759      CHECKED_CAST(void (*)(void *), void (*)(BIO *), free_func)))
760
761/* BY_DIR_ENTRY */
762#define sk_BY_DIR_ENTRY_new(comp)                                              \
763  ((STACK_OF(BY_DIR_ENTRY) *)sk_new(CHECKED_CAST(                              \
764      stack_cmp_func, int (*)(const BY_DIR_ENTRY **a, const BY_DIR_ENTRY **b), \
765      comp)))
766
767#define sk_BY_DIR_ENTRY_new_null() ((STACK_OF(BY_DIR_ENTRY) *)sk_new_null())
768
769#define sk_BY_DIR_ENTRY_num(sk) \
770  sk_num(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk))
771
772#define sk_BY_DIR_ENTRY_zero(sk) \
773  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk));
774
775#define sk_BY_DIR_ENTRY_value(sk, i) \
776  ((BY_DIR_ENTRY *)sk_value(         \
777      CHECKED_CAST(_STACK *, const STACK_OF(BY_DIR_ENTRY) *, sk), (i)))
778
779#define sk_BY_DIR_ENTRY_set(sk, i, p)                            \
780  ((BY_DIR_ENTRY *)sk_set(                                       \
781      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk), (i), \
782      CHECKED_CAST(void *, BY_DIR_ENTRY *, p)))
783
784#define sk_BY_DIR_ENTRY_free(sk) \
785  sk_free(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk))
786
787#define sk_BY_DIR_ENTRY_pop_free(sk, free_func)             \
788  sk_pop_free(                                              \
789      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk), \
790      CHECKED_CAST(void (*)(void *), void (*)(BY_DIR_ENTRY *), free_func))
791
792#define sk_BY_DIR_ENTRY_insert(sk, p, where)                      \
793  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk), \
794            CHECKED_CAST(void *, BY_DIR_ENTRY *, p), (where))
795
796#define sk_BY_DIR_ENTRY_delete(sk, where) \
797  ((BY_DIR_ENTRY *)sk_delete(             \
798      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk), (where)))
799
800#define sk_BY_DIR_ENTRY_delete_ptr(sk, p)                   \
801  ((BY_DIR_ENTRY *)sk_delete_ptr(                           \
802      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk), \
803      CHECKED_CAST(void *, BY_DIR_ENTRY *, p)))
804
805#define sk_BY_DIR_ENTRY_find(sk, out_index, p)                               \
806  sk_find(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk), (out_index), \
807          CHECKED_CAST(void *, BY_DIR_ENTRY *, p))
808
809#define sk_BY_DIR_ENTRY_shift(sk) \
810  ((BY_DIR_ENTRY *)sk_shift(      \
811      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk)))
812
813#define sk_BY_DIR_ENTRY_push(sk, p)                             \
814  sk_push(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk), \
815          CHECKED_CAST(void *, BY_DIR_ENTRY *, p))
816
817#define sk_BY_DIR_ENTRY_pop(sk) \
818  ((BY_DIR_ENTRY *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk)))
819
820#define sk_BY_DIR_ENTRY_dup(sk)      \
821  ((STACK_OF(BY_DIR_ENTRY) *)sk_dup( \
822      CHECKED_CAST(_STACK *, const STACK_OF(BY_DIR_ENTRY) *, sk)))
823
824#define sk_BY_DIR_ENTRY_sort(sk) \
825  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk))
826
827#define sk_BY_DIR_ENTRY_is_sorted(sk) \
828  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(BY_DIR_ENTRY) *, sk))
829
830#define sk_BY_DIR_ENTRY_set_cmp_func(sk, comp)                               \
831  ((int (*)(const BY_DIR_ENTRY **a, const BY_DIR_ENTRY **b))sk_set_cmp_func( \
832      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_ENTRY) *, sk),                  \
833      CHECKED_CAST(stack_cmp_func,                                           \
834                   int (*)(const BY_DIR_ENTRY **a, const BY_DIR_ENTRY **b),  \
835                   comp)))
836
837#define sk_BY_DIR_ENTRY_deep_copy(sk, copy_func, free_func)              \
838  ((STACK_OF(BY_DIR_ENTRY) *)sk_deep_copy(                               \
839      CHECKED_CAST(const _STACK *, const STACK_OF(BY_DIR_ENTRY) *, sk),  \
840      CHECKED_CAST(void *(*)(void *), BY_DIR_ENTRY *(*)(BY_DIR_ENTRY *), \
841                   copy_func),                                           \
842      CHECKED_CAST(void (*)(void *), void (*)(BY_DIR_ENTRY *), free_func)))
843
844/* BY_DIR_HASH */
845#define sk_BY_DIR_HASH_new(comp)                                             \
846  ((STACK_OF(BY_DIR_HASH) *)sk_new(CHECKED_CAST(                             \
847      stack_cmp_func, int (*)(const BY_DIR_HASH **a, const BY_DIR_HASH **b), \
848      comp)))
849
850#define sk_BY_DIR_HASH_new_null() ((STACK_OF(BY_DIR_HASH) *)sk_new_null())
851
852#define sk_BY_DIR_HASH_num(sk) \
853  sk_num(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk))
854
855#define sk_BY_DIR_HASH_zero(sk) \
856  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk));
857
858#define sk_BY_DIR_HASH_value(sk, i) \
859  ((BY_DIR_HASH *)sk_value(         \
860      CHECKED_CAST(_STACK *, const STACK_OF(BY_DIR_HASH) *, sk), (i)))
861
862#define sk_BY_DIR_HASH_set(sk, i, p)                                          \
863  ((BY_DIR_HASH *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk), \
864                         (i), CHECKED_CAST(void *, BY_DIR_HASH *, p)))
865
866#define sk_BY_DIR_HASH_free(sk) \
867  sk_free(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk))
868
869#define sk_BY_DIR_HASH_pop_free(sk, free_func)             \
870  sk_pop_free(                                             \
871      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk), \
872      CHECKED_CAST(void (*)(void *), void (*)(BY_DIR_HASH *), free_func))
873
874#define sk_BY_DIR_HASH_insert(sk, p, where)                      \
875  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk), \
876            CHECKED_CAST(void *, BY_DIR_HASH *, p), (where))
877
878#define sk_BY_DIR_HASH_delete(sk, where) \
879  ((BY_DIR_HASH *)sk_delete(             \
880      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk), (where)))
881
882#define sk_BY_DIR_HASH_delete_ptr(sk, p)                   \
883  ((BY_DIR_HASH *)sk_delete_ptr(                           \
884      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk), \
885      CHECKED_CAST(void *, BY_DIR_HASH *, p)))
886
887#define sk_BY_DIR_HASH_find(sk, out_index, p)                               \
888  sk_find(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk), (out_index), \
889          CHECKED_CAST(void *, BY_DIR_HASH *, p))
890
891#define sk_BY_DIR_HASH_shift(sk) \
892  ((BY_DIR_HASH *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk)))
893
894#define sk_BY_DIR_HASH_push(sk, p)                             \
895  sk_push(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk), \
896          CHECKED_CAST(void *, BY_DIR_HASH *, p))
897
898#define sk_BY_DIR_HASH_pop(sk) \
899  ((BY_DIR_HASH *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk)))
900
901#define sk_BY_DIR_HASH_dup(sk)      \
902  ((STACK_OF(BY_DIR_HASH) *)sk_dup( \
903      CHECKED_CAST(_STACK *, const STACK_OF(BY_DIR_HASH) *, sk)))
904
905#define sk_BY_DIR_HASH_sort(sk) \
906  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk))
907
908#define sk_BY_DIR_HASH_is_sorted(sk) \
909  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(BY_DIR_HASH) *, sk))
910
911#define sk_BY_DIR_HASH_set_cmp_func(sk, comp)                              \
912  ((int (*)(const BY_DIR_HASH **a, const BY_DIR_HASH **b))sk_set_cmp_func( \
913      CHECKED_CAST(_STACK *, STACK_OF(BY_DIR_HASH) *, sk),                 \
914      CHECKED_CAST(stack_cmp_func,                                         \
915                   int (*)(const BY_DIR_HASH **a, const BY_DIR_HASH **b),  \
916                   comp)))
917
918#define sk_BY_DIR_HASH_deep_copy(sk, copy_func, free_func)             \
919  ((STACK_OF(BY_DIR_HASH) *)sk_deep_copy(                              \
920      CHECKED_CAST(const _STACK *, const STACK_OF(BY_DIR_HASH) *, sk), \
921      CHECKED_CAST(void *(*)(void *), BY_DIR_HASH *(*)(BY_DIR_HASH *), \
922                   copy_func),                                         \
923      CHECKED_CAST(void (*)(void *), void (*)(BY_DIR_HASH *), free_func)))
924
925/* CONF_VALUE */
926#define sk_CONF_VALUE_new(comp)                                            \
927  ((STACK_OF(CONF_VALUE) *)sk_new(CHECKED_CAST(                            \
928      stack_cmp_func, int (*)(const CONF_VALUE **a, const CONF_VALUE **b), \
929      comp)))
930
931#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)sk_new_null())
932
933#define sk_CONF_VALUE_num(sk) \
934  sk_num(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk))
935
936#define sk_CONF_VALUE_zero(sk) \
937  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk));
938
939#define sk_CONF_VALUE_value(sk, i) \
940  ((CONF_VALUE *)sk_value(         \
941      CHECKED_CAST(_STACK *, const STACK_OF(CONF_VALUE) *, sk), (i)))
942
943#define sk_CONF_VALUE_set(sk, i, p)                                         \
944  ((CONF_VALUE *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk), \
945                        (i), CHECKED_CAST(void *, CONF_VALUE *, p)))
946
947#define sk_CONF_VALUE_free(sk) \
948  sk_free(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk))
949
950#define sk_CONF_VALUE_pop_free(sk, free_func)             \
951  sk_pop_free(                                            \
952      CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk), \
953      CHECKED_CAST(void (*)(void *), void (*)(CONF_VALUE *), free_func))
954
955#define sk_CONF_VALUE_insert(sk, p, where)                      \
956  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk), \
957            CHECKED_CAST(void *, CONF_VALUE *, p), (where))
958
959#define sk_CONF_VALUE_delete(sk, where)                                        \
960  ((CONF_VALUE *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk), \
961                           (where)))
962
963#define sk_CONF_VALUE_delete_ptr(sk, p)                   \
964  ((CONF_VALUE *)sk_delete_ptr(                           \
965      CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk), \
966      CHECKED_CAST(void *, CONF_VALUE *, p)))
967
968#define sk_CONF_VALUE_find(sk, out_index, p)                               \
969  sk_find(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk), (out_index), \
970          CHECKED_CAST(void *, CONF_VALUE *, p))
971
972#define sk_CONF_VALUE_shift(sk) \
973  ((CONF_VALUE *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk)))
974
975#define sk_CONF_VALUE_push(sk, p)                             \
976  sk_push(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk), \
977          CHECKED_CAST(void *, CONF_VALUE *, p))
978
979#define sk_CONF_VALUE_pop(sk) \
980  ((CONF_VALUE *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk)))
981
982#define sk_CONF_VALUE_dup(sk)      \
983  ((STACK_OF(CONF_VALUE) *)sk_dup( \
984      CHECKED_CAST(_STACK *, const STACK_OF(CONF_VALUE) *, sk)))
985
986#define sk_CONF_VALUE_sort(sk) \
987  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk))
988
989#define sk_CONF_VALUE_is_sorted(sk) \
990  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(CONF_VALUE) *, sk))
991
992#define sk_CONF_VALUE_set_cmp_func(sk, comp)                             \
993  ((int (*)(const CONF_VALUE **a, const CONF_VALUE **b))sk_set_cmp_func( \
994      CHECKED_CAST(_STACK *, STACK_OF(CONF_VALUE) *, sk),                \
995      CHECKED_CAST(stack_cmp_func,                                       \
996                   int (*)(const CONF_VALUE **a, const CONF_VALUE **b),  \
997                   comp)))
998
999#define sk_CONF_VALUE_deep_copy(sk, copy_func, free_func)             \
1000  ((STACK_OF(CONF_VALUE) *)sk_deep_copy(                              \
1001      CHECKED_CAST(const _STACK *, const STACK_OF(CONF_VALUE) *, sk), \
1002      CHECKED_CAST(void *(*)(void *), CONF_VALUE *(*)(CONF_VALUE *),  \
1003                   copy_func),                                        \
1004      CHECKED_CAST(void (*)(void *), void (*)(CONF_VALUE *), free_func)))
1005
1006/* CRYPTO_EX_DATA_FUNCS */
1007#define sk_CRYPTO_EX_DATA_FUNCS_new(comp)                                      \
1008  ((STACK_OF(CRYPTO_EX_DATA_FUNCS) *)sk_new(CHECKED_CAST(                      \
1009      stack_cmp_func,                                                          \
1010      int (*)(const CRYPTO_EX_DATA_FUNCS **a, const CRYPTO_EX_DATA_FUNCS **b), \
1011      comp)))
1012
1013#define sk_CRYPTO_EX_DATA_FUNCS_new_null() \
1014  ((STACK_OF(CRYPTO_EX_DATA_FUNCS) *)sk_new_null())
1015
1016#define sk_CRYPTO_EX_DATA_FUNCS_num(sk) \
1017  sk_num(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk))
1018
1019#define sk_CRYPTO_EX_DATA_FUNCS_zero(sk) \
1020  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk));
1021
1022#define sk_CRYPTO_EX_DATA_FUNCS_value(sk, i)                              \
1023  ((CRYPTO_EX_DATA_FUNCS *)sk_value(                                      \
1024      CHECKED_CAST(_STACK *, const STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk), \
1025      (i)))
1026
1027#define sk_CRYPTO_EX_DATA_FUNCS_set(sk, i, p)                            \
1028  ((CRYPTO_EX_DATA_FUNCS *)sk_set(                                       \
1029      CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk), (i), \
1030      CHECKED_CAST(void *, CRYPTO_EX_DATA_FUNCS *, p)))
1031
1032#define sk_CRYPTO_EX_DATA_FUNCS_free(sk) \
1033  sk_free(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk))
1034
1035#define sk_CRYPTO_EX_DATA_FUNCS_pop_free(sk, free_func)                        \
1036  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk),    \
1037              CHECKED_CAST(void (*)(void *), void (*)(CRYPTO_EX_DATA_FUNCS *), \
1038                           free_func))
1039
1040#define sk_CRYPTO_EX_DATA_FUNCS_insert(sk, p, where)                      \
1041  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk), \
1042            CHECKED_CAST(void *, CRYPTO_EX_DATA_FUNCS *, p), (where))
1043
1044#define sk_CRYPTO_EX_DATA_FUNCS_delete(sk, where) \
1045  ((CRYPTO_EX_DATA_FUNCS *)sk_delete(             \
1046      CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk), (where)))
1047
1048#define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(sk, p)                   \
1049  ((CRYPTO_EX_DATA_FUNCS *)sk_delete_ptr(                           \
1050      CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk), \
1051      CHECKED_CAST(void *, CRYPTO_EX_DATA_FUNCS *, p)))
1052
1053#define sk_CRYPTO_EX_DATA_FUNCS_find(sk, out_index, p)                  \
1054  sk_find(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk), \
1055          (out_index), CHECKED_CAST(void *, CRYPTO_EX_DATA_FUNCS *, p))
1056
1057#define sk_CRYPTO_EX_DATA_FUNCS_shift(sk) \
1058  ((CRYPTO_EX_DATA_FUNCS *)sk_shift(      \
1059      CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk)))
1060
1061#define sk_CRYPTO_EX_DATA_FUNCS_push(sk, p)                             \
1062  sk_push(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk), \
1063          CHECKED_CAST(void *, CRYPTO_EX_DATA_FUNCS *, p))
1064
1065#define sk_CRYPTO_EX_DATA_FUNCS_pop(sk) \
1066  ((CRYPTO_EX_DATA_FUNCS *)sk_pop(      \
1067      CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk)))
1068
1069#define sk_CRYPTO_EX_DATA_FUNCS_dup(sk)      \
1070  ((STACK_OF(CRYPTO_EX_DATA_FUNCS) *)sk_dup( \
1071      CHECKED_CAST(_STACK *, const STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk)))
1072
1073#define sk_CRYPTO_EX_DATA_FUNCS_sort(sk) \
1074  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk))
1075
1076#define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(sk) \
1077  sk_is_sorted(                               \
1078      CHECKED_CAST(_STACK *, const STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk))
1079
1080#define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(sk, comp)                       \
1081  ((int (*)(const CRYPTO_EX_DATA_FUNCS **a, const CRYPTO_EX_DATA_FUNCS **b)) \
1082       sk_set_cmp_func(                                                      \
1083           CHECKED_CAST(_STACK *, STACK_OF(CRYPTO_EX_DATA_FUNCS) *, sk),     \
1084           CHECKED_CAST(stack_cmp_func,                                      \
1085                        int (*)(const CRYPTO_EX_DATA_FUNCS **a,              \
1086                                const CRYPTO_EX_DATA_FUNCS **b),             \
1087                        comp)))
1088
1089#define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(sk, copy_func, free_func)        \
1090  ((STACK_OF(CRYPTO_EX_DATA_FUNCS) *)sk_deep_copy(                         \
1091      CHECKED_CAST(const _STACK *, const STACK_OF(CRYPTO_EX_DATA_FUNCS) *, \
1092                   sk),                                                    \
1093      CHECKED_CAST(void *(*)(void *),                                      \
1094                   CRYPTO_EX_DATA_FUNCS *(*)(CRYPTO_EX_DATA_FUNCS *),      \
1095                   copy_func),                                             \
1096      CHECKED_CAST(void (*)(void *), void (*)(CRYPTO_EX_DATA_FUNCS *),     \
1097                   free_func)))
1098
1099/* DIST_POINT */
1100#define sk_DIST_POINT_new(comp)                                            \
1101  ((STACK_OF(DIST_POINT) *)sk_new(CHECKED_CAST(                            \
1102      stack_cmp_func, int (*)(const DIST_POINT **a, const DIST_POINT **b), \
1103      comp)))
1104
1105#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)sk_new_null())
1106
1107#define sk_DIST_POINT_num(sk) \
1108  sk_num(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk))
1109
1110#define sk_DIST_POINT_zero(sk) \
1111  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk));
1112
1113#define sk_DIST_POINT_value(sk, i) \
1114  ((DIST_POINT *)sk_value(         \
1115      CHECKED_CAST(_STACK *, const STACK_OF(DIST_POINT) *, sk), (i)))
1116
1117#define sk_DIST_POINT_set(sk, i, p)                                         \
1118  ((DIST_POINT *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk), \
1119                        (i), CHECKED_CAST(void *, DIST_POINT *, p)))
1120
1121#define sk_DIST_POINT_free(sk) \
1122  sk_free(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk))
1123
1124#define sk_DIST_POINT_pop_free(sk, free_func)             \
1125  sk_pop_free(                                            \
1126      CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk), \
1127      CHECKED_CAST(void (*)(void *), void (*)(DIST_POINT *), free_func))
1128
1129#define sk_DIST_POINT_insert(sk, p, where)                      \
1130  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk), \
1131            CHECKED_CAST(void *, DIST_POINT *, p), (where))
1132
1133#define sk_DIST_POINT_delete(sk, where)                                        \
1134  ((DIST_POINT *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk), \
1135                           (where)))
1136
1137#define sk_DIST_POINT_delete_ptr(sk, p)                   \
1138  ((DIST_POINT *)sk_delete_ptr(                           \
1139      CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk), \
1140      CHECKED_CAST(void *, DIST_POINT *, p)))
1141
1142#define sk_DIST_POINT_find(sk, out_index, p)                               \
1143  sk_find(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk), (out_index), \
1144          CHECKED_CAST(void *, DIST_POINT *, p))
1145
1146#define sk_DIST_POINT_shift(sk) \
1147  ((DIST_POINT *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk)))
1148
1149#define sk_DIST_POINT_push(sk, p)                             \
1150  sk_push(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk), \
1151          CHECKED_CAST(void *, DIST_POINT *, p))
1152
1153#define sk_DIST_POINT_pop(sk) \
1154  ((DIST_POINT *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk)))
1155
1156#define sk_DIST_POINT_dup(sk)      \
1157  ((STACK_OF(DIST_POINT) *)sk_dup( \
1158      CHECKED_CAST(_STACK *, const STACK_OF(DIST_POINT) *, sk)))
1159
1160#define sk_DIST_POINT_sort(sk) \
1161  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk))
1162
1163#define sk_DIST_POINT_is_sorted(sk) \
1164  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(DIST_POINT) *, sk))
1165
1166#define sk_DIST_POINT_set_cmp_func(sk, comp)                             \
1167  ((int (*)(const DIST_POINT **a, const DIST_POINT **b))sk_set_cmp_func( \
1168      CHECKED_CAST(_STACK *, STACK_OF(DIST_POINT) *, sk),                \
1169      CHECKED_CAST(stack_cmp_func,                                       \
1170                   int (*)(const DIST_POINT **a, const DIST_POINT **b),  \
1171                   comp)))
1172
1173#define sk_DIST_POINT_deep_copy(sk, copy_func, free_func)             \
1174  ((STACK_OF(DIST_POINT) *)sk_deep_copy(                              \
1175      CHECKED_CAST(const _STACK *, const STACK_OF(DIST_POINT) *, sk), \
1176      CHECKED_CAST(void *(*)(void *), DIST_POINT *(*)(DIST_POINT *),  \
1177                   copy_func),                                        \
1178      CHECKED_CAST(void (*)(void *), void (*)(DIST_POINT *), free_func)))
1179
1180/* GENERAL_NAME */
1181#define sk_GENERAL_NAME_new(comp)                                              \
1182  ((STACK_OF(GENERAL_NAME) *)sk_new(CHECKED_CAST(                              \
1183      stack_cmp_func, int (*)(const GENERAL_NAME **a, const GENERAL_NAME **b), \
1184      comp)))
1185
1186#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)sk_new_null())
1187
1188#define sk_GENERAL_NAME_num(sk) \
1189  sk_num(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk))
1190
1191#define sk_GENERAL_NAME_zero(sk) \
1192  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk));
1193
1194#define sk_GENERAL_NAME_value(sk, i) \
1195  ((GENERAL_NAME *)sk_value(         \
1196      CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_NAME) *, sk), (i)))
1197
1198#define sk_GENERAL_NAME_set(sk, i, p)                            \
1199  ((GENERAL_NAME *)sk_set(                                       \
1200      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk), (i), \
1201      CHECKED_CAST(void *, GENERAL_NAME *, p)))
1202
1203#define sk_GENERAL_NAME_free(sk) \
1204  sk_free(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk))
1205
1206#define sk_GENERAL_NAME_pop_free(sk, free_func)             \
1207  sk_pop_free(                                              \
1208      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk), \
1209      CHECKED_CAST(void (*)(void *), void (*)(GENERAL_NAME *), free_func))
1210
1211#define sk_GENERAL_NAME_insert(sk, p, where)                      \
1212  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk), \
1213            CHECKED_CAST(void *, GENERAL_NAME *, p), (where))
1214
1215#define sk_GENERAL_NAME_delete(sk, where) \
1216  ((GENERAL_NAME *)sk_delete(             \
1217      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk), (where)))
1218
1219#define sk_GENERAL_NAME_delete_ptr(sk, p)                   \
1220  ((GENERAL_NAME *)sk_delete_ptr(                           \
1221      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk), \
1222      CHECKED_CAST(void *, GENERAL_NAME *, p)))
1223
1224#define sk_GENERAL_NAME_find(sk, out_index, p)                               \
1225  sk_find(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk), (out_index), \
1226          CHECKED_CAST(void *, GENERAL_NAME *, p))
1227
1228#define sk_GENERAL_NAME_shift(sk) \
1229  ((GENERAL_NAME *)sk_shift(      \
1230      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk)))
1231
1232#define sk_GENERAL_NAME_push(sk, p)                             \
1233  sk_push(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk), \
1234          CHECKED_CAST(void *, GENERAL_NAME *, p))
1235
1236#define sk_GENERAL_NAME_pop(sk) \
1237  ((GENERAL_NAME *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk)))
1238
1239#define sk_GENERAL_NAME_dup(sk)      \
1240  ((STACK_OF(GENERAL_NAME) *)sk_dup( \
1241      CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_NAME) *, sk)))
1242
1243#define sk_GENERAL_NAME_sort(sk) \
1244  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk))
1245
1246#define sk_GENERAL_NAME_is_sorted(sk) \
1247  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_NAME) *, sk))
1248
1249#define sk_GENERAL_NAME_set_cmp_func(sk, comp)                               \
1250  ((int (*)(const GENERAL_NAME **a, const GENERAL_NAME **b))sk_set_cmp_func( \
1251      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAME) *, sk),                  \
1252      CHECKED_CAST(stack_cmp_func,                                           \
1253                   int (*)(const GENERAL_NAME **a, const GENERAL_NAME **b),  \
1254                   comp)))
1255
1256#define sk_GENERAL_NAME_deep_copy(sk, copy_func, free_func)              \
1257  ((STACK_OF(GENERAL_NAME) *)sk_deep_copy(                               \
1258      CHECKED_CAST(const _STACK *, const STACK_OF(GENERAL_NAME) *, sk),  \
1259      CHECKED_CAST(void *(*)(void *), GENERAL_NAME *(*)(GENERAL_NAME *), \
1260                   copy_func),                                           \
1261      CHECKED_CAST(void (*)(void *), void (*)(GENERAL_NAME *), free_func)))
1262
1263/* GENERAL_NAMES */
1264#define sk_GENERAL_NAMES_new(comp)                 \
1265  ((STACK_OF(GENERAL_NAMES) *)sk_new(CHECKED_CAST( \
1266      stack_cmp_func,                              \
1267      int (*)(const GENERAL_NAMES **a, const GENERAL_NAMES **b), comp)))
1268
1269#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)sk_new_null())
1270
1271#define sk_GENERAL_NAMES_num(sk) \
1272  sk_num(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk))
1273
1274#define sk_GENERAL_NAMES_zero(sk) \
1275  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk));
1276
1277#define sk_GENERAL_NAMES_value(sk, i) \
1278  ((GENERAL_NAMES *)sk_value(         \
1279      CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_NAMES) *, sk), (i)))
1280
1281#define sk_GENERAL_NAMES_set(sk, i, p)                            \
1282  ((GENERAL_NAMES *)sk_set(                                       \
1283      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk), (i), \
1284      CHECKED_CAST(void *, GENERAL_NAMES *, p)))
1285
1286#define sk_GENERAL_NAMES_free(sk) \
1287  sk_free(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk))
1288
1289#define sk_GENERAL_NAMES_pop_free(sk, free_func)             \
1290  sk_pop_free(                                               \
1291      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk), \
1292      CHECKED_CAST(void (*)(void *), void (*)(GENERAL_NAMES *), free_func))
1293
1294#define sk_GENERAL_NAMES_insert(sk, p, where)                      \
1295  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk), \
1296            CHECKED_CAST(void *, GENERAL_NAMES *, p), (where))
1297
1298#define sk_GENERAL_NAMES_delete(sk, where) \
1299  ((GENERAL_NAMES *)sk_delete(             \
1300      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk), (where)))
1301
1302#define sk_GENERAL_NAMES_delete_ptr(sk, p)                   \
1303  ((GENERAL_NAMES *)sk_delete_ptr(                           \
1304      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk), \
1305      CHECKED_CAST(void *, GENERAL_NAMES *, p)))
1306
1307#define sk_GENERAL_NAMES_find(sk, out_index, p)                               \
1308  sk_find(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk), (out_index), \
1309          CHECKED_CAST(void *, GENERAL_NAMES *, p))
1310
1311#define sk_GENERAL_NAMES_shift(sk) \
1312  ((GENERAL_NAMES *)sk_shift(      \
1313      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk)))
1314
1315#define sk_GENERAL_NAMES_push(sk, p)                             \
1316  sk_push(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk), \
1317          CHECKED_CAST(void *, GENERAL_NAMES *, p))
1318
1319#define sk_GENERAL_NAMES_pop(sk) \
1320  ((GENERAL_NAMES *)sk_pop(      \
1321      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk)))
1322
1323#define sk_GENERAL_NAMES_dup(sk)      \
1324  ((STACK_OF(GENERAL_NAMES) *)sk_dup( \
1325      CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_NAMES) *, sk)))
1326
1327#define sk_GENERAL_NAMES_sort(sk) \
1328  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk))
1329
1330#define sk_GENERAL_NAMES_is_sorted(sk) \
1331  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_NAMES) *, sk))
1332
1333#define sk_GENERAL_NAMES_set_cmp_func(sk, comp)                                \
1334  ((int (*)(const GENERAL_NAMES **a, const GENERAL_NAMES **b))sk_set_cmp_func( \
1335      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_NAMES) *, sk),                   \
1336      CHECKED_CAST(stack_cmp_func,                                             \
1337                   int (*)(const GENERAL_NAMES **a, const GENERAL_NAMES **b),  \
1338                   comp)))
1339
1340#define sk_GENERAL_NAMES_deep_copy(sk, copy_func, free_func)               \
1341  ((STACK_OF(GENERAL_NAMES) *)sk_deep_copy(                                \
1342      CHECKED_CAST(const _STACK *, const STACK_OF(GENERAL_NAMES) *, sk),   \
1343      CHECKED_CAST(void *(*)(void *), GENERAL_NAMES *(*)(GENERAL_NAMES *), \
1344                   copy_func),                                             \
1345      CHECKED_CAST(void (*)(void *), void (*)(GENERAL_NAMES *), free_func)))
1346
1347/* GENERAL_SUBTREE */
1348#define sk_GENERAL_SUBTREE_new(comp)                 \
1349  ((STACK_OF(GENERAL_SUBTREE) *)sk_new(CHECKED_CAST( \
1350      stack_cmp_func,                                \
1351      int (*)(const GENERAL_SUBTREE **a, const GENERAL_SUBTREE **b), comp)))
1352
1353#define sk_GENERAL_SUBTREE_new_null() \
1354  ((STACK_OF(GENERAL_SUBTREE) *)sk_new_null())
1355
1356#define sk_GENERAL_SUBTREE_num(sk) \
1357  sk_num(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk))
1358
1359#define sk_GENERAL_SUBTREE_zero(sk) \
1360  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk));
1361
1362#define sk_GENERAL_SUBTREE_value(sk, i) \
1363  ((GENERAL_SUBTREE *)sk_value(         \
1364      CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_SUBTREE) *, sk), (i)))
1365
1366#define sk_GENERAL_SUBTREE_set(sk, i, p)                            \
1367  ((GENERAL_SUBTREE *)sk_set(                                       \
1368      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk), (i), \
1369      CHECKED_CAST(void *, GENERAL_SUBTREE *, p)))
1370
1371#define sk_GENERAL_SUBTREE_free(sk) \
1372  sk_free(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk))
1373
1374#define sk_GENERAL_SUBTREE_pop_free(sk, free_func)             \
1375  sk_pop_free(                                                 \
1376      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk), \
1377      CHECKED_CAST(void (*)(void *), void (*)(GENERAL_SUBTREE *), free_func))
1378
1379#define sk_GENERAL_SUBTREE_insert(sk, p, where)                      \
1380  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk), \
1381            CHECKED_CAST(void *, GENERAL_SUBTREE *, p), (where))
1382
1383#define sk_GENERAL_SUBTREE_delete(sk, where) \
1384  ((GENERAL_SUBTREE *)sk_delete(             \
1385      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk), (where)))
1386
1387#define sk_GENERAL_SUBTREE_delete_ptr(sk, p)                   \
1388  ((GENERAL_SUBTREE *)sk_delete_ptr(                           \
1389      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk), \
1390      CHECKED_CAST(void *, GENERAL_SUBTREE *, p)))
1391
1392#define sk_GENERAL_SUBTREE_find(sk, out_index, p)                  \
1393  sk_find(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk), \
1394          (out_index), CHECKED_CAST(void *, GENERAL_SUBTREE *, p))
1395
1396#define sk_GENERAL_SUBTREE_shift(sk) \
1397  ((GENERAL_SUBTREE *)sk_shift(      \
1398      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk)))
1399
1400#define sk_GENERAL_SUBTREE_push(sk, p)                             \
1401  sk_push(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk), \
1402          CHECKED_CAST(void *, GENERAL_SUBTREE *, p))
1403
1404#define sk_GENERAL_SUBTREE_pop(sk) \
1405  ((GENERAL_SUBTREE *)sk_pop(      \
1406      CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk)))
1407
1408#define sk_GENERAL_SUBTREE_dup(sk)      \
1409  ((STACK_OF(GENERAL_SUBTREE) *)sk_dup( \
1410      CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_SUBTREE) *, sk)))
1411
1412#define sk_GENERAL_SUBTREE_sort(sk) \
1413  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk))
1414
1415#define sk_GENERAL_SUBTREE_is_sorted(sk) \
1416  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(GENERAL_SUBTREE) *, sk))
1417
1418#define sk_GENERAL_SUBTREE_set_cmp_func(sk, comp)                           \
1419  ((int (*)(const GENERAL_SUBTREE **a, const GENERAL_SUBTREE **b))          \
1420       sk_set_cmp_func(                                                     \
1421           CHECKED_CAST(_STACK *, STACK_OF(GENERAL_SUBTREE) *, sk),         \
1422           CHECKED_CAST(stack_cmp_func, int (*)(const GENERAL_SUBTREE **a,  \
1423                                                const GENERAL_SUBTREE **b), \
1424                        comp)))
1425
1426#define sk_GENERAL_SUBTREE_deep_copy(sk, copy_func, free_func)                 \
1427  ((STACK_OF(GENERAL_SUBTREE) *)sk_deep_copy(                                  \
1428      CHECKED_CAST(const _STACK *, const STACK_OF(GENERAL_SUBTREE) *, sk),     \
1429      CHECKED_CAST(void *(*)(void *), GENERAL_SUBTREE *(*)(GENERAL_SUBTREE *), \
1430                   copy_func),                                                 \
1431      CHECKED_CAST(void (*)(void *), void (*)(GENERAL_SUBTREE *), free_func)))
1432
1433/* MIME_HEADER */
1434#define sk_MIME_HEADER_new(comp)                                             \
1435  ((STACK_OF(MIME_HEADER) *)sk_new(CHECKED_CAST(                             \
1436      stack_cmp_func, int (*)(const MIME_HEADER **a, const MIME_HEADER **b), \
1437      comp)))
1438
1439#define sk_MIME_HEADER_new_null() ((STACK_OF(MIME_HEADER) *)sk_new_null())
1440
1441#define sk_MIME_HEADER_num(sk) \
1442  sk_num(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk))
1443
1444#define sk_MIME_HEADER_zero(sk) \
1445  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk));
1446
1447#define sk_MIME_HEADER_value(sk, i) \
1448  ((MIME_HEADER *)sk_value(         \
1449      CHECKED_CAST(_STACK *, const STACK_OF(MIME_HEADER) *, sk), (i)))
1450
1451#define sk_MIME_HEADER_set(sk, i, p)                                          \
1452  ((MIME_HEADER *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk), \
1453                         (i), CHECKED_CAST(void *, MIME_HEADER *, p)))
1454
1455#define sk_MIME_HEADER_free(sk) \
1456  sk_free(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk))
1457
1458#define sk_MIME_HEADER_pop_free(sk, free_func)             \
1459  sk_pop_free(                                             \
1460      CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk), \
1461      CHECKED_CAST(void (*)(void *), void (*)(MIME_HEADER *), free_func))
1462
1463#define sk_MIME_HEADER_insert(sk, p, where)                      \
1464  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk), \
1465            CHECKED_CAST(void *, MIME_HEADER *, p), (where))
1466
1467#define sk_MIME_HEADER_delete(sk, where) \
1468  ((MIME_HEADER *)sk_delete(             \
1469      CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk), (where)))
1470
1471#define sk_MIME_HEADER_delete_ptr(sk, p)                   \
1472  ((MIME_HEADER *)sk_delete_ptr(                           \
1473      CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk), \
1474      CHECKED_CAST(void *, MIME_HEADER *, p)))
1475
1476#define sk_MIME_HEADER_find(sk, out_index, p)                               \
1477  sk_find(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk), (out_index), \
1478          CHECKED_CAST(void *, MIME_HEADER *, p))
1479
1480#define sk_MIME_HEADER_shift(sk) \
1481  ((MIME_HEADER *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk)))
1482
1483#define sk_MIME_HEADER_push(sk, p)                             \
1484  sk_push(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk), \
1485          CHECKED_CAST(void *, MIME_HEADER *, p))
1486
1487#define sk_MIME_HEADER_pop(sk) \
1488  ((MIME_HEADER *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk)))
1489
1490#define sk_MIME_HEADER_dup(sk)      \
1491  ((STACK_OF(MIME_HEADER) *)sk_dup( \
1492      CHECKED_CAST(_STACK *, const STACK_OF(MIME_HEADER) *, sk)))
1493
1494#define sk_MIME_HEADER_sort(sk) \
1495  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk))
1496
1497#define sk_MIME_HEADER_is_sorted(sk) \
1498  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(MIME_HEADER) *, sk))
1499
1500#define sk_MIME_HEADER_set_cmp_func(sk, comp)                              \
1501  ((int (*)(const MIME_HEADER **a, const MIME_HEADER **b))sk_set_cmp_func( \
1502      CHECKED_CAST(_STACK *, STACK_OF(MIME_HEADER) *, sk),                 \
1503      CHECKED_CAST(stack_cmp_func,                                         \
1504                   int (*)(const MIME_HEADER **a, const MIME_HEADER **b),  \
1505                   comp)))
1506
1507#define sk_MIME_HEADER_deep_copy(sk, copy_func, free_func)             \
1508  ((STACK_OF(MIME_HEADER) *)sk_deep_copy(                              \
1509      CHECKED_CAST(const _STACK *, const STACK_OF(MIME_HEADER) *, sk), \
1510      CHECKED_CAST(void *(*)(void *), MIME_HEADER *(*)(MIME_HEADER *), \
1511                   copy_func),                                         \
1512      CHECKED_CAST(void (*)(void *), void (*)(MIME_HEADER *), free_func)))
1513
1514/* PKCS7_SIGNER_INFO */
1515#define sk_PKCS7_SIGNER_INFO_new(comp)                                   \
1516  ((STACK_OF(PKCS7_SIGNER_INFO) *)sk_new(CHECKED_CAST(                   \
1517      stack_cmp_func,                                                    \
1518      int (*)(const PKCS7_SIGNER_INFO **a, const PKCS7_SIGNER_INFO **b), \
1519      comp)))
1520
1521#define sk_PKCS7_SIGNER_INFO_new_null() \
1522  ((STACK_OF(PKCS7_SIGNER_INFO) *)sk_new_null())
1523
1524#define sk_PKCS7_SIGNER_INFO_num(sk) \
1525  sk_num(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk))
1526
1527#define sk_PKCS7_SIGNER_INFO_zero(sk) \
1528  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk));
1529
1530#define sk_PKCS7_SIGNER_INFO_value(sk, i) \
1531  ((PKCS7_SIGNER_INFO *)sk_value(         \
1532      CHECKED_CAST(_STACK *, const STACK_OF(PKCS7_SIGNER_INFO) *, sk), (i)))
1533
1534#define sk_PKCS7_SIGNER_INFO_set(sk, i, p)                            \
1535  ((PKCS7_SIGNER_INFO *)sk_set(                                       \
1536      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk), (i), \
1537      CHECKED_CAST(void *, PKCS7_SIGNER_INFO *, p)))
1538
1539#define sk_PKCS7_SIGNER_INFO_free(sk) \
1540  sk_free(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk))
1541
1542#define sk_PKCS7_SIGNER_INFO_pop_free(sk, free_func)                        \
1543  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk),    \
1544              CHECKED_CAST(void (*)(void *), void (*)(PKCS7_SIGNER_INFO *), \
1545                           free_func))
1546
1547#define sk_PKCS7_SIGNER_INFO_insert(sk, p, where)                      \
1548  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk), \
1549            CHECKED_CAST(void *, PKCS7_SIGNER_INFO *, p), (where))
1550
1551#define sk_PKCS7_SIGNER_INFO_delete(sk, where) \
1552  ((PKCS7_SIGNER_INFO *)sk_delete(             \
1553      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk), (where)))
1554
1555#define sk_PKCS7_SIGNER_INFO_delete_ptr(sk, p)                   \
1556  ((PKCS7_SIGNER_INFO *)sk_delete_ptr(                           \
1557      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk), \
1558      CHECKED_CAST(void *, PKCS7_SIGNER_INFO *, p)))
1559
1560#define sk_PKCS7_SIGNER_INFO_find(sk, out_index, p)                  \
1561  sk_find(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk), \
1562          (out_index), CHECKED_CAST(void *, PKCS7_SIGNER_INFO *, p))
1563
1564#define sk_PKCS7_SIGNER_INFO_shift(sk) \
1565  ((PKCS7_SIGNER_INFO *)sk_shift(      \
1566      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk)))
1567
1568#define sk_PKCS7_SIGNER_INFO_push(sk, p)                             \
1569  sk_push(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk), \
1570          CHECKED_CAST(void *, PKCS7_SIGNER_INFO *, p))
1571
1572#define sk_PKCS7_SIGNER_INFO_pop(sk) \
1573  ((PKCS7_SIGNER_INFO *)sk_pop(      \
1574      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk)))
1575
1576#define sk_PKCS7_SIGNER_INFO_dup(sk)      \
1577  ((STACK_OF(PKCS7_SIGNER_INFO) *)sk_dup( \
1578      CHECKED_CAST(_STACK *, const STACK_OF(PKCS7_SIGNER_INFO) *, sk)))
1579
1580#define sk_PKCS7_SIGNER_INFO_sort(sk) \
1581  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk))
1582
1583#define sk_PKCS7_SIGNER_INFO_is_sorted(sk) \
1584  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(PKCS7_SIGNER_INFO) *, sk))
1585
1586#define sk_PKCS7_SIGNER_INFO_set_cmp_func(sk, comp)                           \
1587  ((int (*)(const PKCS7_SIGNER_INFO **a, const PKCS7_SIGNER_INFO **b))        \
1588       sk_set_cmp_func(                                                       \
1589           CHECKED_CAST(_STACK *, STACK_OF(PKCS7_SIGNER_INFO) *, sk),         \
1590           CHECKED_CAST(stack_cmp_func, int (*)(const PKCS7_SIGNER_INFO **a,  \
1591                                                const PKCS7_SIGNER_INFO **b), \
1592                        comp)))
1593
1594#define sk_PKCS7_SIGNER_INFO_deep_copy(sk, copy_func, free_func)             \
1595  ((STACK_OF(PKCS7_SIGNER_INFO) *)sk_deep_copy(                              \
1596      CHECKED_CAST(const _STACK *, const STACK_OF(PKCS7_SIGNER_INFO) *, sk), \
1597      CHECKED_CAST(void *(*)(void *),                                        \
1598                   PKCS7_SIGNER_INFO *(*)(PKCS7_SIGNER_INFO *), copy_func),  \
1599      CHECKED_CAST(void (*)(void *), void (*)(PKCS7_SIGNER_INFO *),          \
1600                   free_func)))
1601
1602/* PKCS7_RECIP_INFO */
1603#define sk_PKCS7_RECIP_INFO_new(comp)                 \
1604  ((STACK_OF(PKCS7_RECIP_INFO) *)sk_new(CHECKED_CAST( \
1605      stack_cmp_func,                                 \
1606      int (*)(const PKCS7_RECIP_INFO **a, const PKCS7_RECIP_INFO **b), comp)))
1607
1608#define sk_PKCS7_RECIP_INFO_new_null() \
1609  ((STACK_OF(PKCS7_RECIP_INFO) *)sk_new_null())
1610
1611#define sk_PKCS7_RECIP_INFO_num(sk) \
1612  sk_num(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk))
1613
1614#define sk_PKCS7_RECIP_INFO_zero(sk) \
1615  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk));
1616
1617#define sk_PKCS7_RECIP_INFO_value(sk, i) \
1618  ((PKCS7_RECIP_INFO *)sk_value(         \
1619      CHECKED_CAST(_STACK *, const STACK_OF(PKCS7_RECIP_INFO) *, sk), (i)))
1620
1621#define sk_PKCS7_RECIP_INFO_set(sk, i, p)                            \
1622  ((PKCS7_RECIP_INFO *)sk_set(                                       \
1623      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk), (i), \
1624      CHECKED_CAST(void *, PKCS7_RECIP_INFO *, p)))
1625
1626#define sk_PKCS7_RECIP_INFO_free(sk) \
1627  sk_free(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk))
1628
1629#define sk_PKCS7_RECIP_INFO_pop_free(sk, free_func)             \
1630  sk_pop_free(                                                  \
1631      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk), \
1632      CHECKED_CAST(void (*)(void *), void (*)(PKCS7_RECIP_INFO *), free_func))
1633
1634#define sk_PKCS7_RECIP_INFO_insert(sk, p, where)                      \
1635  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk), \
1636            CHECKED_CAST(void *, PKCS7_RECIP_INFO *, p), (where))
1637
1638#define sk_PKCS7_RECIP_INFO_delete(sk, where) \
1639  ((PKCS7_RECIP_INFO *)sk_delete(             \
1640      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk), (where)))
1641
1642#define sk_PKCS7_RECIP_INFO_delete_ptr(sk, p)                   \
1643  ((PKCS7_RECIP_INFO *)sk_delete_ptr(                           \
1644      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk), \
1645      CHECKED_CAST(void *, PKCS7_RECIP_INFO *, p)))
1646
1647#define sk_PKCS7_RECIP_INFO_find(sk, out_index, p)                  \
1648  sk_find(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk), \
1649          (out_index), CHECKED_CAST(void *, PKCS7_RECIP_INFO *, p))
1650
1651#define sk_PKCS7_RECIP_INFO_shift(sk) \
1652  ((PKCS7_RECIP_INFO *)sk_shift(      \
1653      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk)))
1654
1655#define sk_PKCS7_RECIP_INFO_push(sk, p)                             \
1656  sk_push(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk), \
1657          CHECKED_CAST(void *, PKCS7_RECIP_INFO *, p))
1658
1659#define sk_PKCS7_RECIP_INFO_pop(sk) \
1660  ((PKCS7_RECIP_INFO *)sk_pop(      \
1661      CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk)))
1662
1663#define sk_PKCS7_RECIP_INFO_dup(sk)      \
1664  ((STACK_OF(PKCS7_RECIP_INFO) *)sk_dup( \
1665      CHECKED_CAST(_STACK *, const STACK_OF(PKCS7_RECIP_INFO) *, sk)))
1666
1667#define sk_PKCS7_RECIP_INFO_sort(sk) \
1668  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk))
1669
1670#define sk_PKCS7_RECIP_INFO_is_sorted(sk) \
1671  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(PKCS7_RECIP_INFO) *, sk))
1672
1673#define sk_PKCS7_RECIP_INFO_set_cmp_func(sk, comp)                           \
1674  ((int (*)(const PKCS7_RECIP_INFO **a, const PKCS7_RECIP_INFO **b))         \
1675       sk_set_cmp_func(                                                      \
1676           CHECKED_CAST(_STACK *, STACK_OF(PKCS7_RECIP_INFO) *, sk),         \
1677           CHECKED_CAST(stack_cmp_func, int (*)(const PKCS7_RECIP_INFO **a,  \
1678                                                const PKCS7_RECIP_INFO **b), \
1679                        comp)))
1680
1681#define sk_PKCS7_RECIP_INFO_deep_copy(sk, copy_func, free_func)             \
1682  ((STACK_OF(PKCS7_RECIP_INFO) *)sk_deep_copy(                              \
1683      CHECKED_CAST(const _STACK *, const STACK_OF(PKCS7_RECIP_INFO) *, sk), \
1684      CHECKED_CAST(void *(*)(void *),                                       \
1685                   PKCS7_RECIP_INFO *(*)(PKCS7_RECIP_INFO *), copy_func),   \
1686      CHECKED_CAST(void (*)(void *), void (*)(PKCS7_RECIP_INFO *),          \
1687                   free_func)))
1688
1689/* POLICYINFO */
1690#define sk_POLICYINFO_new(comp)                                            \
1691  ((STACK_OF(POLICYINFO) *)sk_new(CHECKED_CAST(                            \
1692      stack_cmp_func, int (*)(const POLICYINFO **a, const POLICYINFO **b), \
1693      comp)))
1694
1695#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)sk_new_null())
1696
1697#define sk_POLICYINFO_num(sk) \
1698  sk_num(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk))
1699
1700#define sk_POLICYINFO_zero(sk) \
1701  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk));
1702
1703#define sk_POLICYINFO_value(sk, i) \
1704  ((POLICYINFO *)sk_value(         \
1705      CHECKED_CAST(_STACK *, const STACK_OF(POLICYINFO) *, sk), (i)))
1706
1707#define sk_POLICYINFO_set(sk, i, p)                                         \
1708  ((POLICYINFO *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1709                        (i), CHECKED_CAST(void *, POLICYINFO *, p)))
1710
1711#define sk_POLICYINFO_free(sk) \
1712  sk_free(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk))
1713
1714#define sk_POLICYINFO_pop_free(sk, free_func)             \
1715  sk_pop_free(                                            \
1716      CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1717      CHECKED_CAST(void (*)(void *), void (*)(POLICYINFO *), free_func))
1718
1719#define sk_POLICYINFO_insert(sk, p, where)                      \
1720  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1721            CHECKED_CAST(void *, POLICYINFO *, p), (where))
1722
1723#define sk_POLICYINFO_delete(sk, where)                                        \
1724  ((POLICYINFO *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1725                           (where)))
1726
1727#define sk_POLICYINFO_delete_ptr(sk, p)                   \
1728  ((POLICYINFO *)sk_delete_ptr(                           \
1729      CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1730      CHECKED_CAST(void *, POLICYINFO *, p)))
1731
1732#define sk_POLICYINFO_find(sk, out_index, p)                               \
1733  sk_find(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), (out_index), \
1734          CHECKED_CAST(void *, POLICYINFO *, p))
1735
1736#define sk_POLICYINFO_shift(sk) \
1737  ((POLICYINFO *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk)))
1738
1739#define sk_POLICYINFO_push(sk, p)                             \
1740  sk_push(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1741          CHECKED_CAST(void *, POLICYINFO *, p))
1742
1743#define sk_POLICYINFO_pop(sk) \
1744  ((POLICYINFO *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk)))
1745
1746#define sk_POLICYINFO_dup(sk)      \
1747  ((STACK_OF(POLICYINFO) *)sk_dup( \
1748      CHECKED_CAST(_STACK *, const STACK_OF(POLICYINFO) *, sk)))
1749
1750#define sk_POLICYINFO_sort(sk) \
1751  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk))
1752
1753#define sk_POLICYINFO_is_sorted(sk) \
1754  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(POLICYINFO) *, sk))
1755
1756#define sk_POLICYINFO_set_cmp_func(sk, comp)                             \
1757  ((int (*)(const POLICYINFO **a, const POLICYINFO **b))sk_set_cmp_func( \
1758      CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk),                \
1759      CHECKED_CAST(stack_cmp_func,                                       \
1760                   int (*)(const POLICYINFO **a, const POLICYINFO **b),  \
1761                   comp)))
1762
1763#define sk_POLICYINFO_deep_copy(sk, copy_func, free_func)             \
1764  ((STACK_OF(POLICYINFO) *)sk_deep_copy(                              \
1765      CHECKED_CAST(const _STACK *, const STACK_OF(POLICYINFO) *, sk), \
1766      CHECKED_CAST(void *(*)(void *), POLICYINFO *(*)(POLICYINFO *),  \
1767                   copy_func),                                        \
1768      CHECKED_CAST(void (*)(void *), void (*)(POLICYINFO *), free_func)))
1769
1770/* POLICYQUALINFO */
1771#define sk_POLICYQUALINFO_new(comp)                 \
1772  ((STACK_OF(POLICYQUALINFO) *)sk_new(CHECKED_CAST( \
1773      stack_cmp_func,                               \
1774      int (*)(const POLICYQUALINFO **a, const POLICYQUALINFO **b), comp)))
1775
1776#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)sk_new_null())
1777
1778#define sk_POLICYQUALINFO_num(sk) \
1779  sk_num(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk))
1780
1781#define sk_POLICYQUALINFO_zero(sk) \
1782  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk));
1783
1784#define sk_POLICYQUALINFO_value(sk, i) \
1785  ((POLICYQUALINFO *)sk_value(         \
1786      CHECKED_CAST(_STACK *, const STACK_OF(POLICYQUALINFO) *, sk), (i)))
1787
1788#define sk_POLICYQUALINFO_set(sk, i, p)                            \
1789  ((POLICYQUALINFO *)sk_set(                                       \
1790      CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), (i), \
1791      CHECKED_CAST(void *, POLICYQUALINFO *, p)))
1792
1793#define sk_POLICYQUALINFO_free(sk) \
1794  sk_free(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk))
1795
1796#define sk_POLICYQUALINFO_pop_free(sk, free_func)             \
1797  sk_pop_free(                                                \
1798      CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1799      CHECKED_CAST(void (*)(void *), void (*)(POLICYQUALINFO *), free_func))
1800
1801#define sk_POLICYQUALINFO_insert(sk, p, where)                      \
1802  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1803            CHECKED_CAST(void *, POLICYQUALINFO *, p), (where))
1804
1805#define sk_POLICYQUALINFO_delete(sk, where) \
1806  ((POLICYQUALINFO *)sk_delete(             \
1807      CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), (where)))
1808
1809#define sk_POLICYQUALINFO_delete_ptr(sk, p)                   \
1810  ((POLICYQUALINFO *)sk_delete_ptr(                           \
1811      CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1812      CHECKED_CAST(void *, POLICYQUALINFO *, p)))
1813
1814#define sk_POLICYQUALINFO_find(sk, out_index, p)                               \
1815  sk_find(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), (out_index), \
1816          CHECKED_CAST(void *, POLICYQUALINFO *, p))
1817
1818#define sk_POLICYQUALINFO_shift(sk) \
1819  ((POLICYQUALINFO *)sk_shift(      \
1820      CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk)))
1821
1822#define sk_POLICYQUALINFO_push(sk, p)                             \
1823  sk_push(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1824          CHECKED_CAST(void *, POLICYQUALINFO *, p))
1825
1826#define sk_POLICYQUALINFO_pop(sk) \
1827  ((POLICYQUALINFO *)sk_pop(      \
1828      CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk)))
1829
1830#define sk_POLICYQUALINFO_dup(sk)      \
1831  ((STACK_OF(POLICYQUALINFO) *)sk_dup( \
1832      CHECKED_CAST(_STACK *, const STACK_OF(POLICYQUALINFO) *, sk)))
1833
1834#define sk_POLICYQUALINFO_sort(sk) \
1835  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk))
1836
1837#define sk_POLICYQUALINFO_is_sorted(sk) \
1838  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(POLICYQUALINFO) *, sk))
1839
1840#define sk_POLICYQUALINFO_set_cmp_func(sk, comp)                           \
1841  ((int (*)(const POLICYQUALINFO **a, const POLICYQUALINFO **b))           \
1842       sk_set_cmp_func(                                                    \
1843           CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk),         \
1844           CHECKED_CAST(stack_cmp_func, int (*)(const POLICYQUALINFO **a,  \
1845                                                const POLICYQUALINFO **b), \
1846                        comp)))
1847
1848#define sk_POLICYQUALINFO_deep_copy(sk, copy_func, free_func)                \
1849  ((STACK_OF(POLICYQUALINFO) *)sk_deep_copy(                                 \
1850      CHECKED_CAST(const _STACK *, const STACK_OF(POLICYQUALINFO) *, sk),    \
1851      CHECKED_CAST(void *(*)(void *), POLICYQUALINFO *(*)(POLICYQUALINFO *), \
1852                   copy_func),                                               \
1853      CHECKED_CAST(void (*)(void *), void (*)(POLICYQUALINFO *), free_func)))
1854
1855/* POLICY_MAPPING */
1856#define sk_POLICY_MAPPING_new(comp)                 \
1857  ((STACK_OF(POLICY_MAPPING) *)sk_new(CHECKED_CAST( \
1858      stack_cmp_func,                               \
1859      int (*)(const POLICY_MAPPING **a, const POLICY_MAPPING **b), comp)))
1860
1861#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)sk_new_null())
1862
1863#define sk_POLICY_MAPPING_num(sk) \
1864  sk_num(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk))
1865
1866#define sk_POLICY_MAPPING_zero(sk) \
1867  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk));
1868
1869#define sk_POLICY_MAPPING_value(sk, i) \
1870  ((POLICY_MAPPING *)sk_value(         \
1871      CHECKED_CAST(_STACK *, const STACK_OF(POLICY_MAPPING) *, sk), (i)))
1872
1873#define sk_POLICY_MAPPING_set(sk, i, p)                            \
1874  ((POLICY_MAPPING *)sk_set(                                       \
1875      CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), (i), \
1876      CHECKED_CAST(void *, POLICY_MAPPING *, p)))
1877
1878#define sk_POLICY_MAPPING_free(sk) \
1879  sk_free(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk))
1880
1881#define sk_POLICY_MAPPING_pop_free(sk, free_func)             \
1882  sk_pop_free(                                                \
1883      CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1884      CHECKED_CAST(void (*)(void *), void (*)(POLICY_MAPPING *), free_func))
1885
1886#define sk_POLICY_MAPPING_insert(sk, p, where)                      \
1887  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1888            CHECKED_CAST(void *, POLICY_MAPPING *, p), (where))
1889
1890#define sk_POLICY_MAPPING_delete(sk, where) \
1891  ((POLICY_MAPPING *)sk_delete(             \
1892      CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), (where)))
1893
1894#define sk_POLICY_MAPPING_delete_ptr(sk, p)                   \
1895  ((POLICY_MAPPING *)sk_delete_ptr(                           \
1896      CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1897      CHECKED_CAST(void *, POLICY_MAPPING *, p)))
1898
1899#define sk_POLICY_MAPPING_find(sk, out_index, p)                               \
1900  sk_find(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), (out_index), \
1901          CHECKED_CAST(void *, POLICY_MAPPING *, p))
1902
1903#define sk_POLICY_MAPPING_shift(sk) \
1904  ((POLICY_MAPPING *)sk_shift(      \
1905      CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk)))
1906
1907#define sk_POLICY_MAPPING_push(sk, p)                             \
1908  sk_push(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1909          CHECKED_CAST(void *, POLICY_MAPPING *, p))
1910
1911#define sk_POLICY_MAPPING_pop(sk) \
1912  ((POLICY_MAPPING *)sk_pop(      \
1913      CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk)))
1914
1915#define sk_POLICY_MAPPING_dup(sk)      \
1916  ((STACK_OF(POLICY_MAPPING) *)sk_dup( \
1917      CHECKED_CAST(_STACK *, const STACK_OF(POLICY_MAPPING) *, sk)))
1918
1919#define sk_POLICY_MAPPING_sort(sk) \
1920  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk))
1921
1922#define sk_POLICY_MAPPING_is_sorted(sk) \
1923  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(POLICY_MAPPING) *, sk))
1924
1925#define sk_POLICY_MAPPING_set_cmp_func(sk, comp)                           \
1926  ((int (*)(const POLICY_MAPPING **a, const POLICY_MAPPING **b))           \
1927       sk_set_cmp_func(                                                    \
1928           CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk),         \
1929           CHECKED_CAST(stack_cmp_func, int (*)(const POLICY_MAPPING **a,  \
1930                                                const POLICY_MAPPING **b), \
1931                        comp)))
1932
1933#define sk_POLICY_MAPPING_deep_copy(sk, copy_func, free_func)                \
1934  ((STACK_OF(POLICY_MAPPING) *)sk_deep_copy(                                 \
1935      CHECKED_CAST(const _STACK *, const STACK_OF(POLICY_MAPPING) *, sk),    \
1936      CHECKED_CAST(void *(*)(void *), POLICY_MAPPING *(*)(POLICY_MAPPING *), \
1937                   copy_func),                                               \
1938      CHECKED_CAST(void (*)(void *), void (*)(POLICY_MAPPING *), free_func)))
1939
1940/* SSL_COMP */
1941#define sk_SSL_COMP_new(comp)                 \
1942  ((STACK_OF(SSL_COMP) *)sk_new(CHECKED_CAST( \
1943      stack_cmp_func, int (*)(const SSL_COMP **a, const SSL_COMP **b), comp)))
1944
1945#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)sk_new_null())
1946
1947#define sk_SSL_COMP_num(sk) \
1948  sk_num(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk))
1949
1950#define sk_SSL_COMP_zero(sk) \
1951  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk));
1952
1953#define sk_SSL_COMP_value(sk, i) \
1954  ((SSL_COMP *)sk_value(         \
1955      CHECKED_CAST(_STACK *, const STACK_OF(SSL_COMP) *, sk), (i)))
1956
1957#define sk_SSL_COMP_set(sk, i, p)                                            \
1958  ((SSL_COMP *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), (i), \
1959                      CHECKED_CAST(void *, SSL_COMP *, p)))
1960
1961#define sk_SSL_COMP_free(sk) \
1962  sk_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk))
1963
1964#define sk_SSL_COMP_pop_free(sk, free_func)                     \
1965  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1966              CHECKED_CAST(void (*)(void *), void (*)(SSL_COMP *), free_func))
1967
1968#define sk_SSL_COMP_insert(sk, p, where)                      \
1969  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1970            CHECKED_CAST(void *, SSL_COMP *, p), (where))
1971
1972#define sk_SSL_COMP_delete(sk, where)                                      \
1973  ((SSL_COMP *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1974                         (where)))
1975
1976#define sk_SSL_COMP_delete_ptr(sk, p)                                          \
1977  ((SSL_COMP *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1978                             CHECKED_CAST(void *, SSL_COMP *, p)))
1979
1980#define sk_SSL_COMP_find(sk, out_index, p)                               \
1981  sk_find(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), (out_index), \
1982          CHECKED_CAST(void *, SSL_COMP *, p))
1983
1984#define sk_SSL_COMP_shift(sk) \
1985  ((SSL_COMP *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk)))
1986
1987#define sk_SSL_COMP_push(sk, p)                             \
1988  sk_push(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1989          CHECKED_CAST(void *, SSL_COMP *, p))
1990
1991#define sk_SSL_COMP_pop(sk) \
1992  ((SSL_COMP *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk)))
1993
1994#define sk_SSL_COMP_dup(sk)      \
1995  ((STACK_OF(SSL_COMP) *)sk_dup( \
1996      CHECKED_CAST(_STACK *, const STACK_OF(SSL_COMP) *, sk)))
1997
1998#define sk_SSL_COMP_sort(sk) \
1999  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk))
2000
2001#define sk_SSL_COMP_is_sorted(sk) \
2002  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(SSL_COMP) *, sk))
2003
2004#define sk_SSL_COMP_set_cmp_func(sk, comp)                           \
2005  ((int (*)(const SSL_COMP **a, const SSL_COMP **b))sk_set_cmp_func( \
2006      CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk),              \
2007      CHECKED_CAST(stack_cmp_func,                                   \
2008                   int (*)(const SSL_COMP **a, const SSL_COMP **b), comp)))
2009
2010#define sk_SSL_COMP_deep_copy(sk, copy_func, free_func)                      \
2011  ((STACK_OF(SSL_COMP) *)sk_deep_copy(                                       \
2012      CHECKED_CAST(const _STACK *, const STACK_OF(SSL_COMP) *, sk),          \
2013      CHECKED_CAST(void *(*)(void *), SSL_COMP *(*)(SSL_COMP *), copy_func), \
2014      CHECKED_CAST(void (*)(void *), void (*)(SSL_COMP *), free_func)))
2015
2016/* STACK_OF_X509_NAME_ENTRY */
2017#define sk_STACK_OF_X509_NAME_ENTRY_new(comp)                      \
2018  ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_new(CHECKED_CAST(      \
2019      stack_cmp_func, int (*)(const STACK_OF_X509_NAME_ENTRY **a,  \
2020                              const STACK_OF_X509_NAME_ENTRY **b), \
2021      comp)))
2022
2023#define sk_STACK_OF_X509_NAME_ENTRY_new_null() \
2024  ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_new_null())
2025
2026#define sk_STACK_OF_X509_NAME_ENTRY_num(sk) \
2027  sk_num(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
2028
2029#define sk_STACK_OF_X509_NAME_ENTRY_zero(sk) \
2030  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk));
2031
2032#define sk_STACK_OF_X509_NAME_ENTRY_value(sk, i)                              \
2033  ((STACK_OF_X509_NAME_ENTRY *)sk_value(                                      \
2034      CHECKED_CAST(_STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2035      (i)))
2036
2037#define sk_STACK_OF_X509_NAME_ENTRY_set(sk, i, p)                            \
2038  ((STACK_OF_X509_NAME_ENTRY *)sk_set(                                       \
2039      CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), (i), \
2040      CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p)))
2041
2042#define sk_STACK_OF_X509_NAME_ENTRY_free(sk) \
2043  sk_free(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
2044
2045#define sk_STACK_OF_X509_NAME_ENTRY_pop_free(sk, free_func)                \
2046  sk_pop_free(                                                             \
2047      CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk),    \
2048      CHECKED_CAST(void (*)(void *), void (*)(STACK_OF_X509_NAME_ENTRY *), \
2049                   free_func))
2050
2051#define sk_STACK_OF_X509_NAME_ENTRY_insert(sk, p, where)                      \
2052  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2053            CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p), (where))
2054
2055#define sk_STACK_OF_X509_NAME_ENTRY_delete(sk, where)                   \
2056  ((STACK_OF_X509_NAME_ENTRY *)sk_delete(                               \
2057      CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2058      (where)))
2059
2060#define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(sk, p)                   \
2061  ((STACK_OF_X509_NAME_ENTRY *)sk_delete_ptr(                           \
2062      CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2063      CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p)))
2064
2065#define sk_STACK_OF_X509_NAME_ENTRY_find(sk, out_index, p)                  \
2066  sk_find(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2067          (out_index), CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p))
2068
2069#define sk_STACK_OF_X509_NAME_ENTRY_shift(sk) \
2070  ((STACK_OF_X509_NAME_ENTRY *)sk_shift(      \
2071      CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk)))
2072
2073#define sk_STACK_OF_X509_NAME_ENTRY_push(sk, p)                             \
2074  sk_push(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2075          CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p))
2076
2077#define sk_STACK_OF_X509_NAME_ENTRY_pop(sk) \
2078  ((STACK_OF_X509_NAME_ENTRY *)sk_pop(      \
2079      CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk)))
2080
2081#define sk_STACK_OF_X509_NAME_ENTRY_dup(sk)      \
2082  ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_dup( \
2083      CHECKED_CAST(_STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk)))
2084
2085#define sk_STACK_OF_X509_NAME_ENTRY_sort(sk) \
2086  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
2087
2088#define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(sk) \
2089  sk_is_sorted(                                   \
2090      CHECKED_CAST(_STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
2091
2092#define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(sk, comp)                   \
2093  ((int (*)(const STACK_OF_X509_NAME_ENTRY **a,                              \
2094            const STACK_OF_X509_NAME_ENTRY **b))                             \
2095       sk_set_cmp_func(                                                      \
2096           CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2097           CHECKED_CAST(stack_cmp_func,                                      \
2098                        int (*)(const STACK_OF_X509_NAME_ENTRY **a,          \
2099                                const STACK_OF_X509_NAME_ENTRY **b),         \
2100                        comp)))
2101
2102#define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(sk, copy_func, free_func)        \
2103  ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_deep_copy(                         \
2104      CHECKED_CAST(const _STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, \
2105                   sk),                                                        \
2106      CHECKED_CAST(void *(*)(void *),                                          \
2107                   STACK_OF_X509_NAME_ENTRY *(*)(STACK_OF_X509_NAME_ENTRY *),  \
2108                   copy_func),                                                 \
2109      CHECKED_CAST(void (*)(void *), void (*)(STACK_OF_X509_NAME_ENTRY *),     \
2110                   free_func)))
2111
2112/* SXNETID */
2113#define sk_SXNETID_new(comp)                 \
2114  ((STACK_OF(SXNETID) *)sk_new(CHECKED_CAST( \
2115      stack_cmp_func, int (*)(const SXNETID **a, const SXNETID **b), comp)))
2116
2117#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)sk_new_null())
2118
2119#define sk_SXNETID_num(sk) \
2120  sk_num(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk))
2121
2122#define sk_SXNETID_zero(sk) \
2123  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk));
2124
2125#define sk_SXNETID_value(sk, i)                                               \
2126  ((SXNETID *)sk_value(CHECKED_CAST(_STACK *, const STACK_OF(SXNETID) *, sk), \
2127                       (i)))
2128
2129#define sk_SXNETID_set(sk, i, p)                                           \
2130  ((SXNETID *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), (i), \
2131                     CHECKED_CAST(void *, SXNETID *, p)))
2132
2133#define sk_SXNETID_free(sk) \
2134  sk_free(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk))
2135
2136#define sk_SXNETID_pop_free(sk, free_func)                     \
2137  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2138              CHECKED_CAST(void (*)(void *), void (*)(SXNETID *), free_func))
2139
2140#define sk_SXNETID_insert(sk, p, where)                      \
2141  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2142            CHECKED_CAST(void *, SXNETID *, p), (where))
2143
2144#define sk_SXNETID_delete(sk, where)                                     \
2145  ((SXNETID *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2146                        (where)))
2147
2148#define sk_SXNETID_delete_ptr(sk, p)                                         \
2149  ((SXNETID *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2150                            CHECKED_CAST(void *, SXNETID *, p)))
2151
2152#define sk_SXNETID_find(sk, out_index, p)                               \
2153  sk_find(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), (out_index), \
2154          CHECKED_CAST(void *, SXNETID *, p))
2155
2156#define sk_SXNETID_shift(sk) \
2157  ((SXNETID *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk)))
2158
2159#define sk_SXNETID_push(sk, p)                             \
2160  sk_push(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2161          CHECKED_CAST(void *, SXNETID *, p))
2162
2163#define sk_SXNETID_pop(sk) \
2164  ((SXNETID *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk)))
2165
2166#define sk_SXNETID_dup(sk)      \
2167  ((STACK_OF(SXNETID) *)sk_dup( \
2168      CHECKED_CAST(_STACK *, const STACK_OF(SXNETID) *, sk)))
2169
2170#define sk_SXNETID_sort(sk) \
2171  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk))
2172
2173#define sk_SXNETID_is_sorted(sk) \
2174  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(SXNETID) *, sk))
2175
2176#define sk_SXNETID_set_cmp_func(sk, comp)                          \
2177  ((int (*)(const SXNETID **a, const SXNETID **b))sk_set_cmp_func( \
2178      CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk),             \
2179      CHECKED_CAST(stack_cmp_func,                                 \
2180                   int (*)(const SXNETID **a, const SXNETID **b), comp)))
2181
2182#define sk_SXNETID_deep_copy(sk, copy_func, free_func)                     \
2183  ((STACK_OF(SXNETID) *)sk_deep_copy(                                      \
2184      CHECKED_CAST(const _STACK *, const STACK_OF(SXNETID) *, sk),         \
2185      CHECKED_CAST(void *(*)(void *), SXNETID *(*)(SXNETID *), copy_func), \
2186      CHECKED_CAST(void (*)(void *), void (*)(SXNETID *), free_func)))
2187
2188/* X509 */
2189#define sk_X509_new(comp)                 \
2190  ((STACK_OF(X509) *)sk_new(CHECKED_CAST( \
2191      stack_cmp_func, int (*)(const X509 **a, const X509 **b), comp)))
2192
2193#define sk_X509_new_null() ((STACK_OF(X509) *)sk_new_null())
2194
2195#define sk_X509_num(sk) sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk))
2196
2197#define sk_X509_zero(sk) sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk));
2198
2199#define sk_X509_value(sk, i) \
2200  ((X509 *)sk_value(CHECKED_CAST(_STACK *, const STACK_OF(X509) *, sk), (i)))
2201
2202#define sk_X509_set(sk, i, p)                                        \
2203  ((X509 *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), (i), \
2204                  CHECKED_CAST(void *, X509 *, p)))
2205
2206#define sk_X509_free(sk) sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk))
2207
2208#define sk_X509_pop_free(sk, free_func)                     \
2209  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2210              CHECKED_CAST(void (*)(void *), void (*)(X509 *), free_func))
2211
2212#define sk_X509_insert(sk, p, where)                      \
2213  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2214            CHECKED_CAST(void *, X509 *, p), (where))
2215
2216#define sk_X509_delete(sk, where) \
2217  ((X509 *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), (where)))
2218
2219#define sk_X509_delete_ptr(sk, p)                                      \
2220  ((X509 *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2221                         CHECKED_CAST(void *, X509 *, p)))
2222
2223#define sk_X509_find(sk, out_index, p)                               \
2224  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), (out_index), \
2225          CHECKED_CAST(void *, X509 *, p))
2226
2227#define sk_X509_shift(sk) \
2228  ((X509 *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk)))
2229
2230#define sk_X509_push(sk, p)                             \
2231  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2232          CHECKED_CAST(void *, X509 *, p))
2233
2234#define sk_X509_pop(sk) \
2235  ((X509 *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk)))
2236
2237#define sk_X509_dup(sk) \
2238  ((STACK_OF(X509) *)sk_dup(CHECKED_CAST(_STACK *, const STACK_OF(X509) *, sk)))
2239
2240#define sk_X509_sort(sk) sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk))
2241
2242#define sk_X509_is_sorted(sk) \
2243  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509) *, sk))
2244
2245#define sk_X509_set_cmp_func(sk, comp)                                      \
2246  ((int (*)(const X509 **a, const X509 **b))sk_set_cmp_func(                \
2247      CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk),                         \
2248      CHECKED_CAST(stack_cmp_func, int (*)(const X509 **a, const X509 **b), \
2249                   comp)))
2250
2251#define sk_X509_deep_copy(sk, copy_func, free_func)                  \
2252  ((STACK_OF(X509) *)sk_deep_copy(                                   \
2253      CHECKED_CAST(const _STACK *, const STACK_OF(X509) *, sk),      \
2254      CHECKED_CAST(void *(*)(void *), X509 *(*)(X509 *), copy_func), \
2255      CHECKED_CAST(void (*)(void *), void (*)(X509 *), free_func)))
2256
2257/* X509V3_EXT_METHOD */
2258#define sk_X509V3_EXT_METHOD_new(comp)                                   \
2259  ((STACK_OF(X509V3_EXT_METHOD) *)sk_new(CHECKED_CAST(                   \
2260      stack_cmp_func,                                                    \
2261      int (*)(const X509V3_EXT_METHOD **a, const X509V3_EXT_METHOD **b), \
2262      comp)))
2263
2264#define sk_X509V3_EXT_METHOD_new_null() \
2265  ((STACK_OF(X509V3_EXT_METHOD) *)sk_new_null())
2266
2267#define sk_X509V3_EXT_METHOD_num(sk) \
2268  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk))
2269
2270#define sk_X509V3_EXT_METHOD_zero(sk) \
2271  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk));
2272
2273#define sk_X509V3_EXT_METHOD_value(sk, i) \
2274  ((X509V3_EXT_METHOD *)sk_value(         \
2275      CHECKED_CAST(_STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk), (i)))
2276
2277#define sk_X509V3_EXT_METHOD_set(sk, i, p)                            \
2278  ((X509V3_EXT_METHOD *)sk_set(                                       \
2279      CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), (i), \
2280      CHECKED_CAST(void *, X509V3_EXT_METHOD *, p)))
2281
2282#define sk_X509V3_EXT_METHOD_free(sk) \
2283  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk))
2284
2285#define sk_X509V3_EXT_METHOD_pop_free(sk, free_func)                        \
2286  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk),    \
2287              CHECKED_CAST(void (*)(void *), void (*)(X509V3_EXT_METHOD *), \
2288                           free_func))
2289
2290#define sk_X509V3_EXT_METHOD_insert(sk, p, where)                      \
2291  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2292            CHECKED_CAST(void *, X509V3_EXT_METHOD *, p), (where))
2293
2294#define sk_X509V3_EXT_METHOD_delete(sk, where) \
2295  ((X509V3_EXT_METHOD *)sk_delete(             \
2296      CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), (where)))
2297
2298#define sk_X509V3_EXT_METHOD_delete_ptr(sk, p)                   \
2299  ((X509V3_EXT_METHOD *)sk_delete_ptr(                           \
2300      CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2301      CHECKED_CAST(void *, X509V3_EXT_METHOD *, p)))
2302
2303#define sk_X509V3_EXT_METHOD_find(sk, out_index, p)                  \
2304  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2305          (out_index), CHECKED_CAST(void *, X509V3_EXT_METHOD *, p))
2306
2307#define sk_X509V3_EXT_METHOD_shift(sk) \
2308  ((X509V3_EXT_METHOD *)sk_shift(      \
2309      CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk)))
2310
2311#define sk_X509V3_EXT_METHOD_push(sk, p)                             \
2312  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2313          CHECKED_CAST(void *, X509V3_EXT_METHOD *, p))
2314
2315#define sk_X509V3_EXT_METHOD_pop(sk) \
2316  ((X509V3_EXT_METHOD *)sk_pop(      \
2317      CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk)))
2318
2319#define sk_X509V3_EXT_METHOD_dup(sk)      \
2320  ((STACK_OF(X509V3_EXT_METHOD) *)sk_dup( \
2321      CHECKED_CAST(_STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk)))
2322
2323#define sk_X509V3_EXT_METHOD_sort(sk) \
2324  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk))
2325
2326#define sk_X509V3_EXT_METHOD_is_sorted(sk) \
2327  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk))
2328
2329#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, comp)                           \
2330  ((int (*)(const X509V3_EXT_METHOD **a, const X509V3_EXT_METHOD **b))        \
2331       sk_set_cmp_func(                                                       \
2332           CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk),         \
2333           CHECKED_CAST(stack_cmp_func, int (*)(const X509V3_EXT_METHOD **a,  \
2334                                                const X509V3_EXT_METHOD **b), \
2335                        comp)))
2336
2337#define sk_X509V3_EXT_METHOD_deep_copy(sk, copy_func, free_func)             \
2338  ((STACK_OF(X509V3_EXT_METHOD) *)sk_deep_copy(                              \
2339      CHECKED_CAST(const _STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk), \
2340      CHECKED_CAST(void *(*)(void *),                                        \
2341                   X509V3_EXT_METHOD *(*)(X509V3_EXT_METHOD *), copy_func),  \
2342      CHECKED_CAST(void (*)(void *), void (*)(X509V3_EXT_METHOD *),          \
2343                   free_func)))
2344
2345/* X509_ALGOR */
2346#define sk_X509_ALGOR_new(comp)                                            \
2347  ((STACK_OF(X509_ALGOR) *)sk_new(CHECKED_CAST(                            \
2348      stack_cmp_func, int (*)(const X509_ALGOR **a, const X509_ALGOR **b), \
2349      comp)))
2350
2351#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)sk_new_null())
2352
2353#define sk_X509_ALGOR_num(sk) \
2354  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk))
2355
2356#define sk_X509_ALGOR_zero(sk) \
2357  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk));
2358
2359#define sk_X509_ALGOR_value(sk, i) \
2360  ((X509_ALGOR *)sk_value(         \
2361      CHECKED_CAST(_STACK *, const STACK_OF(X509_ALGOR) *, sk), (i)))
2362
2363#define sk_X509_ALGOR_set(sk, i, p)                                         \
2364  ((X509_ALGOR *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2365                        (i), CHECKED_CAST(void *, X509_ALGOR *, p)))
2366
2367#define sk_X509_ALGOR_free(sk) \
2368  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk))
2369
2370#define sk_X509_ALGOR_pop_free(sk, free_func)             \
2371  sk_pop_free(                                            \
2372      CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2373      CHECKED_CAST(void (*)(void *), void (*)(X509_ALGOR *), free_func))
2374
2375#define sk_X509_ALGOR_insert(sk, p, where)                      \
2376  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2377            CHECKED_CAST(void *, X509_ALGOR *, p), (where))
2378
2379#define sk_X509_ALGOR_delete(sk, where)                                        \
2380  ((X509_ALGOR *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2381                           (where)))
2382
2383#define sk_X509_ALGOR_delete_ptr(sk, p)                   \
2384  ((X509_ALGOR *)sk_delete_ptr(                           \
2385      CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2386      CHECKED_CAST(void *, X509_ALGOR *, p)))
2387
2388#define sk_X509_ALGOR_find(sk, out_index, p)                               \
2389  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), (out_index), \
2390          CHECKED_CAST(void *, X509_ALGOR *, p))
2391
2392#define sk_X509_ALGOR_shift(sk) \
2393  ((X509_ALGOR *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk)))
2394
2395#define sk_X509_ALGOR_push(sk, p)                             \
2396  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2397          CHECKED_CAST(void *, X509_ALGOR *, p))
2398
2399#define sk_X509_ALGOR_pop(sk) \
2400  ((X509_ALGOR *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk)))
2401
2402#define sk_X509_ALGOR_dup(sk)      \
2403  ((STACK_OF(X509_ALGOR) *)sk_dup( \
2404      CHECKED_CAST(_STACK *, const STACK_OF(X509_ALGOR) *, sk)))
2405
2406#define sk_X509_ALGOR_sort(sk) \
2407  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk))
2408
2409#define sk_X509_ALGOR_is_sorted(sk) \
2410  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_ALGOR) *, sk))
2411
2412#define sk_X509_ALGOR_set_cmp_func(sk, comp)                             \
2413  ((int (*)(const X509_ALGOR **a, const X509_ALGOR **b))sk_set_cmp_func( \
2414      CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk),                \
2415      CHECKED_CAST(stack_cmp_func,                                       \
2416                   int (*)(const X509_ALGOR **a, const X509_ALGOR **b),  \
2417                   comp)))
2418
2419#define sk_X509_ALGOR_deep_copy(sk, copy_func, free_func)             \
2420  ((STACK_OF(X509_ALGOR) *)sk_deep_copy(                              \
2421      CHECKED_CAST(const _STACK *, const STACK_OF(X509_ALGOR) *, sk), \
2422      CHECKED_CAST(void *(*)(void *), X509_ALGOR *(*)(X509_ALGOR *),  \
2423                   copy_func),                                        \
2424      CHECKED_CAST(void (*)(void *), void (*)(X509_ALGOR *), free_func)))
2425
2426/* X509_ATTRIBUTE */
2427#define sk_X509_ATTRIBUTE_new(comp)                 \
2428  ((STACK_OF(X509_ATTRIBUTE) *)sk_new(CHECKED_CAST( \
2429      stack_cmp_func,                               \
2430      int (*)(const X509_ATTRIBUTE **a, const X509_ATTRIBUTE **b), comp)))
2431
2432#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)sk_new_null())
2433
2434#define sk_X509_ATTRIBUTE_num(sk) \
2435  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk))
2436
2437#define sk_X509_ATTRIBUTE_zero(sk) \
2438  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk));
2439
2440#define sk_X509_ATTRIBUTE_value(sk, i) \
2441  ((X509_ATTRIBUTE *)sk_value(         \
2442      CHECKED_CAST(_STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk), (i)))
2443
2444#define sk_X509_ATTRIBUTE_set(sk, i, p)                            \
2445  ((X509_ATTRIBUTE *)sk_set(                                       \
2446      CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), (i), \
2447      CHECKED_CAST(void *, X509_ATTRIBUTE *, p)))
2448
2449#define sk_X509_ATTRIBUTE_free(sk) \
2450  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk))
2451
2452#define sk_X509_ATTRIBUTE_pop_free(sk, free_func)             \
2453  sk_pop_free(                                                \
2454      CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2455      CHECKED_CAST(void (*)(void *), void (*)(X509_ATTRIBUTE *), free_func))
2456
2457#define sk_X509_ATTRIBUTE_insert(sk, p, where)                      \
2458  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2459            CHECKED_CAST(void *, X509_ATTRIBUTE *, p), (where))
2460
2461#define sk_X509_ATTRIBUTE_delete(sk, where) \
2462  ((X509_ATTRIBUTE *)sk_delete(             \
2463      CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), (where)))
2464
2465#define sk_X509_ATTRIBUTE_delete_ptr(sk, p)                   \
2466  ((X509_ATTRIBUTE *)sk_delete_ptr(                           \
2467      CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2468      CHECKED_CAST(void *, X509_ATTRIBUTE *, p)))
2469
2470#define sk_X509_ATTRIBUTE_find(sk, out_index, p)                               \
2471  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), (out_index), \
2472          CHECKED_CAST(void *, X509_ATTRIBUTE *, p))
2473
2474#define sk_X509_ATTRIBUTE_shift(sk) \
2475  ((X509_ATTRIBUTE *)sk_shift(      \
2476      CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk)))
2477
2478#define sk_X509_ATTRIBUTE_push(sk, p)                             \
2479  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2480          CHECKED_CAST(void *, X509_ATTRIBUTE *, p))
2481
2482#define sk_X509_ATTRIBUTE_pop(sk) \
2483  ((X509_ATTRIBUTE *)sk_pop(      \
2484      CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk)))
2485
2486#define sk_X509_ATTRIBUTE_dup(sk)      \
2487  ((STACK_OF(X509_ATTRIBUTE) *)sk_dup( \
2488      CHECKED_CAST(_STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk)))
2489
2490#define sk_X509_ATTRIBUTE_sort(sk) \
2491  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk))
2492
2493#define sk_X509_ATTRIBUTE_is_sorted(sk) \
2494  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk))
2495
2496#define sk_X509_ATTRIBUTE_set_cmp_func(sk, comp)                           \
2497  ((int (*)(const X509_ATTRIBUTE **a, const X509_ATTRIBUTE **b))           \
2498       sk_set_cmp_func(                                                    \
2499           CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk),         \
2500           CHECKED_CAST(stack_cmp_func, int (*)(const X509_ATTRIBUTE **a,  \
2501                                                const X509_ATTRIBUTE **b), \
2502                        comp)))
2503
2504#define sk_X509_ATTRIBUTE_deep_copy(sk, copy_func, free_func)                \
2505  ((STACK_OF(X509_ATTRIBUTE) *)sk_deep_copy(                                 \
2506      CHECKED_CAST(const _STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk),    \
2507      CHECKED_CAST(void *(*)(void *), X509_ATTRIBUTE *(*)(X509_ATTRIBUTE *), \
2508                   copy_func),                                               \
2509      CHECKED_CAST(void (*)(void *), void (*)(X509_ATTRIBUTE *), free_func)))
2510
2511/* X509_CRL */
2512#define sk_X509_CRL_new(comp)                 \
2513  ((STACK_OF(X509_CRL) *)sk_new(CHECKED_CAST( \
2514      stack_cmp_func, int (*)(const X509_CRL **a, const X509_CRL **b), comp)))
2515
2516#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)sk_new_null())
2517
2518#define sk_X509_CRL_num(sk) \
2519  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk))
2520
2521#define sk_X509_CRL_zero(sk) \
2522  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk));
2523
2524#define sk_X509_CRL_value(sk, i) \
2525  ((X509_CRL *)sk_value(         \
2526      CHECKED_CAST(_STACK *, const STACK_OF(X509_CRL) *, sk), (i)))
2527
2528#define sk_X509_CRL_set(sk, i, p)                                            \
2529  ((X509_CRL *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), (i), \
2530                      CHECKED_CAST(void *, X509_CRL *, p)))
2531
2532#define sk_X509_CRL_free(sk) \
2533  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk))
2534
2535#define sk_X509_CRL_pop_free(sk, free_func)                     \
2536  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2537              CHECKED_CAST(void (*)(void *), void (*)(X509_CRL *), free_func))
2538
2539#define sk_X509_CRL_insert(sk, p, where)                      \
2540  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2541            CHECKED_CAST(void *, X509_CRL *, p), (where))
2542
2543#define sk_X509_CRL_delete(sk, where)                                      \
2544  ((X509_CRL *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2545                         (where)))
2546
2547#define sk_X509_CRL_delete_ptr(sk, p)                                          \
2548  ((X509_CRL *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2549                             CHECKED_CAST(void *, X509_CRL *, p)))
2550
2551#define sk_X509_CRL_find(sk, out_index, p)                               \
2552  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), (out_index), \
2553          CHECKED_CAST(void *, X509_CRL *, p))
2554
2555#define sk_X509_CRL_shift(sk) \
2556  ((X509_CRL *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk)))
2557
2558#define sk_X509_CRL_push(sk, p)                             \
2559  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2560          CHECKED_CAST(void *, X509_CRL *, p))
2561
2562#define sk_X509_CRL_pop(sk) \
2563  ((X509_CRL *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk)))
2564
2565#define sk_X509_CRL_dup(sk)      \
2566  ((STACK_OF(X509_CRL) *)sk_dup( \
2567      CHECKED_CAST(_STACK *, const STACK_OF(X509_CRL) *, sk)))
2568
2569#define sk_X509_CRL_sort(sk) \
2570  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk))
2571
2572#define sk_X509_CRL_is_sorted(sk) \
2573  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_CRL) *, sk))
2574
2575#define sk_X509_CRL_set_cmp_func(sk, comp)                           \
2576  ((int (*)(const X509_CRL **a, const X509_CRL **b))sk_set_cmp_func( \
2577      CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk),              \
2578      CHECKED_CAST(stack_cmp_func,                                   \
2579                   int (*)(const X509_CRL **a, const X509_CRL **b), comp)))
2580
2581#define sk_X509_CRL_deep_copy(sk, copy_func, free_func)                      \
2582  ((STACK_OF(X509_CRL) *)sk_deep_copy(                                       \
2583      CHECKED_CAST(const _STACK *, const STACK_OF(X509_CRL) *, sk),          \
2584      CHECKED_CAST(void *(*)(void *), X509_CRL *(*)(X509_CRL *), copy_func), \
2585      CHECKED_CAST(void (*)(void *), void (*)(X509_CRL *), free_func)))
2586
2587/* X509_EXTENSION */
2588#define sk_X509_EXTENSION_new(comp)                 \
2589  ((STACK_OF(X509_EXTENSION) *)sk_new(CHECKED_CAST( \
2590      stack_cmp_func,                               \
2591      int (*)(const X509_EXTENSION **a, const X509_EXTENSION **b), comp)))
2592
2593#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)sk_new_null())
2594
2595#define sk_X509_EXTENSION_num(sk) \
2596  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk))
2597
2598#define sk_X509_EXTENSION_zero(sk) \
2599  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk));
2600
2601#define sk_X509_EXTENSION_value(sk, i) \
2602  ((X509_EXTENSION *)sk_value(         \
2603      CHECKED_CAST(_STACK *, const STACK_OF(X509_EXTENSION) *, sk), (i)))
2604
2605#define sk_X509_EXTENSION_set(sk, i, p)                            \
2606  ((X509_EXTENSION *)sk_set(                                       \
2607      CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), (i), \
2608      CHECKED_CAST(void *, X509_EXTENSION *, p)))
2609
2610#define sk_X509_EXTENSION_free(sk) \
2611  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk))
2612
2613#define sk_X509_EXTENSION_pop_free(sk, free_func)             \
2614  sk_pop_free(                                                \
2615      CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2616      CHECKED_CAST(void (*)(void *), void (*)(X509_EXTENSION *), free_func))
2617
2618#define sk_X509_EXTENSION_insert(sk, p, where)                      \
2619  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2620            CHECKED_CAST(void *, X509_EXTENSION *, p), (where))
2621
2622#define sk_X509_EXTENSION_delete(sk, where) \
2623  ((X509_EXTENSION *)sk_delete(             \
2624      CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), (where)))
2625
2626#define sk_X509_EXTENSION_delete_ptr(sk, p)                   \
2627  ((X509_EXTENSION *)sk_delete_ptr(                           \
2628      CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2629      CHECKED_CAST(void *, X509_EXTENSION *, p)))
2630
2631#define sk_X509_EXTENSION_find(sk, out_index, p)                               \
2632  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), (out_index), \
2633          CHECKED_CAST(void *, X509_EXTENSION *, p))
2634
2635#define sk_X509_EXTENSION_shift(sk) \
2636  ((X509_EXTENSION *)sk_shift(      \
2637      CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk)))
2638
2639#define sk_X509_EXTENSION_push(sk, p)                             \
2640  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2641          CHECKED_CAST(void *, X509_EXTENSION *, p))
2642
2643#define sk_X509_EXTENSION_pop(sk) \
2644  ((X509_EXTENSION *)sk_pop(      \
2645      CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk)))
2646
2647#define sk_X509_EXTENSION_dup(sk)      \
2648  ((STACK_OF(X509_EXTENSION) *)sk_dup( \
2649      CHECKED_CAST(_STACK *, const STACK_OF(X509_EXTENSION) *, sk)))
2650
2651#define sk_X509_EXTENSION_sort(sk) \
2652  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk))
2653
2654#define sk_X509_EXTENSION_is_sorted(sk) \
2655  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_EXTENSION) *, sk))
2656
2657#define sk_X509_EXTENSION_set_cmp_func(sk, comp)                           \
2658  ((int (*)(const X509_EXTENSION **a, const X509_EXTENSION **b))           \
2659       sk_set_cmp_func(                                                    \
2660           CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk),         \
2661           CHECKED_CAST(stack_cmp_func, int (*)(const X509_EXTENSION **a,  \
2662                                                const X509_EXTENSION **b), \
2663                        comp)))
2664
2665#define sk_X509_EXTENSION_deep_copy(sk, copy_func, free_func)                \
2666  ((STACK_OF(X509_EXTENSION) *)sk_deep_copy(                                 \
2667      CHECKED_CAST(const _STACK *, const STACK_OF(X509_EXTENSION) *, sk),    \
2668      CHECKED_CAST(void *(*)(void *), X509_EXTENSION *(*)(X509_EXTENSION *), \
2669                   copy_func),                                               \
2670      CHECKED_CAST(void (*)(void *), void (*)(X509_EXTENSION *), free_func)))
2671
2672/* X509_INFO */
2673#define sk_X509_INFO_new(comp)     \
2674  ((STACK_OF(X509_INFO) *)sk_new(  \
2675      CHECKED_CAST(stack_cmp_func, \
2676                   int (*)(const X509_INFO **a, const X509_INFO **b), comp)))
2677
2678#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)sk_new_null())
2679
2680#define sk_X509_INFO_num(sk) \
2681  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk))
2682
2683#define sk_X509_INFO_zero(sk) \
2684  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk));
2685
2686#define sk_X509_INFO_value(sk, i) \
2687  ((X509_INFO *)sk_value(         \
2688      CHECKED_CAST(_STACK *, const STACK_OF(X509_INFO) *, sk), (i)))
2689
2690#define sk_X509_INFO_set(sk, i, p)                                             \
2691  ((X509_INFO *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), (i), \
2692                       CHECKED_CAST(void *, X509_INFO *, p)))
2693
2694#define sk_X509_INFO_free(sk) \
2695  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk))
2696
2697#define sk_X509_INFO_pop_free(sk, free_func)             \
2698  sk_pop_free(                                           \
2699      CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2700      CHECKED_CAST(void (*)(void *), void (*)(X509_INFO *), free_func))
2701
2702#define sk_X509_INFO_insert(sk, p, where)                      \
2703  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2704            CHECKED_CAST(void *, X509_INFO *, p), (where))
2705
2706#define sk_X509_INFO_delete(sk, where)                                       \
2707  ((X509_INFO *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2708                          (where)))
2709
2710#define sk_X509_INFO_delete_ptr(sk, p)                   \
2711  ((X509_INFO *)sk_delete_ptr(                           \
2712      CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2713      CHECKED_CAST(void *, X509_INFO *, p)))
2714
2715#define sk_X509_INFO_find(sk, out_index, p)                               \
2716  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), (out_index), \
2717          CHECKED_CAST(void *, X509_INFO *, p))
2718
2719#define sk_X509_INFO_shift(sk) \
2720  ((X509_INFO *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk)))
2721
2722#define sk_X509_INFO_push(sk, p)                             \
2723  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2724          CHECKED_CAST(void *, X509_INFO *, p))
2725
2726#define sk_X509_INFO_pop(sk) \
2727  ((X509_INFO *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk)))
2728
2729#define sk_X509_INFO_dup(sk)      \
2730  ((STACK_OF(X509_INFO) *)sk_dup( \
2731      CHECKED_CAST(_STACK *, const STACK_OF(X509_INFO) *, sk)))
2732
2733#define sk_X509_INFO_sort(sk) \
2734  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk))
2735
2736#define sk_X509_INFO_is_sorted(sk) \
2737  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_INFO) *, sk))
2738
2739#define sk_X509_INFO_set_cmp_func(sk, comp)                            \
2740  ((int (*)(const X509_INFO **a, const X509_INFO **b))sk_set_cmp_func( \
2741      CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk),               \
2742      CHECKED_CAST(stack_cmp_func,                                     \
2743                   int (*)(const X509_INFO **a, const X509_INFO **b), comp)))
2744
2745#define sk_X509_INFO_deep_copy(sk, copy_func, free_func)                       \
2746  ((STACK_OF(X509_INFO) *)sk_deep_copy(                                        \
2747      CHECKED_CAST(const _STACK *, const STACK_OF(X509_INFO) *, sk),           \
2748      CHECKED_CAST(void *(*)(void *), X509_INFO *(*)(X509_INFO *), copy_func), \
2749      CHECKED_CAST(void (*)(void *), void (*)(X509_INFO *), free_func)))
2750
2751/* X509_LOOKUP */
2752#define sk_X509_LOOKUP_new(comp)                                             \
2753  ((STACK_OF(X509_LOOKUP) *)sk_new(CHECKED_CAST(                             \
2754      stack_cmp_func, int (*)(const X509_LOOKUP **a, const X509_LOOKUP **b), \
2755      comp)))
2756
2757#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)sk_new_null())
2758
2759#define sk_X509_LOOKUP_num(sk) \
2760  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk))
2761
2762#define sk_X509_LOOKUP_zero(sk) \
2763  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk));
2764
2765#define sk_X509_LOOKUP_value(sk, i) \
2766  ((X509_LOOKUP *)sk_value(         \
2767      CHECKED_CAST(_STACK *, const STACK_OF(X509_LOOKUP) *, sk), (i)))
2768
2769#define sk_X509_LOOKUP_set(sk, i, p)                                          \
2770  ((X509_LOOKUP *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2771                         (i), CHECKED_CAST(void *, X509_LOOKUP *, p)))
2772
2773#define sk_X509_LOOKUP_free(sk) \
2774  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk))
2775
2776#define sk_X509_LOOKUP_pop_free(sk, free_func)             \
2777  sk_pop_free(                                             \
2778      CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2779      CHECKED_CAST(void (*)(void *), void (*)(X509_LOOKUP *), free_func))
2780
2781#define sk_X509_LOOKUP_insert(sk, p, where)                      \
2782  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2783            CHECKED_CAST(void *, X509_LOOKUP *, p), (where))
2784
2785#define sk_X509_LOOKUP_delete(sk, where) \
2786  ((X509_LOOKUP *)sk_delete(             \
2787      CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), (where)))
2788
2789#define sk_X509_LOOKUP_delete_ptr(sk, p)                   \
2790  ((X509_LOOKUP *)sk_delete_ptr(                           \
2791      CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2792      CHECKED_CAST(void *, X509_LOOKUP *, p)))
2793
2794#define sk_X509_LOOKUP_find(sk, out_index, p)                               \
2795  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), (out_index), \
2796          CHECKED_CAST(void *, X509_LOOKUP *, p))
2797
2798#define sk_X509_LOOKUP_shift(sk) \
2799  ((X509_LOOKUP *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk)))
2800
2801#define sk_X509_LOOKUP_push(sk, p)                             \
2802  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2803          CHECKED_CAST(void *, X509_LOOKUP *, p))
2804
2805#define sk_X509_LOOKUP_pop(sk) \
2806  ((X509_LOOKUP *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk)))
2807
2808#define sk_X509_LOOKUP_dup(sk)      \
2809  ((STACK_OF(X509_LOOKUP) *)sk_dup( \
2810      CHECKED_CAST(_STACK *, const STACK_OF(X509_LOOKUP) *, sk)))
2811
2812#define sk_X509_LOOKUP_sort(sk) \
2813  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk))
2814
2815#define sk_X509_LOOKUP_is_sorted(sk) \
2816  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_LOOKUP) *, sk))
2817
2818#define sk_X509_LOOKUP_set_cmp_func(sk, comp)                              \
2819  ((int (*)(const X509_LOOKUP **a, const X509_LOOKUP **b))sk_set_cmp_func( \
2820      CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk),                 \
2821      CHECKED_CAST(stack_cmp_func,                                         \
2822                   int (*)(const X509_LOOKUP **a, const X509_LOOKUP **b),  \
2823                   comp)))
2824
2825#define sk_X509_LOOKUP_deep_copy(sk, copy_func, free_func)             \
2826  ((STACK_OF(X509_LOOKUP) *)sk_deep_copy(                              \
2827      CHECKED_CAST(const _STACK *, const STACK_OF(X509_LOOKUP) *, sk), \
2828      CHECKED_CAST(void *(*)(void *), X509_LOOKUP *(*)(X509_LOOKUP *), \
2829                   copy_func),                                         \
2830      CHECKED_CAST(void (*)(void *), void (*)(X509_LOOKUP *), free_func)))
2831
2832/* X509_NAME */
2833#define sk_X509_NAME_new(comp)     \
2834  ((STACK_OF(X509_NAME) *)sk_new(  \
2835      CHECKED_CAST(stack_cmp_func, \
2836                   int (*)(const X509_NAME **a, const X509_NAME **b), comp)))
2837
2838#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)sk_new_null())
2839
2840#define sk_X509_NAME_num(sk) \
2841  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk))
2842
2843#define sk_X509_NAME_zero(sk) \
2844  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk));
2845
2846#define sk_X509_NAME_value(sk, i) \
2847  ((X509_NAME *)sk_value(         \
2848      CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME) *, sk), (i)))
2849
2850#define sk_X509_NAME_set(sk, i, p)                                             \
2851  ((X509_NAME *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), (i), \
2852                       CHECKED_CAST(void *, X509_NAME *, p)))
2853
2854#define sk_X509_NAME_free(sk) \
2855  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk))
2856
2857#define sk_X509_NAME_pop_free(sk, free_func)             \
2858  sk_pop_free(                                           \
2859      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2860      CHECKED_CAST(void (*)(void *), void (*)(X509_NAME *), free_func))
2861
2862#define sk_X509_NAME_insert(sk, p, where)                      \
2863  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2864            CHECKED_CAST(void *, X509_NAME *, p), (where))
2865
2866#define sk_X509_NAME_delete(sk, where)                                       \
2867  ((X509_NAME *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2868                          (where)))
2869
2870#define sk_X509_NAME_delete_ptr(sk, p)                   \
2871  ((X509_NAME *)sk_delete_ptr(                           \
2872      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2873      CHECKED_CAST(void *, X509_NAME *, p)))
2874
2875#define sk_X509_NAME_find(sk, out_index, p)                               \
2876  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), (out_index), \
2877          CHECKED_CAST(void *, X509_NAME *, p))
2878
2879#define sk_X509_NAME_shift(sk) \
2880  ((X509_NAME *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk)))
2881
2882#define sk_X509_NAME_push(sk, p)                             \
2883  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2884          CHECKED_CAST(void *, X509_NAME *, p))
2885
2886#define sk_X509_NAME_pop(sk) \
2887  ((X509_NAME *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk)))
2888
2889#define sk_X509_NAME_dup(sk)      \
2890  ((STACK_OF(X509_NAME) *)sk_dup( \
2891      CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME) *, sk)))
2892
2893#define sk_X509_NAME_sort(sk) \
2894  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk))
2895
2896#define sk_X509_NAME_is_sorted(sk) \
2897  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME) *, sk))
2898
2899#define sk_X509_NAME_set_cmp_func(sk, comp)                            \
2900  ((int (*)(const X509_NAME **a, const X509_NAME **b))sk_set_cmp_func( \
2901      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk),               \
2902      CHECKED_CAST(stack_cmp_func,                                     \
2903                   int (*)(const X509_NAME **a, const X509_NAME **b), comp)))
2904
2905#define sk_X509_NAME_deep_copy(sk, copy_func, free_func)                       \
2906  ((STACK_OF(X509_NAME) *)sk_deep_copy(                                        \
2907      CHECKED_CAST(const _STACK *, const STACK_OF(X509_NAME) *, sk),           \
2908      CHECKED_CAST(void *(*)(void *), X509_NAME *(*)(X509_NAME *), copy_func), \
2909      CHECKED_CAST(void (*)(void *), void (*)(X509_NAME *), free_func)))
2910
2911/* X509_NAME_ENTRY */
2912#define sk_X509_NAME_ENTRY_new(comp)                 \
2913  ((STACK_OF(X509_NAME_ENTRY) *)sk_new(CHECKED_CAST( \
2914      stack_cmp_func,                                \
2915      int (*)(const X509_NAME_ENTRY **a, const X509_NAME_ENTRY **b), comp)))
2916
2917#define sk_X509_NAME_ENTRY_new_null() \
2918  ((STACK_OF(X509_NAME_ENTRY) *)sk_new_null())
2919
2920#define sk_X509_NAME_ENTRY_num(sk) \
2921  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk))
2922
2923#define sk_X509_NAME_ENTRY_zero(sk) \
2924  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk));
2925
2926#define sk_X509_NAME_ENTRY_value(sk, i) \
2927  ((X509_NAME_ENTRY *)sk_value(         \
2928      CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk), (i)))
2929
2930#define sk_X509_NAME_ENTRY_set(sk, i, p)                            \
2931  ((X509_NAME_ENTRY *)sk_set(                                       \
2932      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), (i), \
2933      CHECKED_CAST(void *, X509_NAME_ENTRY *, p)))
2934
2935#define sk_X509_NAME_ENTRY_free(sk) \
2936  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk))
2937
2938#define sk_X509_NAME_ENTRY_pop_free(sk, free_func)             \
2939  sk_pop_free(                                                 \
2940      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2941      CHECKED_CAST(void (*)(void *), void (*)(X509_NAME_ENTRY *), free_func))
2942
2943#define sk_X509_NAME_ENTRY_insert(sk, p, where)                      \
2944  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2945            CHECKED_CAST(void *, X509_NAME_ENTRY *, p), (where))
2946
2947#define sk_X509_NAME_ENTRY_delete(sk, where) \
2948  ((X509_NAME_ENTRY *)sk_delete(             \
2949      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), (where)))
2950
2951#define sk_X509_NAME_ENTRY_delete_ptr(sk, p)                   \
2952  ((X509_NAME_ENTRY *)sk_delete_ptr(                           \
2953      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2954      CHECKED_CAST(void *, X509_NAME_ENTRY *, p)))
2955
2956#define sk_X509_NAME_ENTRY_find(sk, out_index, p)                  \
2957  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2958          (out_index), CHECKED_CAST(void *, X509_NAME_ENTRY *, p))
2959
2960#define sk_X509_NAME_ENTRY_shift(sk) \
2961  ((X509_NAME_ENTRY *)sk_shift(      \
2962      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk)))
2963
2964#define sk_X509_NAME_ENTRY_push(sk, p)                             \
2965  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2966          CHECKED_CAST(void *, X509_NAME_ENTRY *, p))
2967
2968#define sk_X509_NAME_ENTRY_pop(sk) \
2969  ((X509_NAME_ENTRY *)sk_pop(      \
2970      CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk)))
2971
2972#define sk_X509_NAME_ENTRY_dup(sk)      \
2973  ((STACK_OF(X509_NAME_ENTRY) *)sk_dup( \
2974      CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk)))
2975
2976#define sk_X509_NAME_ENTRY_sort(sk) \
2977  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk))
2978
2979#define sk_X509_NAME_ENTRY_is_sorted(sk) \
2980  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk))
2981
2982#define sk_X509_NAME_ENTRY_set_cmp_func(sk, comp)                           \
2983  ((int (*)(const X509_NAME_ENTRY **a, const X509_NAME_ENTRY **b))          \
2984       sk_set_cmp_func(                                                     \
2985           CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk),         \
2986           CHECKED_CAST(stack_cmp_func, int (*)(const X509_NAME_ENTRY **a,  \
2987                                                const X509_NAME_ENTRY **b), \
2988                        comp)))
2989
2990#define sk_X509_NAME_ENTRY_deep_copy(sk, copy_func, free_func)                 \
2991  ((STACK_OF(X509_NAME_ENTRY) *)sk_deep_copy(                                  \
2992      CHECKED_CAST(const _STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk),     \
2993      CHECKED_CAST(void *(*)(void *), X509_NAME_ENTRY *(*)(X509_NAME_ENTRY *), \
2994                   copy_func),                                                 \
2995      CHECKED_CAST(void (*)(void *), void (*)(X509_NAME_ENTRY *), free_func)))
2996
2997/* X509_OBJECT */
2998#define sk_X509_OBJECT_new(comp)                                             \
2999  ((STACK_OF(X509_OBJECT) *)sk_new(CHECKED_CAST(                             \
3000      stack_cmp_func, int (*)(const X509_OBJECT **a, const X509_OBJECT **b), \
3001      comp)))
3002
3003#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)sk_new_null())
3004
3005#define sk_X509_OBJECT_num(sk) \
3006  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk))
3007
3008#define sk_X509_OBJECT_zero(sk) \
3009  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk));
3010
3011#define sk_X509_OBJECT_value(sk, i) \
3012  ((X509_OBJECT *)sk_value(         \
3013      CHECKED_CAST(_STACK *, const STACK_OF(X509_OBJECT) *, sk), (i)))
3014
3015#define sk_X509_OBJECT_set(sk, i, p)                                          \
3016  ((X509_OBJECT *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
3017                         (i), CHECKED_CAST(void *, X509_OBJECT *, p)))
3018
3019#define sk_X509_OBJECT_free(sk) \
3020  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk))
3021
3022#define sk_X509_OBJECT_pop_free(sk, free_func)             \
3023  sk_pop_free(                                             \
3024      CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
3025      CHECKED_CAST(void (*)(void *), void (*)(X509_OBJECT *), free_func))
3026
3027#define sk_X509_OBJECT_insert(sk, p, where)                      \
3028  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
3029            CHECKED_CAST(void *, X509_OBJECT *, p), (where))
3030
3031#define sk_X509_OBJECT_delete(sk, where) \
3032  ((X509_OBJECT *)sk_delete(             \
3033      CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), (where)))
3034
3035#define sk_X509_OBJECT_delete_ptr(sk, p)                   \
3036  ((X509_OBJECT *)sk_delete_ptr(                           \
3037      CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
3038      CHECKED_CAST(void *, X509_OBJECT *, p)))
3039
3040#define sk_X509_OBJECT_find(sk, out_index, p)                               \
3041  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), (out_index), \
3042          CHECKED_CAST(void *, X509_OBJECT *, p))
3043
3044#define sk_X509_OBJECT_shift(sk) \
3045  ((X509_OBJECT *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk)))
3046
3047#define sk_X509_OBJECT_push(sk, p)                             \
3048  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
3049          CHECKED_CAST(void *, X509_OBJECT *, p))
3050
3051#define sk_X509_OBJECT_pop(sk) \
3052  ((X509_OBJECT *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk)))
3053
3054#define sk_X509_OBJECT_dup(sk)      \
3055  ((STACK_OF(X509_OBJECT) *)sk_dup( \
3056      CHECKED_CAST(_STACK *, const STACK_OF(X509_OBJECT) *, sk)))
3057
3058#define sk_X509_OBJECT_sort(sk) \
3059  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk))
3060
3061#define sk_X509_OBJECT_is_sorted(sk) \
3062  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_OBJECT) *, sk))
3063
3064#define sk_X509_OBJECT_set_cmp_func(sk, comp)                              \
3065  ((int (*)(const X509_OBJECT **a, const X509_OBJECT **b))sk_set_cmp_func( \
3066      CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk),                 \
3067      CHECKED_CAST(stack_cmp_func,                                         \
3068                   int (*)(const X509_OBJECT **a, const X509_OBJECT **b),  \
3069                   comp)))
3070
3071#define sk_X509_OBJECT_deep_copy(sk, copy_func, free_func)             \
3072  ((STACK_OF(X509_OBJECT) *)sk_deep_copy(                              \
3073      CHECKED_CAST(const _STACK *, const STACK_OF(X509_OBJECT) *, sk), \
3074      CHECKED_CAST(void *(*)(void *), X509_OBJECT *(*)(X509_OBJECT *), \
3075                   copy_func),                                         \
3076      CHECKED_CAST(void (*)(void *), void (*)(X509_OBJECT *), free_func)))
3077
3078/* X509_POLICY_DATA */
3079#define sk_X509_POLICY_DATA_new(comp)                 \
3080  ((STACK_OF(X509_POLICY_DATA) *)sk_new(CHECKED_CAST( \
3081      stack_cmp_func,                                 \
3082      int (*)(const X509_POLICY_DATA **a, const X509_POLICY_DATA **b), comp)))
3083
3084#define sk_X509_POLICY_DATA_new_null() \
3085  ((STACK_OF(X509_POLICY_DATA) *)sk_new_null())
3086
3087#define sk_X509_POLICY_DATA_num(sk) \
3088  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk))
3089
3090#define sk_X509_POLICY_DATA_zero(sk) \
3091  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk));
3092
3093#define sk_X509_POLICY_DATA_value(sk, i) \
3094  ((X509_POLICY_DATA *)sk_value(         \
3095      CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_DATA) *, sk), (i)))
3096
3097#define sk_X509_POLICY_DATA_set(sk, i, p)                            \
3098  ((X509_POLICY_DATA *)sk_set(                                       \
3099      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), (i), \
3100      CHECKED_CAST(void *, X509_POLICY_DATA *, p)))
3101
3102#define sk_X509_POLICY_DATA_free(sk) \
3103  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk))
3104
3105#define sk_X509_POLICY_DATA_pop_free(sk, free_func)             \
3106  sk_pop_free(                                                  \
3107      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3108      CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_DATA *), free_func))
3109
3110#define sk_X509_POLICY_DATA_insert(sk, p, where)                      \
3111  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3112            CHECKED_CAST(void *, X509_POLICY_DATA *, p), (where))
3113
3114#define sk_X509_POLICY_DATA_delete(sk, where) \
3115  ((X509_POLICY_DATA *)sk_delete(             \
3116      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), (where)))
3117
3118#define sk_X509_POLICY_DATA_delete_ptr(sk, p)                   \
3119  ((X509_POLICY_DATA *)sk_delete_ptr(                           \
3120      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3121      CHECKED_CAST(void *, X509_POLICY_DATA *, p)))
3122
3123#define sk_X509_POLICY_DATA_find(sk, out_index, p)                  \
3124  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3125          (out_index), CHECKED_CAST(void *, X509_POLICY_DATA *, p))
3126
3127#define sk_X509_POLICY_DATA_shift(sk) \
3128  ((X509_POLICY_DATA *)sk_shift(      \
3129      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk)))
3130
3131#define sk_X509_POLICY_DATA_push(sk, p)                             \
3132  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3133          CHECKED_CAST(void *, X509_POLICY_DATA *, p))
3134
3135#define sk_X509_POLICY_DATA_pop(sk) \
3136  ((X509_POLICY_DATA *)sk_pop(      \
3137      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk)))
3138
3139#define sk_X509_POLICY_DATA_dup(sk)      \
3140  ((STACK_OF(X509_POLICY_DATA) *)sk_dup( \
3141      CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_DATA) *, sk)))
3142
3143#define sk_X509_POLICY_DATA_sort(sk) \
3144  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk))
3145
3146#define sk_X509_POLICY_DATA_is_sorted(sk) \
3147  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_DATA) *, sk))
3148
3149#define sk_X509_POLICY_DATA_set_cmp_func(sk, comp)                           \
3150  ((int (*)(const X509_POLICY_DATA **a, const X509_POLICY_DATA **b))         \
3151       sk_set_cmp_func(                                                      \
3152           CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk),         \
3153           CHECKED_CAST(stack_cmp_func, int (*)(const X509_POLICY_DATA **a,  \
3154                                                const X509_POLICY_DATA **b), \
3155                        comp)))
3156
3157#define sk_X509_POLICY_DATA_deep_copy(sk, copy_func, free_func)             \
3158  ((STACK_OF(X509_POLICY_DATA) *)sk_deep_copy(                              \
3159      CHECKED_CAST(const _STACK *, const STACK_OF(X509_POLICY_DATA) *, sk), \
3160      CHECKED_CAST(void *(*)(void *),                                       \
3161                   X509_POLICY_DATA *(*)(X509_POLICY_DATA *), copy_func),   \
3162      CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_DATA *),          \
3163                   free_func)))
3164
3165/* X509_POLICY_NODE */
3166#define sk_X509_POLICY_NODE_new(comp)                 \
3167  ((STACK_OF(X509_POLICY_NODE) *)sk_new(CHECKED_CAST( \
3168      stack_cmp_func,                                 \
3169      int (*)(const X509_POLICY_NODE **a, const X509_POLICY_NODE **b), comp)))
3170
3171#define sk_X509_POLICY_NODE_new_null() \
3172  ((STACK_OF(X509_POLICY_NODE) *)sk_new_null())
3173
3174#define sk_X509_POLICY_NODE_num(sk) \
3175  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk))
3176
3177#define sk_X509_POLICY_NODE_zero(sk) \
3178  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk));
3179
3180#define sk_X509_POLICY_NODE_value(sk, i) \
3181  ((X509_POLICY_NODE *)sk_value(         \
3182      CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_NODE) *, sk), (i)))
3183
3184#define sk_X509_POLICY_NODE_set(sk, i, p)                            \
3185  ((X509_POLICY_NODE *)sk_set(                                       \
3186      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), (i), \
3187      CHECKED_CAST(void *, X509_POLICY_NODE *, p)))
3188
3189#define sk_X509_POLICY_NODE_free(sk) \
3190  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk))
3191
3192#define sk_X509_POLICY_NODE_pop_free(sk, free_func)             \
3193  sk_pop_free(                                                  \
3194      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3195      CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_NODE *), free_func))
3196
3197#define sk_X509_POLICY_NODE_insert(sk, p, where)                      \
3198  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3199            CHECKED_CAST(void *, X509_POLICY_NODE *, p), (where))
3200
3201#define sk_X509_POLICY_NODE_delete(sk, where) \
3202  ((X509_POLICY_NODE *)sk_delete(             \
3203      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), (where)))
3204
3205#define sk_X509_POLICY_NODE_delete_ptr(sk, p)                   \
3206  ((X509_POLICY_NODE *)sk_delete_ptr(                           \
3207      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3208      CHECKED_CAST(void *, X509_POLICY_NODE *, p)))
3209
3210#define sk_X509_POLICY_NODE_find(sk, out_index, p)                  \
3211  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3212          (out_index), CHECKED_CAST(void *, X509_POLICY_NODE *, p))
3213
3214#define sk_X509_POLICY_NODE_shift(sk) \
3215  ((X509_POLICY_NODE *)sk_shift(      \
3216      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk)))
3217
3218#define sk_X509_POLICY_NODE_push(sk, p)                             \
3219  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3220          CHECKED_CAST(void *, X509_POLICY_NODE *, p))
3221
3222#define sk_X509_POLICY_NODE_pop(sk) \
3223  ((X509_POLICY_NODE *)sk_pop(      \
3224      CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk)))
3225
3226#define sk_X509_POLICY_NODE_dup(sk)      \
3227  ((STACK_OF(X509_POLICY_NODE) *)sk_dup( \
3228      CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_NODE) *, sk)))
3229
3230#define sk_X509_POLICY_NODE_sort(sk) \
3231  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk))
3232
3233#define sk_X509_POLICY_NODE_is_sorted(sk) \
3234  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_NODE) *, sk))
3235
3236#define sk_X509_POLICY_NODE_set_cmp_func(sk, comp)                           \
3237  ((int (*)(const X509_POLICY_NODE **a, const X509_POLICY_NODE **b))         \
3238       sk_set_cmp_func(                                                      \
3239           CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk),         \
3240           CHECKED_CAST(stack_cmp_func, int (*)(const X509_POLICY_NODE **a,  \
3241                                                const X509_POLICY_NODE **b), \
3242                        comp)))
3243
3244#define sk_X509_POLICY_NODE_deep_copy(sk, copy_func, free_func)             \
3245  ((STACK_OF(X509_POLICY_NODE) *)sk_deep_copy(                              \
3246      CHECKED_CAST(const _STACK *, const STACK_OF(X509_POLICY_NODE) *, sk), \
3247      CHECKED_CAST(void *(*)(void *),                                       \
3248                   X509_POLICY_NODE *(*)(X509_POLICY_NODE *), copy_func),   \
3249      CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_NODE *),          \
3250                   free_func)))
3251
3252/* X509_PURPOSE */
3253#define sk_X509_PURPOSE_new(comp)                                              \
3254  ((STACK_OF(X509_PURPOSE) *)sk_new(CHECKED_CAST(                              \
3255      stack_cmp_func, int (*)(const X509_PURPOSE **a, const X509_PURPOSE **b), \
3256      comp)))
3257
3258#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)sk_new_null())
3259
3260#define sk_X509_PURPOSE_num(sk) \
3261  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk))
3262
3263#define sk_X509_PURPOSE_zero(sk) \
3264  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk));
3265
3266#define sk_X509_PURPOSE_value(sk, i) \
3267  ((X509_PURPOSE *)sk_value(         \
3268      CHECKED_CAST(_STACK *, const STACK_OF(X509_PURPOSE) *, sk), (i)))
3269
3270#define sk_X509_PURPOSE_set(sk, i, p)                            \
3271  ((X509_PURPOSE *)sk_set(                                       \
3272      CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), (i), \
3273      CHECKED_CAST(void *, X509_PURPOSE *, p)))
3274
3275#define sk_X509_PURPOSE_free(sk) \
3276  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk))
3277
3278#define sk_X509_PURPOSE_pop_free(sk, free_func)             \
3279  sk_pop_free(                                              \
3280      CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3281      CHECKED_CAST(void (*)(void *), void (*)(X509_PURPOSE *), free_func))
3282
3283#define sk_X509_PURPOSE_insert(sk, p, where)                      \
3284  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3285            CHECKED_CAST(void *, X509_PURPOSE *, p), (where))
3286
3287#define sk_X509_PURPOSE_delete(sk, where) \
3288  ((X509_PURPOSE *)sk_delete(             \
3289      CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), (where)))
3290
3291#define sk_X509_PURPOSE_delete_ptr(sk, p)                   \
3292  ((X509_PURPOSE *)sk_delete_ptr(                           \
3293      CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3294      CHECKED_CAST(void *, X509_PURPOSE *, p)))
3295
3296#define sk_X509_PURPOSE_find(sk, out_index, p)                               \
3297  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), (out_index), \
3298          CHECKED_CAST(void *, X509_PURPOSE *, p))
3299
3300#define sk_X509_PURPOSE_shift(sk) \
3301  ((X509_PURPOSE *)sk_shift(      \
3302      CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk)))
3303
3304#define sk_X509_PURPOSE_push(sk, p)                             \
3305  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3306          CHECKED_CAST(void *, X509_PURPOSE *, p))
3307
3308#define sk_X509_PURPOSE_pop(sk) \
3309  ((X509_PURPOSE *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk)))
3310
3311#define sk_X509_PURPOSE_dup(sk)      \
3312  ((STACK_OF(X509_PURPOSE) *)sk_dup( \
3313      CHECKED_CAST(_STACK *, const STACK_OF(X509_PURPOSE) *, sk)))
3314
3315#define sk_X509_PURPOSE_sort(sk) \
3316  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk))
3317
3318#define sk_X509_PURPOSE_is_sorted(sk) \
3319  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_PURPOSE) *, sk))
3320
3321#define sk_X509_PURPOSE_set_cmp_func(sk, comp)                               \
3322  ((int (*)(const X509_PURPOSE **a, const X509_PURPOSE **b))sk_set_cmp_func( \
3323      CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk),                  \
3324      CHECKED_CAST(stack_cmp_func,                                           \
3325                   int (*)(const X509_PURPOSE **a, const X509_PURPOSE **b),  \
3326                   comp)))
3327
3328#define sk_X509_PURPOSE_deep_copy(sk, copy_func, free_func)              \
3329  ((STACK_OF(X509_PURPOSE) *)sk_deep_copy(                               \
3330      CHECKED_CAST(const _STACK *, const STACK_OF(X509_PURPOSE) *, sk),  \
3331      CHECKED_CAST(void *(*)(void *), X509_PURPOSE *(*)(X509_PURPOSE *), \
3332                   copy_func),                                           \
3333      CHECKED_CAST(void (*)(void *), void (*)(X509_PURPOSE *), free_func)))
3334
3335/* X509_REVOKED */
3336#define sk_X509_REVOKED_new(comp)                                              \
3337  ((STACK_OF(X509_REVOKED) *)sk_new(CHECKED_CAST(                              \
3338      stack_cmp_func, int (*)(const X509_REVOKED **a, const X509_REVOKED **b), \
3339      comp)))
3340
3341#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)sk_new_null())
3342
3343#define sk_X509_REVOKED_num(sk) \
3344  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk))
3345
3346#define sk_X509_REVOKED_zero(sk) \
3347  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk));
3348
3349#define sk_X509_REVOKED_value(sk, i) \
3350  ((X509_REVOKED *)sk_value(         \
3351      CHECKED_CAST(_STACK *, const STACK_OF(X509_REVOKED) *, sk), (i)))
3352
3353#define sk_X509_REVOKED_set(sk, i, p)                            \
3354  ((X509_REVOKED *)sk_set(                                       \
3355      CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), (i), \
3356      CHECKED_CAST(void *, X509_REVOKED *, p)))
3357
3358#define sk_X509_REVOKED_free(sk) \
3359  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk))
3360
3361#define sk_X509_REVOKED_pop_free(sk, free_func)             \
3362  sk_pop_free(                                              \
3363      CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3364      CHECKED_CAST(void (*)(void *), void (*)(X509_REVOKED *), free_func))
3365
3366#define sk_X509_REVOKED_insert(sk, p, where)                      \
3367  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3368            CHECKED_CAST(void *, X509_REVOKED *, p), (where))
3369
3370#define sk_X509_REVOKED_delete(sk, where) \
3371  ((X509_REVOKED *)sk_delete(             \
3372      CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), (where)))
3373
3374#define sk_X509_REVOKED_delete_ptr(sk, p)                   \
3375  ((X509_REVOKED *)sk_delete_ptr(                           \
3376      CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3377      CHECKED_CAST(void *, X509_REVOKED *, p)))
3378
3379#define sk_X509_REVOKED_find(sk, out_index, p)                               \
3380  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), (out_index), \
3381          CHECKED_CAST(void *, X509_REVOKED *, p))
3382
3383#define sk_X509_REVOKED_shift(sk) \
3384  ((X509_REVOKED *)sk_shift(      \
3385      CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk)))
3386
3387#define sk_X509_REVOKED_push(sk, p)                             \
3388  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3389          CHECKED_CAST(void *, X509_REVOKED *, p))
3390
3391#define sk_X509_REVOKED_pop(sk) \
3392  ((X509_REVOKED *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk)))
3393
3394#define sk_X509_REVOKED_dup(sk)      \
3395  ((STACK_OF(X509_REVOKED) *)sk_dup( \
3396      CHECKED_CAST(_STACK *, const STACK_OF(X509_REVOKED) *, sk)))
3397
3398#define sk_X509_REVOKED_sort(sk) \
3399  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk))
3400
3401#define sk_X509_REVOKED_is_sorted(sk) \
3402  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_REVOKED) *, sk))
3403
3404#define sk_X509_REVOKED_set_cmp_func(sk, comp)                               \
3405  ((int (*)(const X509_REVOKED **a, const X509_REVOKED **b))sk_set_cmp_func( \
3406      CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk),                  \
3407      CHECKED_CAST(stack_cmp_func,                                           \
3408                   int (*)(const X509_REVOKED **a, const X509_REVOKED **b),  \
3409                   comp)))
3410
3411#define sk_X509_REVOKED_deep_copy(sk, copy_func, free_func)              \
3412  ((STACK_OF(X509_REVOKED) *)sk_deep_copy(                               \
3413      CHECKED_CAST(const _STACK *, const STACK_OF(X509_REVOKED) *, sk),  \
3414      CHECKED_CAST(void *(*)(void *), X509_REVOKED *(*)(X509_REVOKED *), \
3415                   copy_func),                                           \
3416      CHECKED_CAST(void (*)(void *), void (*)(X509_REVOKED *), free_func)))
3417
3418/* X509_TRUST */
3419#define sk_X509_TRUST_new(comp)                                            \
3420  ((STACK_OF(X509_TRUST) *)sk_new(CHECKED_CAST(                            \
3421      stack_cmp_func, int (*)(const X509_TRUST **a, const X509_TRUST **b), \
3422      comp)))
3423
3424#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)sk_new_null())
3425
3426#define sk_X509_TRUST_num(sk) \
3427  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk))
3428
3429#define sk_X509_TRUST_zero(sk) \
3430  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk));
3431
3432#define sk_X509_TRUST_value(sk, i) \
3433  ((X509_TRUST *)sk_value(         \
3434      CHECKED_CAST(_STACK *, const STACK_OF(X509_TRUST) *, sk), (i)))
3435
3436#define sk_X509_TRUST_set(sk, i, p)                                         \
3437  ((X509_TRUST *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3438                        (i), CHECKED_CAST(void *, X509_TRUST *, p)))
3439
3440#define sk_X509_TRUST_free(sk) \
3441  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk))
3442
3443#define sk_X509_TRUST_pop_free(sk, free_func)             \
3444  sk_pop_free(                                            \
3445      CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3446      CHECKED_CAST(void (*)(void *), void (*)(X509_TRUST *), free_func))
3447
3448#define sk_X509_TRUST_insert(sk, p, where)                      \
3449  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3450            CHECKED_CAST(void *, X509_TRUST *, p), (where))
3451
3452#define sk_X509_TRUST_delete(sk, where)                                        \
3453  ((X509_TRUST *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3454                           (where)))
3455
3456#define sk_X509_TRUST_delete_ptr(sk, p)                   \
3457  ((X509_TRUST *)sk_delete_ptr(                           \
3458      CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3459      CHECKED_CAST(void *, X509_TRUST *, p)))
3460
3461#define sk_X509_TRUST_find(sk, out_index, p)                               \
3462  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), (out_index), \
3463          CHECKED_CAST(void *, X509_TRUST *, p))
3464
3465#define sk_X509_TRUST_shift(sk) \
3466  ((X509_TRUST *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk)))
3467
3468#define sk_X509_TRUST_push(sk, p)                             \
3469  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3470          CHECKED_CAST(void *, X509_TRUST *, p))
3471
3472#define sk_X509_TRUST_pop(sk) \
3473  ((X509_TRUST *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk)))
3474
3475#define sk_X509_TRUST_dup(sk)      \
3476  ((STACK_OF(X509_TRUST) *)sk_dup( \
3477      CHECKED_CAST(_STACK *, const STACK_OF(X509_TRUST) *, sk)))
3478
3479#define sk_X509_TRUST_sort(sk) \
3480  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk))
3481
3482#define sk_X509_TRUST_is_sorted(sk) \
3483  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_TRUST) *, sk))
3484
3485#define sk_X509_TRUST_set_cmp_func(sk, comp)                             \
3486  ((int (*)(const X509_TRUST **a, const X509_TRUST **b))sk_set_cmp_func( \
3487      CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk),                \
3488      CHECKED_CAST(stack_cmp_func,                                       \
3489                   int (*)(const X509_TRUST **a, const X509_TRUST **b),  \
3490                   comp)))
3491
3492#define sk_X509_TRUST_deep_copy(sk, copy_func, free_func)             \
3493  ((STACK_OF(X509_TRUST) *)sk_deep_copy(                              \
3494      CHECKED_CAST(const _STACK *, const STACK_OF(X509_TRUST) *, sk), \
3495      CHECKED_CAST(void *(*)(void *), X509_TRUST *(*)(X509_TRUST *),  \
3496                   copy_func),                                        \
3497      CHECKED_CAST(void (*)(void *), void (*)(X509_TRUST *), free_func)))
3498
3499/* X509_VERIFY_PARAM */
3500#define sk_X509_VERIFY_PARAM_new(comp)                                   \
3501  ((STACK_OF(X509_VERIFY_PARAM) *)sk_new(CHECKED_CAST(                   \
3502      stack_cmp_func,                                                    \
3503      int (*)(const X509_VERIFY_PARAM **a, const X509_VERIFY_PARAM **b), \
3504      comp)))
3505
3506#define sk_X509_VERIFY_PARAM_new_null() \
3507  ((STACK_OF(X509_VERIFY_PARAM) *)sk_new_null())
3508
3509#define sk_X509_VERIFY_PARAM_num(sk) \
3510  sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk))
3511
3512#define sk_X509_VERIFY_PARAM_zero(sk) \
3513  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk));
3514
3515#define sk_X509_VERIFY_PARAM_value(sk, i) \
3516  ((X509_VERIFY_PARAM *)sk_value(         \
3517      CHECKED_CAST(_STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk), (i)))
3518
3519#define sk_X509_VERIFY_PARAM_set(sk, i, p)                            \
3520  ((X509_VERIFY_PARAM *)sk_set(                                       \
3521      CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), (i), \
3522      CHECKED_CAST(void *, X509_VERIFY_PARAM *, p)))
3523
3524#define sk_X509_VERIFY_PARAM_free(sk) \
3525  sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk))
3526
3527#define sk_X509_VERIFY_PARAM_pop_free(sk, free_func)                        \
3528  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk),    \
3529              CHECKED_CAST(void (*)(void *), void (*)(X509_VERIFY_PARAM *), \
3530                           free_func))
3531
3532#define sk_X509_VERIFY_PARAM_insert(sk, p, where)                      \
3533  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3534            CHECKED_CAST(void *, X509_VERIFY_PARAM *, p), (where))
3535
3536#define sk_X509_VERIFY_PARAM_delete(sk, where) \
3537  ((X509_VERIFY_PARAM *)sk_delete(             \
3538      CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), (where)))
3539
3540#define sk_X509_VERIFY_PARAM_delete_ptr(sk, p)                   \
3541  ((X509_VERIFY_PARAM *)sk_delete_ptr(                           \
3542      CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3543      CHECKED_CAST(void *, X509_VERIFY_PARAM *, p)))
3544
3545#define sk_X509_VERIFY_PARAM_find(sk, out_index, p)                  \
3546  sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3547          (out_index), CHECKED_CAST(void *, X509_VERIFY_PARAM *, p))
3548
3549#define sk_X509_VERIFY_PARAM_shift(sk) \
3550  ((X509_VERIFY_PARAM *)sk_shift(      \
3551      CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk)))
3552
3553#define sk_X509_VERIFY_PARAM_push(sk, p)                             \
3554  sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3555          CHECKED_CAST(void *, X509_VERIFY_PARAM *, p))
3556
3557#define sk_X509_VERIFY_PARAM_pop(sk) \
3558  ((X509_VERIFY_PARAM *)sk_pop(      \
3559      CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk)))
3560
3561#define sk_X509_VERIFY_PARAM_dup(sk)      \
3562  ((STACK_OF(X509_VERIFY_PARAM) *)sk_dup( \
3563      CHECKED_CAST(_STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk)))
3564
3565#define sk_X509_VERIFY_PARAM_sort(sk) \
3566  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk))
3567
3568#define sk_X509_VERIFY_PARAM_is_sorted(sk) \
3569  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk))
3570
3571#define sk_X509_VERIFY_PARAM_set_cmp_func(sk, comp)                           \
3572  ((int (*)(const X509_VERIFY_PARAM **a, const X509_VERIFY_PARAM **b))        \
3573       sk_set_cmp_func(                                                       \
3574           CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk),         \
3575           CHECKED_CAST(stack_cmp_func, int (*)(const X509_VERIFY_PARAM **a,  \
3576                                                const X509_VERIFY_PARAM **b), \
3577                        comp)))
3578
3579#define sk_X509_VERIFY_PARAM_deep_copy(sk, copy_func, free_func)             \
3580  ((STACK_OF(X509_VERIFY_PARAM) *)sk_deep_copy(                              \
3581      CHECKED_CAST(const _STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk), \
3582      CHECKED_CAST(void *(*)(void *),                                        \
3583                   X509_VERIFY_PARAM *(*)(X509_VERIFY_PARAM *), copy_func),  \
3584      CHECKED_CAST(void (*)(void *), void (*)(X509_VERIFY_PARAM *),          \
3585                   free_func)))
3586
3587/* void */
3588#define sk_void_new(comp)                \
3589  ((STACK_OF(void)*)sk_new(CHECKED_CAST( \
3590      stack_cmp_func, int (*)(const void **a, const void **b), comp)))
3591
3592#define sk_void_new_null() ((STACK_OF(void)*)sk_new_null())
3593
3594#define sk_void_num(sk) sk_num(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk))
3595
3596#define sk_void_zero(sk) sk_zero(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk));
3597
3598#define sk_void_value(sk, i) \
3599  ((void *)sk_value(CHECKED_CAST(_STACK *, const STACK_OF(void)*, sk), (i)))
3600
3601#define sk_void_set(sk, i, p)                                       \
3602  ((void *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), (i), \
3603                  CHECKED_CAST(void *, void *, p)))
3604
3605#define sk_void_free(sk) sk_free(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk))
3606
3607#define sk_void_pop_free(sk, free_func)                    \
3608  sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), \
3609              CHECKED_CAST(void (*)(void *), void (*)(void *), free_func))
3610
3611#define sk_void_insert(sk, p, where)                     \
3612  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), \
3613            CHECKED_CAST(void *, void *, p), (where))
3614
3615#define sk_void_delete(sk, where) \
3616  ((void *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), (where)))
3617
3618#define sk_void_delete_ptr(sk, p)                                     \
3619  ((void *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), \
3620                         CHECKED_CAST(void *, void *, p)))
3621
3622#define sk_void_find(sk, out_index, p)                              \
3623  sk_find(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), (out_index), \
3624          CHECKED_CAST(void *, void *, p))
3625
3626#define sk_void_shift(sk) \
3627  ((void *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk)))
3628
3629#define sk_void_push(sk, p)                            \
3630  sk_push(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), \
3631          CHECKED_CAST(void *, void *, p))
3632
3633#define sk_void_pop(sk) \
3634  ((void *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk)))
3635
3636#define sk_void_dup(sk) \
3637  ((STACK_OF(void)*)sk_dup(CHECKED_CAST(_STACK *, const STACK_OF(void)*, sk)))
3638
3639#define sk_void_sort(sk) sk_sort(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk))
3640
3641#define sk_void_is_sorted(sk) \
3642  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(void)*, sk))
3643
3644#define sk_void_set_cmp_func(sk, comp)                                      \
3645  ((int (*)(const void **a, const void **b))sk_set_cmp_func(                \
3646      CHECKED_CAST(_STACK *, STACK_OF(void)*, sk),                          \
3647      CHECKED_CAST(stack_cmp_func, int (*)(const void **a, const void **b), \
3648                   comp)))
3649
3650#define sk_void_deep_copy(sk, copy_func, free_func)                  \
3651  ((STACK_OF(void)*)sk_deep_copy(                                    \
3652      CHECKED_CAST(const _STACK *, const STACK_OF(void)*, sk),       \
3653      CHECKED_CAST(void *(*)(void *), void *(*)(void *), copy_func), \
3654      CHECKED_CAST(void (*)(void *), void (*)(void *), free_func)))
3655
3656/* SRTP_PROTECTION_PROFILE */
3657#define sk_SRTP_PROTECTION_PROFILE_new(comp)                            \
3658  ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_new(CHECKED_CAST(            \
3659      stack_cmp_func, int (*)(const const SRTP_PROTECTION_PROFILE **a,  \
3660                              const const SRTP_PROTECTION_PROFILE **b), \
3661      comp)))
3662
3663#define sk_SRTP_PROTECTION_PROFILE_new_null() \
3664  ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_new_null())
3665
3666#define sk_SRTP_PROTECTION_PROFILE_num(sk) \
3667  sk_num(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3668
3669#define sk_SRTP_PROTECTION_PROFILE_zero(sk) \
3670  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk));
3671
3672#define sk_SRTP_PROTECTION_PROFILE_value(sk, i)                              \
3673  ((const SRTP_PROTECTION_PROFILE *)sk_value(                                \
3674      CHECKED_CAST(_STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3675      (i)))
3676
3677#define sk_SRTP_PROTECTION_PROFILE_set(sk, i, p)                            \
3678  ((const SRTP_PROTECTION_PROFILE *)sk_set(                                 \
3679      CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), (i), \
3680      CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p)))
3681
3682#define sk_SRTP_PROTECTION_PROFILE_free(sk) \
3683  sk_free(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3684
3685#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, free_func)             \
3686  sk_pop_free(                                                         \
3687      CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3688      CHECKED_CAST(void (*)(void *),                                   \
3689                   void (*)(const SRTP_PROTECTION_PROFILE *), free_func))
3690
3691#define sk_SRTP_PROTECTION_PROFILE_insert(sk, p, where)                      \
3692  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3693            CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p), (where))
3694
3695#define sk_SRTP_PROTECTION_PROFILE_delete(sk, where)                   \
3696  ((const SRTP_PROTECTION_PROFILE *)sk_delete(                         \
3697      CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3698      (where)))
3699
3700#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, p)                   \
3701  ((const SRTP_PROTECTION_PROFILE *)sk_delete_ptr(                     \
3702      CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3703      CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p)))
3704
3705#define sk_SRTP_PROTECTION_PROFILE_find(sk, out_index, p)                  \
3706  sk_find(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3707          (out_index),                                                     \
3708          CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p))
3709
3710#define sk_SRTP_PROTECTION_PROFILE_shift(sk)  \
3711  ((const SRTP_PROTECTION_PROFILE *)sk_shift( \
3712      CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk)))
3713
3714#define sk_SRTP_PROTECTION_PROFILE_push(sk, p)                             \
3715  sk_push(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3716          CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p))
3717
3718#define sk_SRTP_PROTECTION_PROFILE_pop(sk)  \
3719  ((const SRTP_PROTECTION_PROFILE *)sk_pop( \
3720      CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk)))
3721
3722#define sk_SRTP_PROTECTION_PROFILE_dup(sk)      \
3723  ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_dup( \
3724      CHECKED_CAST(_STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, sk)))
3725
3726#define sk_SRTP_PROTECTION_PROFILE_sort(sk) \
3727  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3728
3729#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) \
3730  sk_is_sorted(                                  \
3731      CHECKED_CAST(_STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3732
3733#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, comp)                   \
3734  ((int (*)(const SRTP_PROTECTION_PROFILE **a,                              \
3735            const SRTP_PROTECTION_PROFILE **b))                             \
3736       sk_set_cmp_func(                                                     \
3737           CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3738           CHECKED_CAST(stack_cmp_func,                                     \
3739                        int (*)(const SRTP_PROTECTION_PROFILE **a,          \
3740                                const SRTP_PROTECTION_PROFILE **b),         \
3741                        comp)))
3742
3743#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copy_func, free_func)        \
3744  ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_deep_copy(                         \
3745      CHECKED_CAST(const _STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, \
3746                   sk),                                                       \
3747      CHECKED_CAST(void *(*)(void *), const SRTP_PROTECTION_PROFILE *(*)(     \
3748                                          const SRTP_PROTECTION_PROFILE *),   \
3749                   copy_func),                                                \
3750      CHECKED_CAST(void (*)(void *),                                          \
3751                   void (*)(const SRTP_PROTECTION_PROFILE *), free_func)))
3752
3753/* SSL_CIPHER */
3754#define sk_SSL_CIPHER_new(comp)                 \
3755  ((STACK_OF(SSL_CIPHER) *)sk_new(CHECKED_CAST( \
3756      stack_cmp_func,                           \
3757      int (*)(const const SSL_CIPHER **a, const const SSL_CIPHER **b), comp)))
3758
3759#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)sk_new_null())
3760
3761#define sk_SSL_CIPHER_num(sk) \
3762  sk_num(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk))
3763
3764#define sk_SSL_CIPHER_zero(sk) \
3765  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk));
3766
3767#define sk_SSL_CIPHER_value(sk, i) \
3768  ((const SSL_CIPHER *)sk_value(   \
3769      CHECKED_CAST(_STACK *, const STACK_OF(SSL_CIPHER) *, sk), (i)))
3770
3771#define sk_SSL_CIPHER_set(sk, i, p)                            \
3772  ((const SSL_CIPHER *)sk_set(                                 \
3773      CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), (i), \
3774      CHECKED_CAST(void *, const SSL_CIPHER *, p)))
3775
3776#define sk_SSL_CIPHER_free(sk) \
3777  sk_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk))
3778
3779#define sk_SSL_CIPHER_pop_free(sk, free_func)             \
3780  sk_pop_free(                                            \
3781      CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3782      CHECKED_CAST(void (*)(void *), void (*)(const SSL_CIPHER *), free_func))
3783
3784#define sk_SSL_CIPHER_insert(sk, p, where)                      \
3785  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3786            CHECKED_CAST(void *, const SSL_CIPHER *, p), (where))
3787
3788#define sk_SSL_CIPHER_delete(sk, where) \
3789  ((const SSL_CIPHER *)sk_delete(       \
3790      CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), (where)))
3791
3792#define sk_SSL_CIPHER_delete_ptr(sk, p)                   \
3793  ((const SSL_CIPHER *)sk_delete_ptr(                     \
3794      CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3795      CHECKED_CAST(void *, const SSL_CIPHER *, p)))
3796
3797#define sk_SSL_CIPHER_find(sk, out_index, p)                               \
3798  sk_find(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), (out_index), \
3799          CHECKED_CAST(void *, const SSL_CIPHER *, p))
3800
3801#define sk_SSL_CIPHER_shift(sk)  \
3802  ((const SSL_CIPHER *)sk_shift( \
3803      CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk)))
3804
3805#define sk_SSL_CIPHER_push(sk, p)                             \
3806  sk_push(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3807          CHECKED_CAST(void *, const SSL_CIPHER *, p))
3808
3809#define sk_SSL_CIPHER_pop(sk)  \
3810  ((const SSL_CIPHER *)sk_pop( \
3811      CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk)))
3812
3813#define sk_SSL_CIPHER_dup(sk)      \
3814  ((STACK_OF(SSL_CIPHER) *)sk_dup( \
3815      CHECKED_CAST(_STACK *, const STACK_OF(SSL_CIPHER) *, sk)))
3816
3817#define sk_SSL_CIPHER_sort(sk) \
3818  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk))
3819
3820#define sk_SSL_CIPHER_is_sorted(sk) \
3821  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(SSL_CIPHER) *, sk))
3822
3823#define sk_SSL_CIPHER_set_cmp_func(sk, comp)                             \
3824  ((int (*)(const SSL_CIPHER **a, const SSL_CIPHER **b))sk_set_cmp_func( \
3825      CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk),                \
3826      CHECKED_CAST(stack_cmp_func,                                       \
3827                   int (*)(const SSL_CIPHER **a, const SSL_CIPHER **b),  \
3828                   comp)))
3829
3830#define sk_SSL_CIPHER_deep_copy(sk, copy_func, free_func)                 \
3831  ((STACK_OF(SSL_CIPHER) *)sk_deep_copy(                                  \
3832      CHECKED_CAST(const _STACK *, const STACK_OF(SSL_CIPHER) *, sk),     \
3833      CHECKED_CAST(void *(*)(void *),                                     \
3834                   const SSL_CIPHER *(*)(const SSL_CIPHER *), copy_func), \
3835      CHECKED_CAST(void (*)(void *), void (*)(const SSL_CIPHER *),        \
3836                   free_func)))
3837
3838/* OPENSSL_STRING */
3839#define sk_OPENSSL_STRING_new(comp)                 \
3840  ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_CAST( \
3841      stack_cmp_func,                               \
3842      int (*)(const OPENSSL_STRING *a, const OPENSSL_STRING *b), comp)))
3843
3844#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null())
3845
3846#define sk_OPENSSL_STRING_num(sk) \
3847  sk_num(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk))
3848
3849#define sk_OPENSSL_STRING_zero(sk) \
3850  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk));
3851
3852#define sk_OPENSSL_STRING_value(sk, i) \
3853  ((OPENSSL_STRING)sk_value(           \
3854      CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_STRING) *, sk), (i)))
3855
3856#define sk_OPENSSL_STRING_set(sk, i, p)                            \
3857  ((OPENSSL_STRING)sk_set(                                         \
3858      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), (i), \
3859      CHECKED_CAST(void *, OPENSSL_STRING, p)))
3860
3861#define sk_OPENSSL_STRING_free(sk) \
3862  sk_free(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk))
3863
3864#define sk_OPENSSL_STRING_pop_free(sk, free_func)             \
3865  sk_pop_free(                                                \
3866      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3867      CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_STRING), free_func))
3868
3869#define sk_OPENSSL_STRING_insert(sk, p, where)                      \
3870  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3871            CHECKED_CAST(void *, OPENSSL_STRING, p), (where))
3872
3873#define sk_OPENSSL_STRING_delete(sk, where) \
3874  ((OPENSSL_STRING)sk_delete(               \
3875      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), (where)))
3876
3877#define sk_OPENSSL_STRING_delete_ptr(sk, p)                   \
3878  ((OPENSSL_STRING)sk_delete_ptr(                             \
3879      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3880      CHECKED_CAST(void *, OPENSSL_STRING, p)))
3881
3882#define sk_OPENSSL_STRING_find(sk, out_index, p)                               \
3883  sk_find(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), (out_index), \
3884          CHECKED_CAST(void *, OPENSSL_STRING, p))
3885
3886#define sk_OPENSSL_STRING_shift(sk) \
3887  ((OPENSSL_STRING)sk_shift(        \
3888      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk)))
3889
3890#define sk_OPENSSL_STRING_push(sk, p)                             \
3891  sk_push(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3892          CHECKED_CAST(void *, OPENSSL_STRING, p))
3893
3894#define sk_OPENSSL_STRING_pop(sk) \
3895  ((OPENSSL_STRING)sk_pop(        \
3896      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk)))
3897
3898#define sk_OPENSSL_STRING_dup(sk)      \
3899  ((STACK_OF(OPENSSL_STRING) *)sk_dup( \
3900      CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_STRING) *, sk)))
3901
3902#define sk_OPENSSL_STRING_sort(sk) \
3903  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk))
3904
3905#define sk_OPENSSL_STRING_is_sorted(sk) \
3906  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_STRING) *, sk))
3907
3908#define sk_OPENSSL_STRING_set_cmp_func(sk, comp)                           \
3909  ((int (*)(const OPENSSL_STRING **a, const OPENSSL_STRING **b))           \
3910       sk_set_cmp_func(                                                    \
3911           CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk),         \
3912           CHECKED_CAST(stack_cmp_func, int (*)(const OPENSSL_STRING **a,  \
3913                                                const OPENSSL_STRING **b), \
3914                        comp)))
3915
3916#define sk_OPENSSL_STRING_deep_copy(sk, copy_func, free_func)             \
3917  ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(                              \
3918      CHECKED_CAST(const _STACK *, const STACK_OF(OPENSSL_STRING) *, sk), \
3919      CHECKED_CAST(void *(*)(void *), OPENSSL_STRING (*)(OPENSSL_STRING), \
3920                   copy_func),                                            \
3921      CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_STRING), free_func)))
3922
3923/* OPENSSL_BLOCK */
3924#define sk_OPENSSL_BLOCK_new(comp)                                             \
3925  ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_CAST(                             \
3926      stack_cmp_func, int (*)(const OPENSSL_BLOCK *a, const OPENSSL_BLOCK *b), \
3927      comp)))
3928
3929#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null())
3930
3931#define sk_OPENSSL_BLOCK_num(sk) \
3932  sk_num(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk))
3933
3934#define sk_OPENSSL_BLOCK_zero(sk) \
3935  sk_zero(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk));
3936
3937#define sk_OPENSSL_BLOCK_value(sk, i) \
3938  ((OPENSSL_BLOCK)sk_value(           \
3939      CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk), (i)))
3940
3941#define sk_OPENSSL_BLOCK_set(sk, i, p)                            \
3942  ((OPENSSL_BLOCK)sk_set(                                         \
3943      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), (i), \
3944      CHECKED_CAST(void *, OPENSSL_BLOCK, p)))
3945
3946#define sk_OPENSSL_BLOCK_free(sk) \
3947  sk_free(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk))
3948
3949#define sk_OPENSSL_BLOCK_pop_free(sk, free_func)             \
3950  sk_pop_free(                                               \
3951      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3952      CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_BLOCK), free_func))
3953
3954#define sk_OPENSSL_BLOCK_insert(sk, p, where)                      \
3955  sk_insert(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3956            CHECKED_CAST(void *, OPENSSL_BLOCK, p), (where))
3957
3958#define sk_OPENSSL_BLOCK_delete(sk, where) \
3959  ((OPENSSL_BLOCK)sk_delete(               \
3960      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), (where)))
3961
3962#define sk_OPENSSL_BLOCK_delete_ptr(sk, p)                   \
3963  ((OPENSSL_BLOCK)sk_delete_ptr(                             \
3964      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3965      CHECKED_CAST(void *, OPENSSL_BLOCK, p)))
3966
3967#define sk_OPENSSL_BLOCK_find(sk, out_index, p)                               \
3968  sk_find(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), (out_index), \
3969          CHECKED_CAST(void *, OPENSSL_BLOCK, p))
3970
3971#define sk_OPENSSL_BLOCK_shift(sk) \
3972  ((OPENSSL_BLOCK)sk_shift(        \
3973      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk)))
3974
3975#define sk_OPENSSL_BLOCK_push(sk, p)                             \
3976  sk_push(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3977          CHECKED_CAST(void *, OPENSSL_BLOCK, p))
3978
3979#define sk_OPENSSL_BLOCK_pop(sk) \
3980  ((OPENSSL_BLOCK)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk)))
3981
3982#define sk_OPENSSL_BLOCK_dup(sk)      \
3983  ((STACK_OF(OPENSSL_BLOCK) *)sk_dup( \
3984      CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk)))
3985
3986#define sk_OPENSSL_BLOCK_sort(sk) \
3987  sk_sort(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk))
3988
3989#define sk_OPENSSL_BLOCK_is_sorted(sk) \
3990  sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk))
3991
3992#define sk_OPENSSL_BLOCK_set_cmp_func(sk, comp)                                \
3993  ((int (*)(const OPENSSL_BLOCK **a, const OPENSSL_BLOCK **b))sk_set_cmp_func( \
3994      CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk),                   \
3995      CHECKED_CAST(stack_cmp_func,                                             \
3996                   int (*)(const OPENSSL_BLOCK **a, const OPENSSL_BLOCK **b),  \
3997                   comp)))
3998
3999#define sk_OPENSSL_BLOCK_deep_copy(sk, copy_func, free_func)             \
4000  ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(                              \
4001      CHECKED_CAST(const _STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk), \
4002      CHECKED_CAST(void *(*)(void *), OPENSSL_BLOCK (*)(OPENSSL_BLOCK),  \
4003                   copy_func),                                           \
4004      CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_BLOCK), free_func)))
4005