• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 /* POLICYINFO */
1434 #define sk_POLICYINFO_new(comp)                                            \
1435   ((STACK_OF(POLICYINFO) *)sk_new(CHECKED_CAST(                            \
1436       stack_cmp_func, int (*)(const POLICYINFO **a, const POLICYINFO **b), \
1437       comp)))
1438 
1439 #define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)sk_new_null())
1440 
1441 #define sk_POLICYINFO_num(sk) \
1442   sk_num(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk))
1443 
1444 #define sk_POLICYINFO_zero(sk) \
1445   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk));
1446 
1447 #define sk_POLICYINFO_value(sk, i) \
1448   ((POLICYINFO *)sk_value(         \
1449       CHECKED_CAST(_STACK *, const STACK_OF(POLICYINFO) *, sk), (i)))
1450 
1451 #define sk_POLICYINFO_set(sk, i, p)                                         \
1452   ((POLICYINFO *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1453                         (i), CHECKED_CAST(void *, POLICYINFO *, p)))
1454 
1455 #define sk_POLICYINFO_free(sk) \
1456   sk_free(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk))
1457 
1458 #define sk_POLICYINFO_pop_free(sk, free_func)             \
1459   sk_pop_free(                                            \
1460       CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1461       CHECKED_CAST(void (*)(void *), void (*)(POLICYINFO *), free_func))
1462 
1463 #define sk_POLICYINFO_insert(sk, p, where)                      \
1464   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1465             CHECKED_CAST(void *, POLICYINFO *, p), (where))
1466 
1467 #define sk_POLICYINFO_delete(sk, where)                                        \
1468   ((POLICYINFO *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1469                            (where)))
1470 
1471 #define sk_POLICYINFO_delete_ptr(sk, p)                   \
1472   ((POLICYINFO *)sk_delete_ptr(                           \
1473       CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1474       CHECKED_CAST(void *, POLICYINFO *, p)))
1475 
1476 #define sk_POLICYINFO_find(sk, out_index, p)                               \
1477   sk_find(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), (out_index), \
1478           CHECKED_CAST(void *, POLICYINFO *, p))
1479 
1480 #define sk_POLICYINFO_shift(sk) \
1481   ((POLICYINFO *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk)))
1482 
1483 #define sk_POLICYINFO_push(sk, p)                             \
1484   sk_push(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk), \
1485           CHECKED_CAST(void *, POLICYINFO *, p))
1486 
1487 #define sk_POLICYINFO_pop(sk) \
1488   ((POLICYINFO *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk)))
1489 
1490 #define sk_POLICYINFO_dup(sk)      \
1491   ((STACK_OF(POLICYINFO) *)sk_dup( \
1492       CHECKED_CAST(_STACK *, const STACK_OF(POLICYINFO) *, sk)))
1493 
1494 #define sk_POLICYINFO_sort(sk) \
1495   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk))
1496 
1497 #define sk_POLICYINFO_is_sorted(sk) \
1498   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(POLICYINFO) *, sk))
1499 
1500 #define sk_POLICYINFO_set_cmp_func(sk, comp)                             \
1501   ((int (*)(const POLICYINFO **a, const POLICYINFO **b))sk_set_cmp_func( \
1502       CHECKED_CAST(_STACK *, STACK_OF(POLICYINFO) *, sk),                \
1503       CHECKED_CAST(stack_cmp_func,                                       \
1504                    int (*)(const POLICYINFO **a, const POLICYINFO **b),  \
1505                    comp)))
1506 
1507 #define sk_POLICYINFO_deep_copy(sk, copy_func, free_func)             \
1508   ((STACK_OF(POLICYINFO) *)sk_deep_copy(                              \
1509       CHECKED_CAST(const _STACK *, const STACK_OF(POLICYINFO) *, sk), \
1510       CHECKED_CAST(void *(*)(void *), POLICYINFO *(*)(POLICYINFO *),  \
1511                    copy_func),                                        \
1512       CHECKED_CAST(void (*)(void *), void (*)(POLICYINFO *), free_func)))
1513 
1514 /* POLICYQUALINFO */
1515 #define sk_POLICYQUALINFO_new(comp)                 \
1516   ((STACK_OF(POLICYQUALINFO) *)sk_new(CHECKED_CAST( \
1517       stack_cmp_func,                               \
1518       int (*)(const POLICYQUALINFO **a, const POLICYQUALINFO **b), comp)))
1519 
1520 #define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)sk_new_null())
1521 
1522 #define sk_POLICYQUALINFO_num(sk) \
1523   sk_num(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk))
1524 
1525 #define sk_POLICYQUALINFO_zero(sk) \
1526   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk));
1527 
1528 #define sk_POLICYQUALINFO_value(sk, i) \
1529   ((POLICYQUALINFO *)sk_value(         \
1530       CHECKED_CAST(_STACK *, const STACK_OF(POLICYQUALINFO) *, sk), (i)))
1531 
1532 #define sk_POLICYQUALINFO_set(sk, i, p)                            \
1533   ((POLICYQUALINFO *)sk_set(                                       \
1534       CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), (i), \
1535       CHECKED_CAST(void *, POLICYQUALINFO *, p)))
1536 
1537 #define sk_POLICYQUALINFO_free(sk) \
1538   sk_free(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk))
1539 
1540 #define sk_POLICYQUALINFO_pop_free(sk, free_func)             \
1541   sk_pop_free(                                                \
1542       CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1543       CHECKED_CAST(void (*)(void *), void (*)(POLICYQUALINFO *), free_func))
1544 
1545 #define sk_POLICYQUALINFO_insert(sk, p, where)                      \
1546   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1547             CHECKED_CAST(void *, POLICYQUALINFO *, p), (where))
1548 
1549 #define sk_POLICYQUALINFO_delete(sk, where) \
1550   ((POLICYQUALINFO *)sk_delete(             \
1551       CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), (where)))
1552 
1553 #define sk_POLICYQUALINFO_delete_ptr(sk, p)                   \
1554   ((POLICYQUALINFO *)sk_delete_ptr(                           \
1555       CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1556       CHECKED_CAST(void *, POLICYQUALINFO *, p)))
1557 
1558 #define sk_POLICYQUALINFO_find(sk, out_index, p)                               \
1559   sk_find(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), (out_index), \
1560           CHECKED_CAST(void *, POLICYQUALINFO *, p))
1561 
1562 #define sk_POLICYQUALINFO_shift(sk) \
1563   ((POLICYQUALINFO *)sk_shift(      \
1564       CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk)))
1565 
1566 #define sk_POLICYQUALINFO_push(sk, p)                             \
1567   sk_push(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk), \
1568           CHECKED_CAST(void *, POLICYQUALINFO *, p))
1569 
1570 #define sk_POLICYQUALINFO_pop(sk) \
1571   ((POLICYQUALINFO *)sk_pop(      \
1572       CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk)))
1573 
1574 #define sk_POLICYQUALINFO_dup(sk)      \
1575   ((STACK_OF(POLICYQUALINFO) *)sk_dup( \
1576       CHECKED_CAST(_STACK *, const STACK_OF(POLICYQUALINFO) *, sk)))
1577 
1578 #define sk_POLICYQUALINFO_sort(sk) \
1579   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk))
1580 
1581 #define sk_POLICYQUALINFO_is_sorted(sk) \
1582   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(POLICYQUALINFO) *, sk))
1583 
1584 #define sk_POLICYQUALINFO_set_cmp_func(sk, comp)                           \
1585   ((int (*)(const POLICYQUALINFO **a, const POLICYQUALINFO **b))           \
1586        sk_set_cmp_func(                                                    \
1587            CHECKED_CAST(_STACK *, STACK_OF(POLICYQUALINFO) *, sk),         \
1588            CHECKED_CAST(stack_cmp_func, int (*)(const POLICYQUALINFO **a,  \
1589                                                 const POLICYQUALINFO **b), \
1590                         comp)))
1591 
1592 #define sk_POLICYQUALINFO_deep_copy(sk, copy_func, free_func)                \
1593   ((STACK_OF(POLICYQUALINFO) *)sk_deep_copy(                                 \
1594       CHECKED_CAST(const _STACK *, const STACK_OF(POLICYQUALINFO) *, sk),    \
1595       CHECKED_CAST(void *(*)(void *), POLICYQUALINFO *(*)(POLICYQUALINFO *), \
1596                    copy_func),                                               \
1597       CHECKED_CAST(void (*)(void *), void (*)(POLICYQUALINFO *), free_func)))
1598 
1599 /* POLICY_MAPPING */
1600 #define sk_POLICY_MAPPING_new(comp)                 \
1601   ((STACK_OF(POLICY_MAPPING) *)sk_new(CHECKED_CAST( \
1602       stack_cmp_func,                               \
1603       int (*)(const POLICY_MAPPING **a, const POLICY_MAPPING **b), comp)))
1604 
1605 #define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)sk_new_null())
1606 
1607 #define sk_POLICY_MAPPING_num(sk) \
1608   sk_num(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk))
1609 
1610 #define sk_POLICY_MAPPING_zero(sk) \
1611   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk));
1612 
1613 #define sk_POLICY_MAPPING_value(sk, i) \
1614   ((POLICY_MAPPING *)sk_value(         \
1615       CHECKED_CAST(_STACK *, const STACK_OF(POLICY_MAPPING) *, sk), (i)))
1616 
1617 #define sk_POLICY_MAPPING_set(sk, i, p)                            \
1618   ((POLICY_MAPPING *)sk_set(                                       \
1619       CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), (i), \
1620       CHECKED_CAST(void *, POLICY_MAPPING *, p)))
1621 
1622 #define sk_POLICY_MAPPING_free(sk) \
1623   sk_free(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk))
1624 
1625 #define sk_POLICY_MAPPING_pop_free(sk, free_func)             \
1626   sk_pop_free(                                                \
1627       CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1628       CHECKED_CAST(void (*)(void *), void (*)(POLICY_MAPPING *), free_func))
1629 
1630 #define sk_POLICY_MAPPING_insert(sk, p, where)                      \
1631   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1632             CHECKED_CAST(void *, POLICY_MAPPING *, p), (where))
1633 
1634 #define sk_POLICY_MAPPING_delete(sk, where) \
1635   ((POLICY_MAPPING *)sk_delete(             \
1636       CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), (where)))
1637 
1638 #define sk_POLICY_MAPPING_delete_ptr(sk, p)                   \
1639   ((POLICY_MAPPING *)sk_delete_ptr(                           \
1640       CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1641       CHECKED_CAST(void *, POLICY_MAPPING *, p)))
1642 
1643 #define sk_POLICY_MAPPING_find(sk, out_index, p)                               \
1644   sk_find(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), (out_index), \
1645           CHECKED_CAST(void *, POLICY_MAPPING *, p))
1646 
1647 #define sk_POLICY_MAPPING_shift(sk) \
1648   ((POLICY_MAPPING *)sk_shift(      \
1649       CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk)))
1650 
1651 #define sk_POLICY_MAPPING_push(sk, p)                             \
1652   sk_push(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk), \
1653           CHECKED_CAST(void *, POLICY_MAPPING *, p))
1654 
1655 #define sk_POLICY_MAPPING_pop(sk) \
1656   ((POLICY_MAPPING *)sk_pop(      \
1657       CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk)))
1658 
1659 #define sk_POLICY_MAPPING_dup(sk)      \
1660   ((STACK_OF(POLICY_MAPPING) *)sk_dup( \
1661       CHECKED_CAST(_STACK *, const STACK_OF(POLICY_MAPPING) *, sk)))
1662 
1663 #define sk_POLICY_MAPPING_sort(sk) \
1664   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk))
1665 
1666 #define sk_POLICY_MAPPING_is_sorted(sk) \
1667   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(POLICY_MAPPING) *, sk))
1668 
1669 #define sk_POLICY_MAPPING_set_cmp_func(sk, comp)                           \
1670   ((int (*)(const POLICY_MAPPING **a, const POLICY_MAPPING **b))           \
1671        sk_set_cmp_func(                                                    \
1672            CHECKED_CAST(_STACK *, STACK_OF(POLICY_MAPPING) *, sk),         \
1673            CHECKED_CAST(stack_cmp_func, int (*)(const POLICY_MAPPING **a,  \
1674                                                 const POLICY_MAPPING **b), \
1675                         comp)))
1676 
1677 #define sk_POLICY_MAPPING_deep_copy(sk, copy_func, free_func)                \
1678   ((STACK_OF(POLICY_MAPPING) *)sk_deep_copy(                                 \
1679       CHECKED_CAST(const _STACK *, const STACK_OF(POLICY_MAPPING) *, sk),    \
1680       CHECKED_CAST(void *(*)(void *), POLICY_MAPPING *(*)(POLICY_MAPPING *), \
1681                    copy_func),                                               \
1682       CHECKED_CAST(void (*)(void *), void (*)(POLICY_MAPPING *), free_func)))
1683 
1684 /* RSA_additional_prime */
1685 #define sk_RSA_additional_prime_new(comp)                                      \
1686   ((STACK_OF(RSA_additional_prime) *)sk_new(CHECKED_CAST(                      \
1687       stack_cmp_func,                                                          \
1688       int (*)(const RSA_additional_prime **a, const RSA_additional_prime **b), \
1689       comp)))
1690 
1691 #define sk_RSA_additional_prime_new_null() \
1692   ((STACK_OF(RSA_additional_prime) *)sk_new_null())
1693 
1694 #define sk_RSA_additional_prime_num(sk) \
1695   sk_num(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk))
1696 
1697 #define sk_RSA_additional_prime_zero(sk) \
1698   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk));
1699 
1700 #define sk_RSA_additional_prime_value(sk, i)                              \
1701   ((RSA_additional_prime *)sk_value(                                      \
1702       CHECKED_CAST(_STACK *, const STACK_OF(RSA_additional_prime) *, sk), \
1703       (i)))
1704 
1705 #define sk_RSA_additional_prime_set(sk, i, p)                            \
1706   ((RSA_additional_prime *)sk_set(                                       \
1707       CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk), (i), \
1708       CHECKED_CAST(void *, RSA_additional_prime *, p)))
1709 
1710 #define sk_RSA_additional_prime_free(sk) \
1711   sk_free(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk))
1712 
1713 #define sk_RSA_additional_prime_pop_free(sk, free_func)                        \
1714   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk),    \
1715               CHECKED_CAST(void (*)(void *), void (*)(RSA_additional_prime *), \
1716                            free_func))
1717 
1718 #define sk_RSA_additional_prime_insert(sk, p, where)                      \
1719   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk), \
1720             CHECKED_CAST(void *, RSA_additional_prime *, p), (where))
1721 
1722 #define sk_RSA_additional_prime_delete(sk, where) \
1723   ((RSA_additional_prime *)sk_delete(             \
1724       CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk), (where)))
1725 
1726 #define sk_RSA_additional_prime_delete_ptr(sk, p)                   \
1727   ((RSA_additional_prime *)sk_delete_ptr(                           \
1728       CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk), \
1729       CHECKED_CAST(void *, RSA_additional_prime *, p)))
1730 
1731 #define sk_RSA_additional_prime_find(sk, out_index, p)                  \
1732   sk_find(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk), \
1733           (out_index), CHECKED_CAST(void *, RSA_additional_prime *, p))
1734 
1735 #define sk_RSA_additional_prime_shift(sk) \
1736   ((RSA_additional_prime *)sk_shift(      \
1737       CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk)))
1738 
1739 #define sk_RSA_additional_prime_push(sk, p)                             \
1740   sk_push(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk), \
1741           CHECKED_CAST(void *, RSA_additional_prime *, p))
1742 
1743 #define sk_RSA_additional_prime_pop(sk) \
1744   ((RSA_additional_prime *)sk_pop(      \
1745       CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk)))
1746 
1747 #define sk_RSA_additional_prime_dup(sk)      \
1748   ((STACK_OF(RSA_additional_prime) *)sk_dup( \
1749       CHECKED_CAST(_STACK *, const STACK_OF(RSA_additional_prime) *, sk)))
1750 
1751 #define sk_RSA_additional_prime_sort(sk) \
1752   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk))
1753 
1754 #define sk_RSA_additional_prime_is_sorted(sk) \
1755   sk_is_sorted(                               \
1756       CHECKED_CAST(_STACK *, const STACK_OF(RSA_additional_prime) *, sk))
1757 
1758 #define sk_RSA_additional_prime_set_cmp_func(sk, comp)                       \
1759   ((int (*)(const RSA_additional_prime **a, const RSA_additional_prime **b)) \
1760        sk_set_cmp_func(                                                      \
1761            CHECKED_CAST(_STACK *, STACK_OF(RSA_additional_prime) *, sk),     \
1762            CHECKED_CAST(stack_cmp_func,                                      \
1763                         int (*)(const RSA_additional_prime **a,              \
1764                                 const RSA_additional_prime **b),             \
1765                         comp)))
1766 
1767 #define sk_RSA_additional_prime_deep_copy(sk, copy_func, free_func)        \
1768   ((STACK_OF(RSA_additional_prime) *)sk_deep_copy(                         \
1769       CHECKED_CAST(const _STACK *, const STACK_OF(RSA_additional_prime) *, \
1770                    sk),                                                    \
1771       CHECKED_CAST(void *(*)(void *),                                      \
1772                    RSA_additional_prime *(*)(RSA_additional_prime *),      \
1773                    copy_func),                                             \
1774       CHECKED_CAST(void (*)(void *), void (*)(RSA_additional_prime *),     \
1775                    free_func)))
1776 
1777 /* SSL_COMP */
1778 #define sk_SSL_COMP_new(comp)                 \
1779   ((STACK_OF(SSL_COMP) *)sk_new(CHECKED_CAST( \
1780       stack_cmp_func, int (*)(const SSL_COMP **a, const SSL_COMP **b), comp)))
1781 
1782 #define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)sk_new_null())
1783 
1784 #define sk_SSL_COMP_num(sk) \
1785   sk_num(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk))
1786 
1787 #define sk_SSL_COMP_zero(sk) \
1788   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk));
1789 
1790 #define sk_SSL_COMP_value(sk, i) \
1791   ((SSL_COMP *)sk_value(         \
1792       CHECKED_CAST(_STACK *, const STACK_OF(SSL_COMP) *, sk), (i)))
1793 
1794 #define sk_SSL_COMP_set(sk, i, p)                                            \
1795   ((SSL_COMP *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), (i), \
1796                       CHECKED_CAST(void *, SSL_COMP *, p)))
1797 
1798 #define sk_SSL_COMP_free(sk) \
1799   sk_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk))
1800 
1801 #define sk_SSL_COMP_pop_free(sk, free_func)                     \
1802   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1803               CHECKED_CAST(void (*)(void *), void (*)(SSL_COMP *), free_func))
1804 
1805 #define sk_SSL_COMP_insert(sk, p, where)                      \
1806   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1807             CHECKED_CAST(void *, SSL_COMP *, p), (where))
1808 
1809 #define sk_SSL_COMP_delete(sk, where)                                      \
1810   ((SSL_COMP *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1811                          (where)))
1812 
1813 #define sk_SSL_COMP_delete_ptr(sk, p)                                          \
1814   ((SSL_COMP *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1815                              CHECKED_CAST(void *, SSL_COMP *, p)))
1816 
1817 #define sk_SSL_COMP_find(sk, out_index, p)                               \
1818   sk_find(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), (out_index), \
1819           CHECKED_CAST(void *, SSL_COMP *, p))
1820 
1821 #define sk_SSL_COMP_shift(sk) \
1822   ((SSL_COMP *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk)))
1823 
1824 #define sk_SSL_COMP_push(sk, p)                             \
1825   sk_push(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk), \
1826           CHECKED_CAST(void *, SSL_COMP *, p))
1827 
1828 #define sk_SSL_COMP_pop(sk) \
1829   ((SSL_COMP *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk)))
1830 
1831 #define sk_SSL_COMP_dup(sk)      \
1832   ((STACK_OF(SSL_COMP) *)sk_dup( \
1833       CHECKED_CAST(_STACK *, const STACK_OF(SSL_COMP) *, sk)))
1834 
1835 #define sk_SSL_COMP_sort(sk) \
1836   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk))
1837 
1838 #define sk_SSL_COMP_is_sorted(sk) \
1839   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(SSL_COMP) *, sk))
1840 
1841 #define sk_SSL_COMP_set_cmp_func(sk, comp)                           \
1842   ((int (*)(const SSL_COMP **a, const SSL_COMP **b))sk_set_cmp_func( \
1843       CHECKED_CAST(_STACK *, STACK_OF(SSL_COMP) *, sk),              \
1844       CHECKED_CAST(stack_cmp_func,                                   \
1845                    int (*)(const SSL_COMP **a, const SSL_COMP **b), comp)))
1846 
1847 #define sk_SSL_COMP_deep_copy(sk, copy_func, free_func)                      \
1848   ((STACK_OF(SSL_COMP) *)sk_deep_copy(                                       \
1849       CHECKED_CAST(const _STACK *, const STACK_OF(SSL_COMP) *, sk),          \
1850       CHECKED_CAST(void *(*)(void *), SSL_COMP *(*)(SSL_COMP *), copy_func), \
1851       CHECKED_CAST(void (*)(void *), void (*)(SSL_COMP *), free_func)))
1852 
1853 /* SSL_CUSTOM_EXTENSION */
1854 #define sk_SSL_CUSTOM_EXTENSION_new(comp)                                      \
1855   ((STACK_OF(SSL_CUSTOM_EXTENSION) *)sk_new(CHECKED_CAST(                      \
1856       stack_cmp_func,                                                          \
1857       int (*)(const SSL_CUSTOM_EXTENSION **a, const SSL_CUSTOM_EXTENSION **b), \
1858       comp)))
1859 
1860 #define sk_SSL_CUSTOM_EXTENSION_new_null() \
1861   ((STACK_OF(SSL_CUSTOM_EXTENSION) *)sk_new_null())
1862 
1863 #define sk_SSL_CUSTOM_EXTENSION_num(sk) \
1864   sk_num(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk))
1865 
1866 #define sk_SSL_CUSTOM_EXTENSION_zero(sk) \
1867   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk));
1868 
1869 #define sk_SSL_CUSTOM_EXTENSION_value(sk, i)                              \
1870   ((SSL_CUSTOM_EXTENSION *)sk_value(                                      \
1871       CHECKED_CAST(_STACK *, const STACK_OF(SSL_CUSTOM_EXTENSION) *, sk), \
1872       (i)))
1873 
1874 #define sk_SSL_CUSTOM_EXTENSION_set(sk, i, p)                            \
1875   ((SSL_CUSTOM_EXTENSION *)sk_set(                                       \
1876       CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk), (i), \
1877       CHECKED_CAST(void *, SSL_CUSTOM_EXTENSION *, p)))
1878 
1879 #define sk_SSL_CUSTOM_EXTENSION_free(sk) \
1880   sk_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk))
1881 
1882 #define sk_SSL_CUSTOM_EXTENSION_pop_free(sk, free_func)                        \
1883   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk),    \
1884               CHECKED_CAST(void (*)(void *), void (*)(SSL_CUSTOM_EXTENSION *), \
1885                            free_func))
1886 
1887 #define sk_SSL_CUSTOM_EXTENSION_insert(sk, p, where)                      \
1888   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk), \
1889             CHECKED_CAST(void *, SSL_CUSTOM_EXTENSION *, p), (where))
1890 
1891 #define sk_SSL_CUSTOM_EXTENSION_delete(sk, where) \
1892   ((SSL_CUSTOM_EXTENSION *)sk_delete(             \
1893       CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk), (where)))
1894 
1895 #define sk_SSL_CUSTOM_EXTENSION_delete_ptr(sk, p)                   \
1896   ((SSL_CUSTOM_EXTENSION *)sk_delete_ptr(                           \
1897       CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk), \
1898       CHECKED_CAST(void *, SSL_CUSTOM_EXTENSION *, p)))
1899 
1900 #define sk_SSL_CUSTOM_EXTENSION_find(sk, out_index, p)                  \
1901   sk_find(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk), \
1902           (out_index), CHECKED_CAST(void *, SSL_CUSTOM_EXTENSION *, p))
1903 
1904 #define sk_SSL_CUSTOM_EXTENSION_shift(sk) \
1905   ((SSL_CUSTOM_EXTENSION *)sk_shift(      \
1906       CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk)))
1907 
1908 #define sk_SSL_CUSTOM_EXTENSION_push(sk, p)                             \
1909   sk_push(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk), \
1910           CHECKED_CAST(void *, SSL_CUSTOM_EXTENSION *, p))
1911 
1912 #define sk_SSL_CUSTOM_EXTENSION_pop(sk) \
1913   ((SSL_CUSTOM_EXTENSION *)sk_pop(      \
1914       CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk)))
1915 
1916 #define sk_SSL_CUSTOM_EXTENSION_dup(sk)      \
1917   ((STACK_OF(SSL_CUSTOM_EXTENSION) *)sk_dup( \
1918       CHECKED_CAST(_STACK *, const STACK_OF(SSL_CUSTOM_EXTENSION) *, sk)))
1919 
1920 #define sk_SSL_CUSTOM_EXTENSION_sort(sk) \
1921   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk))
1922 
1923 #define sk_SSL_CUSTOM_EXTENSION_is_sorted(sk) \
1924   sk_is_sorted(                               \
1925       CHECKED_CAST(_STACK *, const STACK_OF(SSL_CUSTOM_EXTENSION) *, sk))
1926 
1927 #define sk_SSL_CUSTOM_EXTENSION_set_cmp_func(sk, comp)                       \
1928   ((int (*)(const SSL_CUSTOM_EXTENSION **a, const SSL_CUSTOM_EXTENSION **b)) \
1929        sk_set_cmp_func(                                                      \
1930            CHECKED_CAST(_STACK *, STACK_OF(SSL_CUSTOM_EXTENSION) *, sk),     \
1931            CHECKED_CAST(stack_cmp_func,                                      \
1932                         int (*)(const SSL_CUSTOM_EXTENSION **a,              \
1933                                 const SSL_CUSTOM_EXTENSION **b),             \
1934                         comp)))
1935 
1936 #define sk_SSL_CUSTOM_EXTENSION_deep_copy(sk, copy_func, free_func)        \
1937   ((STACK_OF(SSL_CUSTOM_EXTENSION) *)sk_deep_copy(                         \
1938       CHECKED_CAST(const _STACK *, const STACK_OF(SSL_CUSTOM_EXTENSION) *, \
1939                    sk),                                                    \
1940       CHECKED_CAST(void *(*)(void *),                                      \
1941                    SSL_CUSTOM_EXTENSION *(*)(SSL_CUSTOM_EXTENSION *),      \
1942                    copy_func),                                             \
1943       CHECKED_CAST(void (*)(void *), void (*)(SSL_CUSTOM_EXTENSION *),     \
1944                    free_func)))
1945 
1946 /* STACK_OF_X509_NAME_ENTRY */
1947 #define sk_STACK_OF_X509_NAME_ENTRY_new(comp)                      \
1948   ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_new(CHECKED_CAST(      \
1949       stack_cmp_func, int (*)(const STACK_OF_X509_NAME_ENTRY **a,  \
1950                               const STACK_OF_X509_NAME_ENTRY **b), \
1951       comp)))
1952 
1953 #define sk_STACK_OF_X509_NAME_ENTRY_new_null() \
1954   ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_new_null())
1955 
1956 #define sk_STACK_OF_X509_NAME_ENTRY_num(sk) \
1957   sk_num(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
1958 
1959 #define sk_STACK_OF_X509_NAME_ENTRY_zero(sk) \
1960   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk));
1961 
1962 #define sk_STACK_OF_X509_NAME_ENTRY_value(sk, i)                              \
1963   ((STACK_OF_X509_NAME_ENTRY *)sk_value(                                      \
1964       CHECKED_CAST(_STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
1965       (i)))
1966 
1967 #define sk_STACK_OF_X509_NAME_ENTRY_set(sk, i, p)                            \
1968   ((STACK_OF_X509_NAME_ENTRY *)sk_set(                                       \
1969       CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), (i), \
1970       CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p)))
1971 
1972 #define sk_STACK_OF_X509_NAME_ENTRY_free(sk) \
1973   sk_free(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
1974 
1975 #define sk_STACK_OF_X509_NAME_ENTRY_pop_free(sk, free_func)                \
1976   sk_pop_free(                                                             \
1977       CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk),    \
1978       CHECKED_CAST(void (*)(void *), void (*)(STACK_OF_X509_NAME_ENTRY *), \
1979                    free_func))
1980 
1981 #define sk_STACK_OF_X509_NAME_ENTRY_insert(sk, p, where)                      \
1982   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
1983             CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p), (where))
1984 
1985 #define sk_STACK_OF_X509_NAME_ENTRY_delete(sk, where)                   \
1986   ((STACK_OF_X509_NAME_ENTRY *)sk_delete(                               \
1987       CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
1988       (where)))
1989 
1990 #define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(sk, p)                   \
1991   ((STACK_OF_X509_NAME_ENTRY *)sk_delete_ptr(                           \
1992       CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
1993       CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p)))
1994 
1995 #define sk_STACK_OF_X509_NAME_ENTRY_find(sk, out_index, p)                  \
1996   sk_find(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
1997           (out_index), CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p))
1998 
1999 #define sk_STACK_OF_X509_NAME_ENTRY_shift(sk) \
2000   ((STACK_OF_X509_NAME_ENTRY *)sk_shift(      \
2001       CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk)))
2002 
2003 #define sk_STACK_OF_X509_NAME_ENTRY_push(sk, p)                             \
2004   sk_push(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2005           CHECKED_CAST(void *, STACK_OF_X509_NAME_ENTRY *, p))
2006 
2007 #define sk_STACK_OF_X509_NAME_ENTRY_pop(sk) \
2008   ((STACK_OF_X509_NAME_ENTRY *)sk_pop(      \
2009       CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk)))
2010 
2011 #define sk_STACK_OF_X509_NAME_ENTRY_dup(sk)      \
2012   ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_dup( \
2013       CHECKED_CAST(_STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk)))
2014 
2015 #define sk_STACK_OF_X509_NAME_ENTRY_sort(sk) \
2016   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
2017 
2018 #define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(sk) \
2019   sk_is_sorted(                                   \
2020       CHECKED_CAST(_STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk))
2021 
2022 #define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(sk, comp)                   \
2023   ((int (*)(const STACK_OF_X509_NAME_ENTRY **a,                              \
2024             const STACK_OF_X509_NAME_ENTRY **b))                             \
2025        sk_set_cmp_func(                                                      \
2026            CHECKED_CAST(_STACK *, STACK_OF(STACK_OF_X509_NAME_ENTRY) *, sk), \
2027            CHECKED_CAST(stack_cmp_func,                                      \
2028                         int (*)(const STACK_OF_X509_NAME_ENTRY **a,          \
2029                                 const STACK_OF_X509_NAME_ENTRY **b),         \
2030                         comp)))
2031 
2032 #define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(sk, copy_func, free_func)        \
2033   ((STACK_OF(STACK_OF_X509_NAME_ENTRY) *)sk_deep_copy(                         \
2034       CHECKED_CAST(const _STACK *, const STACK_OF(STACK_OF_X509_NAME_ENTRY) *, \
2035                    sk),                                                        \
2036       CHECKED_CAST(void *(*)(void *),                                          \
2037                    STACK_OF_X509_NAME_ENTRY *(*)(STACK_OF_X509_NAME_ENTRY *),  \
2038                    copy_func),                                                 \
2039       CHECKED_CAST(void (*)(void *), void (*)(STACK_OF_X509_NAME_ENTRY *),     \
2040                    free_func)))
2041 
2042 /* SXNETID */
2043 #define sk_SXNETID_new(comp)                 \
2044   ((STACK_OF(SXNETID) *)sk_new(CHECKED_CAST( \
2045       stack_cmp_func, int (*)(const SXNETID **a, const SXNETID **b), comp)))
2046 
2047 #define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)sk_new_null())
2048 
2049 #define sk_SXNETID_num(sk) \
2050   sk_num(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk))
2051 
2052 #define sk_SXNETID_zero(sk) \
2053   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk));
2054 
2055 #define sk_SXNETID_value(sk, i)                                               \
2056   ((SXNETID *)sk_value(CHECKED_CAST(_STACK *, const STACK_OF(SXNETID) *, sk), \
2057                        (i)))
2058 
2059 #define sk_SXNETID_set(sk, i, p)                                           \
2060   ((SXNETID *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), (i), \
2061                      CHECKED_CAST(void *, SXNETID *, p)))
2062 
2063 #define sk_SXNETID_free(sk) \
2064   sk_free(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk))
2065 
2066 #define sk_SXNETID_pop_free(sk, free_func)                     \
2067   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2068               CHECKED_CAST(void (*)(void *), void (*)(SXNETID *), free_func))
2069 
2070 #define sk_SXNETID_insert(sk, p, where)                      \
2071   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2072             CHECKED_CAST(void *, SXNETID *, p), (where))
2073 
2074 #define sk_SXNETID_delete(sk, where)                                     \
2075   ((SXNETID *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2076                         (where)))
2077 
2078 #define sk_SXNETID_delete_ptr(sk, p)                                         \
2079   ((SXNETID *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2080                             CHECKED_CAST(void *, SXNETID *, p)))
2081 
2082 #define sk_SXNETID_find(sk, out_index, p)                               \
2083   sk_find(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), (out_index), \
2084           CHECKED_CAST(void *, SXNETID *, p))
2085 
2086 #define sk_SXNETID_shift(sk) \
2087   ((SXNETID *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk)))
2088 
2089 #define sk_SXNETID_push(sk, p)                             \
2090   sk_push(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk), \
2091           CHECKED_CAST(void *, SXNETID *, p))
2092 
2093 #define sk_SXNETID_pop(sk) \
2094   ((SXNETID *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk)))
2095 
2096 #define sk_SXNETID_dup(sk)      \
2097   ((STACK_OF(SXNETID) *)sk_dup( \
2098       CHECKED_CAST(_STACK *, const STACK_OF(SXNETID) *, sk)))
2099 
2100 #define sk_SXNETID_sort(sk) \
2101   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk))
2102 
2103 #define sk_SXNETID_is_sorted(sk) \
2104   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(SXNETID) *, sk))
2105 
2106 #define sk_SXNETID_set_cmp_func(sk, comp)                          \
2107   ((int (*)(const SXNETID **a, const SXNETID **b))sk_set_cmp_func( \
2108       CHECKED_CAST(_STACK *, STACK_OF(SXNETID) *, sk),             \
2109       CHECKED_CAST(stack_cmp_func,                                 \
2110                    int (*)(const SXNETID **a, const SXNETID **b), comp)))
2111 
2112 #define sk_SXNETID_deep_copy(sk, copy_func, free_func)                     \
2113   ((STACK_OF(SXNETID) *)sk_deep_copy(                                      \
2114       CHECKED_CAST(const _STACK *, const STACK_OF(SXNETID) *, sk),         \
2115       CHECKED_CAST(void *(*)(void *), SXNETID *(*)(SXNETID *), copy_func), \
2116       CHECKED_CAST(void (*)(void *), void (*)(SXNETID *), free_func)))
2117 
2118 /* X509 */
2119 #define sk_X509_new(comp)                 \
2120   ((STACK_OF(X509) *)sk_new(CHECKED_CAST( \
2121       stack_cmp_func, int (*)(const X509 **a, const X509 **b), comp)))
2122 
2123 #define sk_X509_new_null() ((STACK_OF(X509) *)sk_new_null())
2124 
2125 #define sk_X509_num(sk) sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk))
2126 
2127 #define sk_X509_zero(sk) sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk));
2128 
2129 #define sk_X509_value(sk, i) \
2130   ((X509 *)sk_value(CHECKED_CAST(_STACK *, const STACK_OF(X509) *, sk), (i)))
2131 
2132 #define sk_X509_set(sk, i, p)                                        \
2133   ((X509 *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), (i), \
2134                   CHECKED_CAST(void *, X509 *, p)))
2135 
2136 #define sk_X509_free(sk) sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk))
2137 
2138 #define sk_X509_pop_free(sk, free_func)                     \
2139   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2140               CHECKED_CAST(void (*)(void *), void (*)(X509 *), free_func))
2141 
2142 #define sk_X509_insert(sk, p, where)                      \
2143   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2144             CHECKED_CAST(void *, X509 *, p), (where))
2145 
2146 #define sk_X509_delete(sk, where) \
2147   ((X509 *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), (where)))
2148 
2149 #define sk_X509_delete_ptr(sk, p)                                      \
2150   ((X509 *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2151                          CHECKED_CAST(void *, X509 *, p)))
2152 
2153 #define sk_X509_find(sk, out_index, p)                               \
2154   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), (out_index), \
2155           CHECKED_CAST(void *, X509 *, p))
2156 
2157 #define sk_X509_shift(sk) \
2158   ((X509 *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk)))
2159 
2160 #define sk_X509_push(sk, p)                             \
2161   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk), \
2162           CHECKED_CAST(void *, X509 *, p))
2163 
2164 #define sk_X509_pop(sk) \
2165   ((X509 *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk)))
2166 
2167 #define sk_X509_dup(sk) \
2168   ((STACK_OF(X509) *)sk_dup(CHECKED_CAST(_STACK *, const STACK_OF(X509) *, sk)))
2169 
2170 #define sk_X509_sort(sk) sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk))
2171 
2172 #define sk_X509_is_sorted(sk) \
2173   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509) *, sk))
2174 
2175 #define sk_X509_set_cmp_func(sk, comp)                                      \
2176   ((int (*)(const X509 **a, const X509 **b))sk_set_cmp_func(                \
2177       CHECKED_CAST(_STACK *, STACK_OF(X509) *, sk),                         \
2178       CHECKED_CAST(stack_cmp_func, int (*)(const X509 **a, const X509 **b), \
2179                    comp)))
2180 
2181 #define sk_X509_deep_copy(sk, copy_func, free_func)                  \
2182   ((STACK_OF(X509) *)sk_deep_copy(                                   \
2183       CHECKED_CAST(const _STACK *, const STACK_OF(X509) *, sk),      \
2184       CHECKED_CAST(void *(*)(void *), X509 *(*)(X509 *), copy_func), \
2185       CHECKED_CAST(void (*)(void *), void (*)(X509 *), free_func)))
2186 
2187 /* X509V3_EXT_METHOD */
2188 #define sk_X509V3_EXT_METHOD_new(comp)                                   \
2189   ((STACK_OF(X509V3_EXT_METHOD) *)sk_new(CHECKED_CAST(                   \
2190       stack_cmp_func,                                                    \
2191       int (*)(const X509V3_EXT_METHOD **a, const X509V3_EXT_METHOD **b), \
2192       comp)))
2193 
2194 #define sk_X509V3_EXT_METHOD_new_null() \
2195   ((STACK_OF(X509V3_EXT_METHOD) *)sk_new_null())
2196 
2197 #define sk_X509V3_EXT_METHOD_num(sk) \
2198   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk))
2199 
2200 #define sk_X509V3_EXT_METHOD_zero(sk) \
2201   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk));
2202 
2203 #define sk_X509V3_EXT_METHOD_value(sk, i) \
2204   ((X509V3_EXT_METHOD *)sk_value(         \
2205       CHECKED_CAST(_STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk), (i)))
2206 
2207 #define sk_X509V3_EXT_METHOD_set(sk, i, p)                            \
2208   ((X509V3_EXT_METHOD *)sk_set(                                       \
2209       CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), (i), \
2210       CHECKED_CAST(void *, X509V3_EXT_METHOD *, p)))
2211 
2212 #define sk_X509V3_EXT_METHOD_free(sk) \
2213   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk))
2214 
2215 #define sk_X509V3_EXT_METHOD_pop_free(sk, free_func)                        \
2216   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk),    \
2217               CHECKED_CAST(void (*)(void *), void (*)(X509V3_EXT_METHOD *), \
2218                            free_func))
2219 
2220 #define sk_X509V3_EXT_METHOD_insert(sk, p, where)                      \
2221   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2222             CHECKED_CAST(void *, X509V3_EXT_METHOD *, p), (where))
2223 
2224 #define sk_X509V3_EXT_METHOD_delete(sk, where) \
2225   ((X509V3_EXT_METHOD *)sk_delete(             \
2226       CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), (where)))
2227 
2228 #define sk_X509V3_EXT_METHOD_delete_ptr(sk, p)                   \
2229   ((X509V3_EXT_METHOD *)sk_delete_ptr(                           \
2230       CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2231       CHECKED_CAST(void *, X509V3_EXT_METHOD *, p)))
2232 
2233 #define sk_X509V3_EXT_METHOD_find(sk, out_index, p)                  \
2234   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2235           (out_index), CHECKED_CAST(void *, X509V3_EXT_METHOD *, p))
2236 
2237 #define sk_X509V3_EXT_METHOD_shift(sk) \
2238   ((X509V3_EXT_METHOD *)sk_shift(      \
2239       CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk)))
2240 
2241 #define sk_X509V3_EXT_METHOD_push(sk, p)                             \
2242   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk), \
2243           CHECKED_CAST(void *, X509V3_EXT_METHOD *, p))
2244 
2245 #define sk_X509V3_EXT_METHOD_pop(sk) \
2246   ((X509V3_EXT_METHOD *)sk_pop(      \
2247       CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk)))
2248 
2249 #define sk_X509V3_EXT_METHOD_dup(sk)      \
2250   ((STACK_OF(X509V3_EXT_METHOD) *)sk_dup( \
2251       CHECKED_CAST(_STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk)))
2252 
2253 #define sk_X509V3_EXT_METHOD_sort(sk) \
2254   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk))
2255 
2256 #define sk_X509V3_EXT_METHOD_is_sorted(sk) \
2257   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk))
2258 
2259 #define sk_X509V3_EXT_METHOD_set_cmp_func(sk, comp)                           \
2260   ((int (*)(const X509V3_EXT_METHOD **a, const X509V3_EXT_METHOD **b))        \
2261        sk_set_cmp_func(                                                       \
2262            CHECKED_CAST(_STACK *, STACK_OF(X509V3_EXT_METHOD) *, sk),         \
2263            CHECKED_CAST(stack_cmp_func, int (*)(const X509V3_EXT_METHOD **a,  \
2264                                                 const X509V3_EXT_METHOD **b), \
2265                         comp)))
2266 
2267 #define sk_X509V3_EXT_METHOD_deep_copy(sk, copy_func, free_func)             \
2268   ((STACK_OF(X509V3_EXT_METHOD) *)sk_deep_copy(                              \
2269       CHECKED_CAST(const _STACK *, const STACK_OF(X509V3_EXT_METHOD) *, sk), \
2270       CHECKED_CAST(void *(*)(void *),                                        \
2271                    X509V3_EXT_METHOD *(*)(X509V3_EXT_METHOD *), copy_func),  \
2272       CHECKED_CAST(void (*)(void *), void (*)(X509V3_EXT_METHOD *),          \
2273                    free_func)))
2274 
2275 /* X509_ALGOR */
2276 #define sk_X509_ALGOR_new(comp)                                            \
2277   ((STACK_OF(X509_ALGOR) *)sk_new(CHECKED_CAST(                            \
2278       stack_cmp_func, int (*)(const X509_ALGOR **a, const X509_ALGOR **b), \
2279       comp)))
2280 
2281 #define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)sk_new_null())
2282 
2283 #define sk_X509_ALGOR_num(sk) \
2284   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk))
2285 
2286 #define sk_X509_ALGOR_zero(sk) \
2287   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk));
2288 
2289 #define sk_X509_ALGOR_value(sk, i) \
2290   ((X509_ALGOR *)sk_value(         \
2291       CHECKED_CAST(_STACK *, const STACK_OF(X509_ALGOR) *, sk), (i)))
2292 
2293 #define sk_X509_ALGOR_set(sk, i, p)                                         \
2294   ((X509_ALGOR *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2295                         (i), CHECKED_CAST(void *, X509_ALGOR *, p)))
2296 
2297 #define sk_X509_ALGOR_free(sk) \
2298   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk))
2299 
2300 #define sk_X509_ALGOR_pop_free(sk, free_func)             \
2301   sk_pop_free(                                            \
2302       CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2303       CHECKED_CAST(void (*)(void *), void (*)(X509_ALGOR *), free_func))
2304 
2305 #define sk_X509_ALGOR_insert(sk, p, where)                      \
2306   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2307             CHECKED_CAST(void *, X509_ALGOR *, p), (where))
2308 
2309 #define sk_X509_ALGOR_delete(sk, where)                                        \
2310   ((X509_ALGOR *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2311                            (where)))
2312 
2313 #define sk_X509_ALGOR_delete_ptr(sk, p)                   \
2314   ((X509_ALGOR *)sk_delete_ptr(                           \
2315       CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2316       CHECKED_CAST(void *, X509_ALGOR *, p)))
2317 
2318 #define sk_X509_ALGOR_find(sk, out_index, p)                               \
2319   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), (out_index), \
2320           CHECKED_CAST(void *, X509_ALGOR *, p))
2321 
2322 #define sk_X509_ALGOR_shift(sk) \
2323   ((X509_ALGOR *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk)))
2324 
2325 #define sk_X509_ALGOR_push(sk, p)                             \
2326   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk), \
2327           CHECKED_CAST(void *, X509_ALGOR *, p))
2328 
2329 #define sk_X509_ALGOR_pop(sk) \
2330   ((X509_ALGOR *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk)))
2331 
2332 #define sk_X509_ALGOR_dup(sk)      \
2333   ((STACK_OF(X509_ALGOR) *)sk_dup( \
2334       CHECKED_CAST(_STACK *, const STACK_OF(X509_ALGOR) *, sk)))
2335 
2336 #define sk_X509_ALGOR_sort(sk) \
2337   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk))
2338 
2339 #define sk_X509_ALGOR_is_sorted(sk) \
2340   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_ALGOR) *, sk))
2341 
2342 #define sk_X509_ALGOR_set_cmp_func(sk, comp)                             \
2343   ((int (*)(const X509_ALGOR **a, const X509_ALGOR **b))sk_set_cmp_func( \
2344       CHECKED_CAST(_STACK *, STACK_OF(X509_ALGOR) *, sk),                \
2345       CHECKED_CAST(stack_cmp_func,                                       \
2346                    int (*)(const X509_ALGOR **a, const X509_ALGOR **b),  \
2347                    comp)))
2348 
2349 #define sk_X509_ALGOR_deep_copy(sk, copy_func, free_func)             \
2350   ((STACK_OF(X509_ALGOR) *)sk_deep_copy(                              \
2351       CHECKED_CAST(const _STACK *, const STACK_OF(X509_ALGOR) *, sk), \
2352       CHECKED_CAST(void *(*)(void *), X509_ALGOR *(*)(X509_ALGOR *),  \
2353                    copy_func),                                        \
2354       CHECKED_CAST(void (*)(void *), void (*)(X509_ALGOR *), free_func)))
2355 
2356 /* X509_ATTRIBUTE */
2357 #define sk_X509_ATTRIBUTE_new(comp)                 \
2358   ((STACK_OF(X509_ATTRIBUTE) *)sk_new(CHECKED_CAST( \
2359       stack_cmp_func,                               \
2360       int (*)(const X509_ATTRIBUTE **a, const X509_ATTRIBUTE **b), comp)))
2361 
2362 #define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)sk_new_null())
2363 
2364 #define sk_X509_ATTRIBUTE_num(sk) \
2365   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk))
2366 
2367 #define sk_X509_ATTRIBUTE_zero(sk) \
2368   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk));
2369 
2370 #define sk_X509_ATTRIBUTE_value(sk, i) \
2371   ((X509_ATTRIBUTE *)sk_value(         \
2372       CHECKED_CAST(_STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk), (i)))
2373 
2374 #define sk_X509_ATTRIBUTE_set(sk, i, p)                            \
2375   ((X509_ATTRIBUTE *)sk_set(                                       \
2376       CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), (i), \
2377       CHECKED_CAST(void *, X509_ATTRIBUTE *, p)))
2378 
2379 #define sk_X509_ATTRIBUTE_free(sk) \
2380   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk))
2381 
2382 #define sk_X509_ATTRIBUTE_pop_free(sk, free_func)             \
2383   sk_pop_free(                                                \
2384       CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2385       CHECKED_CAST(void (*)(void *), void (*)(X509_ATTRIBUTE *), free_func))
2386 
2387 #define sk_X509_ATTRIBUTE_insert(sk, p, where)                      \
2388   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2389             CHECKED_CAST(void *, X509_ATTRIBUTE *, p), (where))
2390 
2391 #define sk_X509_ATTRIBUTE_delete(sk, where) \
2392   ((X509_ATTRIBUTE *)sk_delete(             \
2393       CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), (where)))
2394 
2395 #define sk_X509_ATTRIBUTE_delete_ptr(sk, p)                   \
2396   ((X509_ATTRIBUTE *)sk_delete_ptr(                           \
2397       CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2398       CHECKED_CAST(void *, X509_ATTRIBUTE *, p)))
2399 
2400 #define sk_X509_ATTRIBUTE_find(sk, out_index, p)                               \
2401   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), (out_index), \
2402           CHECKED_CAST(void *, X509_ATTRIBUTE *, p))
2403 
2404 #define sk_X509_ATTRIBUTE_shift(sk) \
2405   ((X509_ATTRIBUTE *)sk_shift(      \
2406       CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk)))
2407 
2408 #define sk_X509_ATTRIBUTE_push(sk, p)                             \
2409   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk), \
2410           CHECKED_CAST(void *, X509_ATTRIBUTE *, p))
2411 
2412 #define sk_X509_ATTRIBUTE_pop(sk) \
2413   ((X509_ATTRIBUTE *)sk_pop(      \
2414       CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk)))
2415 
2416 #define sk_X509_ATTRIBUTE_dup(sk)      \
2417   ((STACK_OF(X509_ATTRIBUTE) *)sk_dup( \
2418       CHECKED_CAST(_STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk)))
2419 
2420 #define sk_X509_ATTRIBUTE_sort(sk) \
2421   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk))
2422 
2423 #define sk_X509_ATTRIBUTE_is_sorted(sk) \
2424   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk))
2425 
2426 #define sk_X509_ATTRIBUTE_set_cmp_func(sk, comp)                           \
2427   ((int (*)(const X509_ATTRIBUTE **a, const X509_ATTRIBUTE **b))           \
2428        sk_set_cmp_func(                                                    \
2429            CHECKED_CAST(_STACK *, STACK_OF(X509_ATTRIBUTE) *, sk),         \
2430            CHECKED_CAST(stack_cmp_func, int (*)(const X509_ATTRIBUTE **a,  \
2431                                                 const X509_ATTRIBUTE **b), \
2432                         comp)))
2433 
2434 #define sk_X509_ATTRIBUTE_deep_copy(sk, copy_func, free_func)                \
2435   ((STACK_OF(X509_ATTRIBUTE) *)sk_deep_copy(                                 \
2436       CHECKED_CAST(const _STACK *, const STACK_OF(X509_ATTRIBUTE) *, sk),    \
2437       CHECKED_CAST(void *(*)(void *), X509_ATTRIBUTE *(*)(X509_ATTRIBUTE *), \
2438                    copy_func),                                               \
2439       CHECKED_CAST(void (*)(void *), void (*)(X509_ATTRIBUTE *), free_func)))
2440 
2441 /* X509_CRL */
2442 #define sk_X509_CRL_new(comp)                 \
2443   ((STACK_OF(X509_CRL) *)sk_new(CHECKED_CAST( \
2444       stack_cmp_func, int (*)(const X509_CRL **a, const X509_CRL **b), comp)))
2445 
2446 #define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)sk_new_null())
2447 
2448 #define sk_X509_CRL_num(sk) \
2449   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk))
2450 
2451 #define sk_X509_CRL_zero(sk) \
2452   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk));
2453 
2454 #define sk_X509_CRL_value(sk, i) \
2455   ((X509_CRL *)sk_value(         \
2456       CHECKED_CAST(_STACK *, const STACK_OF(X509_CRL) *, sk), (i)))
2457 
2458 #define sk_X509_CRL_set(sk, i, p)                                            \
2459   ((X509_CRL *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), (i), \
2460                       CHECKED_CAST(void *, X509_CRL *, p)))
2461 
2462 #define sk_X509_CRL_free(sk) \
2463   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk))
2464 
2465 #define sk_X509_CRL_pop_free(sk, free_func)                     \
2466   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2467               CHECKED_CAST(void (*)(void *), void (*)(X509_CRL *), free_func))
2468 
2469 #define sk_X509_CRL_insert(sk, p, where)                      \
2470   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2471             CHECKED_CAST(void *, X509_CRL *, p), (where))
2472 
2473 #define sk_X509_CRL_delete(sk, where)                                      \
2474   ((X509_CRL *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2475                          (where)))
2476 
2477 #define sk_X509_CRL_delete_ptr(sk, p)                                          \
2478   ((X509_CRL *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2479                              CHECKED_CAST(void *, X509_CRL *, p)))
2480 
2481 #define sk_X509_CRL_find(sk, out_index, p)                               \
2482   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), (out_index), \
2483           CHECKED_CAST(void *, X509_CRL *, p))
2484 
2485 #define sk_X509_CRL_shift(sk) \
2486   ((X509_CRL *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk)))
2487 
2488 #define sk_X509_CRL_push(sk, p)                             \
2489   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk), \
2490           CHECKED_CAST(void *, X509_CRL *, p))
2491 
2492 #define sk_X509_CRL_pop(sk) \
2493   ((X509_CRL *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk)))
2494 
2495 #define sk_X509_CRL_dup(sk)      \
2496   ((STACK_OF(X509_CRL) *)sk_dup( \
2497       CHECKED_CAST(_STACK *, const STACK_OF(X509_CRL) *, sk)))
2498 
2499 #define sk_X509_CRL_sort(sk) \
2500   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk))
2501 
2502 #define sk_X509_CRL_is_sorted(sk) \
2503   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_CRL) *, sk))
2504 
2505 #define sk_X509_CRL_set_cmp_func(sk, comp)                           \
2506   ((int (*)(const X509_CRL **a, const X509_CRL **b))sk_set_cmp_func( \
2507       CHECKED_CAST(_STACK *, STACK_OF(X509_CRL) *, sk),              \
2508       CHECKED_CAST(stack_cmp_func,                                   \
2509                    int (*)(const X509_CRL **a, const X509_CRL **b), comp)))
2510 
2511 #define sk_X509_CRL_deep_copy(sk, copy_func, free_func)                      \
2512   ((STACK_OF(X509_CRL) *)sk_deep_copy(                                       \
2513       CHECKED_CAST(const _STACK *, const STACK_OF(X509_CRL) *, sk),          \
2514       CHECKED_CAST(void *(*)(void *), X509_CRL *(*)(X509_CRL *), copy_func), \
2515       CHECKED_CAST(void (*)(void *), void (*)(X509_CRL *), free_func)))
2516 
2517 /* X509_EXTENSION */
2518 #define sk_X509_EXTENSION_new(comp)                 \
2519   ((STACK_OF(X509_EXTENSION) *)sk_new(CHECKED_CAST( \
2520       stack_cmp_func,                               \
2521       int (*)(const X509_EXTENSION **a, const X509_EXTENSION **b), comp)))
2522 
2523 #define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)sk_new_null())
2524 
2525 #define sk_X509_EXTENSION_num(sk) \
2526   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk))
2527 
2528 #define sk_X509_EXTENSION_zero(sk) \
2529   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk));
2530 
2531 #define sk_X509_EXTENSION_value(sk, i) \
2532   ((X509_EXTENSION *)sk_value(         \
2533       CHECKED_CAST(_STACK *, const STACK_OF(X509_EXTENSION) *, sk), (i)))
2534 
2535 #define sk_X509_EXTENSION_set(sk, i, p)                            \
2536   ((X509_EXTENSION *)sk_set(                                       \
2537       CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), (i), \
2538       CHECKED_CAST(void *, X509_EXTENSION *, p)))
2539 
2540 #define sk_X509_EXTENSION_free(sk) \
2541   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk))
2542 
2543 #define sk_X509_EXTENSION_pop_free(sk, free_func)             \
2544   sk_pop_free(                                                \
2545       CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2546       CHECKED_CAST(void (*)(void *), void (*)(X509_EXTENSION *), free_func))
2547 
2548 #define sk_X509_EXTENSION_insert(sk, p, where)                      \
2549   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2550             CHECKED_CAST(void *, X509_EXTENSION *, p), (where))
2551 
2552 #define sk_X509_EXTENSION_delete(sk, where) \
2553   ((X509_EXTENSION *)sk_delete(             \
2554       CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), (where)))
2555 
2556 #define sk_X509_EXTENSION_delete_ptr(sk, p)                   \
2557   ((X509_EXTENSION *)sk_delete_ptr(                           \
2558       CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2559       CHECKED_CAST(void *, X509_EXTENSION *, p)))
2560 
2561 #define sk_X509_EXTENSION_find(sk, out_index, p)                               \
2562   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), (out_index), \
2563           CHECKED_CAST(void *, X509_EXTENSION *, p))
2564 
2565 #define sk_X509_EXTENSION_shift(sk) \
2566   ((X509_EXTENSION *)sk_shift(      \
2567       CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk)))
2568 
2569 #define sk_X509_EXTENSION_push(sk, p)                             \
2570   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk), \
2571           CHECKED_CAST(void *, X509_EXTENSION *, p))
2572 
2573 #define sk_X509_EXTENSION_pop(sk) \
2574   ((X509_EXTENSION *)sk_pop(      \
2575       CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk)))
2576 
2577 #define sk_X509_EXTENSION_dup(sk)      \
2578   ((STACK_OF(X509_EXTENSION) *)sk_dup( \
2579       CHECKED_CAST(_STACK *, const STACK_OF(X509_EXTENSION) *, sk)))
2580 
2581 #define sk_X509_EXTENSION_sort(sk) \
2582   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk))
2583 
2584 #define sk_X509_EXTENSION_is_sorted(sk) \
2585   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_EXTENSION) *, sk))
2586 
2587 #define sk_X509_EXTENSION_set_cmp_func(sk, comp)                           \
2588   ((int (*)(const X509_EXTENSION **a, const X509_EXTENSION **b))           \
2589        sk_set_cmp_func(                                                    \
2590            CHECKED_CAST(_STACK *, STACK_OF(X509_EXTENSION) *, sk),         \
2591            CHECKED_CAST(stack_cmp_func, int (*)(const X509_EXTENSION **a,  \
2592                                                 const X509_EXTENSION **b), \
2593                         comp)))
2594 
2595 #define sk_X509_EXTENSION_deep_copy(sk, copy_func, free_func)                \
2596   ((STACK_OF(X509_EXTENSION) *)sk_deep_copy(                                 \
2597       CHECKED_CAST(const _STACK *, const STACK_OF(X509_EXTENSION) *, sk),    \
2598       CHECKED_CAST(void *(*)(void *), X509_EXTENSION *(*)(X509_EXTENSION *), \
2599                    copy_func),                                               \
2600       CHECKED_CAST(void (*)(void *), void (*)(X509_EXTENSION *), free_func)))
2601 
2602 /* X509_INFO */
2603 #define sk_X509_INFO_new(comp)     \
2604   ((STACK_OF(X509_INFO) *)sk_new(  \
2605       CHECKED_CAST(stack_cmp_func, \
2606                    int (*)(const X509_INFO **a, const X509_INFO **b), comp)))
2607 
2608 #define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)sk_new_null())
2609 
2610 #define sk_X509_INFO_num(sk) \
2611   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk))
2612 
2613 #define sk_X509_INFO_zero(sk) \
2614   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk));
2615 
2616 #define sk_X509_INFO_value(sk, i) \
2617   ((X509_INFO *)sk_value(         \
2618       CHECKED_CAST(_STACK *, const STACK_OF(X509_INFO) *, sk), (i)))
2619 
2620 #define sk_X509_INFO_set(sk, i, p)                                             \
2621   ((X509_INFO *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), (i), \
2622                        CHECKED_CAST(void *, X509_INFO *, p)))
2623 
2624 #define sk_X509_INFO_free(sk) \
2625   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk))
2626 
2627 #define sk_X509_INFO_pop_free(sk, free_func)             \
2628   sk_pop_free(                                           \
2629       CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2630       CHECKED_CAST(void (*)(void *), void (*)(X509_INFO *), free_func))
2631 
2632 #define sk_X509_INFO_insert(sk, p, where)                      \
2633   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2634             CHECKED_CAST(void *, X509_INFO *, p), (where))
2635 
2636 #define sk_X509_INFO_delete(sk, where)                                       \
2637   ((X509_INFO *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2638                           (where)))
2639 
2640 #define sk_X509_INFO_delete_ptr(sk, p)                   \
2641   ((X509_INFO *)sk_delete_ptr(                           \
2642       CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2643       CHECKED_CAST(void *, X509_INFO *, p)))
2644 
2645 #define sk_X509_INFO_find(sk, out_index, p)                               \
2646   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), (out_index), \
2647           CHECKED_CAST(void *, X509_INFO *, p))
2648 
2649 #define sk_X509_INFO_shift(sk) \
2650   ((X509_INFO *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk)))
2651 
2652 #define sk_X509_INFO_push(sk, p)                             \
2653   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk), \
2654           CHECKED_CAST(void *, X509_INFO *, p))
2655 
2656 #define sk_X509_INFO_pop(sk) \
2657   ((X509_INFO *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk)))
2658 
2659 #define sk_X509_INFO_dup(sk)      \
2660   ((STACK_OF(X509_INFO) *)sk_dup( \
2661       CHECKED_CAST(_STACK *, const STACK_OF(X509_INFO) *, sk)))
2662 
2663 #define sk_X509_INFO_sort(sk) \
2664   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk))
2665 
2666 #define sk_X509_INFO_is_sorted(sk) \
2667   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_INFO) *, sk))
2668 
2669 #define sk_X509_INFO_set_cmp_func(sk, comp)                            \
2670   ((int (*)(const X509_INFO **a, const X509_INFO **b))sk_set_cmp_func( \
2671       CHECKED_CAST(_STACK *, STACK_OF(X509_INFO) *, sk),               \
2672       CHECKED_CAST(stack_cmp_func,                                     \
2673                    int (*)(const X509_INFO **a, const X509_INFO **b), comp)))
2674 
2675 #define sk_X509_INFO_deep_copy(sk, copy_func, free_func)                       \
2676   ((STACK_OF(X509_INFO) *)sk_deep_copy(                                        \
2677       CHECKED_CAST(const _STACK *, const STACK_OF(X509_INFO) *, sk),           \
2678       CHECKED_CAST(void *(*)(void *), X509_INFO *(*)(X509_INFO *), copy_func), \
2679       CHECKED_CAST(void (*)(void *), void (*)(X509_INFO *), free_func)))
2680 
2681 /* X509_LOOKUP */
2682 #define sk_X509_LOOKUP_new(comp)                                             \
2683   ((STACK_OF(X509_LOOKUP) *)sk_new(CHECKED_CAST(                             \
2684       stack_cmp_func, int (*)(const X509_LOOKUP **a, const X509_LOOKUP **b), \
2685       comp)))
2686 
2687 #define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)sk_new_null())
2688 
2689 #define sk_X509_LOOKUP_num(sk) \
2690   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk))
2691 
2692 #define sk_X509_LOOKUP_zero(sk) \
2693   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk));
2694 
2695 #define sk_X509_LOOKUP_value(sk, i) \
2696   ((X509_LOOKUP *)sk_value(         \
2697       CHECKED_CAST(_STACK *, const STACK_OF(X509_LOOKUP) *, sk), (i)))
2698 
2699 #define sk_X509_LOOKUP_set(sk, i, p)                                          \
2700   ((X509_LOOKUP *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2701                          (i), CHECKED_CAST(void *, X509_LOOKUP *, p)))
2702 
2703 #define sk_X509_LOOKUP_free(sk) \
2704   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk))
2705 
2706 #define sk_X509_LOOKUP_pop_free(sk, free_func)             \
2707   sk_pop_free(                                             \
2708       CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2709       CHECKED_CAST(void (*)(void *), void (*)(X509_LOOKUP *), free_func))
2710 
2711 #define sk_X509_LOOKUP_insert(sk, p, where)                      \
2712   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2713             CHECKED_CAST(void *, X509_LOOKUP *, p), (where))
2714 
2715 #define sk_X509_LOOKUP_delete(sk, where) \
2716   ((X509_LOOKUP *)sk_delete(             \
2717       CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), (where)))
2718 
2719 #define sk_X509_LOOKUP_delete_ptr(sk, p)                   \
2720   ((X509_LOOKUP *)sk_delete_ptr(                           \
2721       CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2722       CHECKED_CAST(void *, X509_LOOKUP *, p)))
2723 
2724 #define sk_X509_LOOKUP_find(sk, out_index, p)                               \
2725   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), (out_index), \
2726           CHECKED_CAST(void *, X509_LOOKUP *, p))
2727 
2728 #define sk_X509_LOOKUP_shift(sk) \
2729   ((X509_LOOKUP *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk)))
2730 
2731 #define sk_X509_LOOKUP_push(sk, p)                             \
2732   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk), \
2733           CHECKED_CAST(void *, X509_LOOKUP *, p))
2734 
2735 #define sk_X509_LOOKUP_pop(sk) \
2736   ((X509_LOOKUP *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk)))
2737 
2738 #define sk_X509_LOOKUP_dup(sk)      \
2739   ((STACK_OF(X509_LOOKUP) *)sk_dup( \
2740       CHECKED_CAST(_STACK *, const STACK_OF(X509_LOOKUP) *, sk)))
2741 
2742 #define sk_X509_LOOKUP_sort(sk) \
2743   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk))
2744 
2745 #define sk_X509_LOOKUP_is_sorted(sk) \
2746   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_LOOKUP) *, sk))
2747 
2748 #define sk_X509_LOOKUP_set_cmp_func(sk, comp)                              \
2749   ((int (*)(const X509_LOOKUP **a, const X509_LOOKUP **b))sk_set_cmp_func( \
2750       CHECKED_CAST(_STACK *, STACK_OF(X509_LOOKUP) *, sk),                 \
2751       CHECKED_CAST(stack_cmp_func,                                         \
2752                    int (*)(const X509_LOOKUP **a, const X509_LOOKUP **b),  \
2753                    comp)))
2754 
2755 #define sk_X509_LOOKUP_deep_copy(sk, copy_func, free_func)             \
2756   ((STACK_OF(X509_LOOKUP) *)sk_deep_copy(                              \
2757       CHECKED_CAST(const _STACK *, const STACK_OF(X509_LOOKUP) *, sk), \
2758       CHECKED_CAST(void *(*)(void *), X509_LOOKUP *(*)(X509_LOOKUP *), \
2759                    copy_func),                                         \
2760       CHECKED_CAST(void (*)(void *), void (*)(X509_LOOKUP *), free_func)))
2761 
2762 /* X509_NAME */
2763 #define sk_X509_NAME_new(comp)     \
2764   ((STACK_OF(X509_NAME) *)sk_new(  \
2765       CHECKED_CAST(stack_cmp_func, \
2766                    int (*)(const X509_NAME **a, const X509_NAME **b), comp)))
2767 
2768 #define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)sk_new_null())
2769 
2770 #define sk_X509_NAME_num(sk) \
2771   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk))
2772 
2773 #define sk_X509_NAME_zero(sk) \
2774   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk));
2775 
2776 #define sk_X509_NAME_value(sk, i) \
2777   ((X509_NAME *)sk_value(         \
2778       CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME) *, sk), (i)))
2779 
2780 #define sk_X509_NAME_set(sk, i, p)                                             \
2781   ((X509_NAME *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), (i), \
2782                        CHECKED_CAST(void *, X509_NAME *, p)))
2783 
2784 #define sk_X509_NAME_free(sk) \
2785   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk))
2786 
2787 #define sk_X509_NAME_pop_free(sk, free_func)             \
2788   sk_pop_free(                                           \
2789       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2790       CHECKED_CAST(void (*)(void *), void (*)(X509_NAME *), free_func))
2791 
2792 #define sk_X509_NAME_insert(sk, p, where)                      \
2793   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2794             CHECKED_CAST(void *, X509_NAME *, p), (where))
2795 
2796 #define sk_X509_NAME_delete(sk, where)                                       \
2797   ((X509_NAME *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2798                           (where)))
2799 
2800 #define sk_X509_NAME_delete_ptr(sk, p)                   \
2801   ((X509_NAME *)sk_delete_ptr(                           \
2802       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2803       CHECKED_CAST(void *, X509_NAME *, p)))
2804 
2805 #define sk_X509_NAME_find(sk, out_index, p)                               \
2806   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), (out_index), \
2807           CHECKED_CAST(void *, X509_NAME *, p))
2808 
2809 #define sk_X509_NAME_shift(sk) \
2810   ((X509_NAME *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk)))
2811 
2812 #define sk_X509_NAME_push(sk, p)                             \
2813   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk), \
2814           CHECKED_CAST(void *, X509_NAME *, p))
2815 
2816 #define sk_X509_NAME_pop(sk) \
2817   ((X509_NAME *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk)))
2818 
2819 #define sk_X509_NAME_dup(sk)      \
2820   ((STACK_OF(X509_NAME) *)sk_dup( \
2821       CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME) *, sk)))
2822 
2823 #define sk_X509_NAME_sort(sk) \
2824   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk))
2825 
2826 #define sk_X509_NAME_is_sorted(sk) \
2827   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME) *, sk))
2828 
2829 #define sk_X509_NAME_set_cmp_func(sk, comp)                            \
2830   ((int (*)(const X509_NAME **a, const X509_NAME **b))sk_set_cmp_func( \
2831       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME) *, sk),               \
2832       CHECKED_CAST(stack_cmp_func,                                     \
2833                    int (*)(const X509_NAME **a, const X509_NAME **b), comp)))
2834 
2835 #define sk_X509_NAME_deep_copy(sk, copy_func, free_func)                       \
2836   ((STACK_OF(X509_NAME) *)sk_deep_copy(                                        \
2837       CHECKED_CAST(const _STACK *, const STACK_OF(X509_NAME) *, sk),           \
2838       CHECKED_CAST(void *(*)(void *), X509_NAME *(*)(X509_NAME *), copy_func), \
2839       CHECKED_CAST(void (*)(void *), void (*)(X509_NAME *), free_func)))
2840 
2841 /* X509_NAME_ENTRY */
2842 #define sk_X509_NAME_ENTRY_new(comp)                 \
2843   ((STACK_OF(X509_NAME_ENTRY) *)sk_new(CHECKED_CAST( \
2844       stack_cmp_func,                                \
2845       int (*)(const X509_NAME_ENTRY **a, const X509_NAME_ENTRY **b), comp)))
2846 
2847 #define sk_X509_NAME_ENTRY_new_null() \
2848   ((STACK_OF(X509_NAME_ENTRY) *)sk_new_null())
2849 
2850 #define sk_X509_NAME_ENTRY_num(sk) \
2851   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk))
2852 
2853 #define sk_X509_NAME_ENTRY_zero(sk) \
2854   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk));
2855 
2856 #define sk_X509_NAME_ENTRY_value(sk, i) \
2857   ((X509_NAME_ENTRY *)sk_value(         \
2858       CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk), (i)))
2859 
2860 #define sk_X509_NAME_ENTRY_set(sk, i, p)                            \
2861   ((X509_NAME_ENTRY *)sk_set(                                       \
2862       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), (i), \
2863       CHECKED_CAST(void *, X509_NAME_ENTRY *, p)))
2864 
2865 #define sk_X509_NAME_ENTRY_free(sk) \
2866   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk))
2867 
2868 #define sk_X509_NAME_ENTRY_pop_free(sk, free_func)             \
2869   sk_pop_free(                                                 \
2870       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2871       CHECKED_CAST(void (*)(void *), void (*)(X509_NAME_ENTRY *), free_func))
2872 
2873 #define sk_X509_NAME_ENTRY_insert(sk, p, where)                      \
2874   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2875             CHECKED_CAST(void *, X509_NAME_ENTRY *, p), (where))
2876 
2877 #define sk_X509_NAME_ENTRY_delete(sk, where) \
2878   ((X509_NAME_ENTRY *)sk_delete(             \
2879       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), (where)))
2880 
2881 #define sk_X509_NAME_ENTRY_delete_ptr(sk, p)                   \
2882   ((X509_NAME_ENTRY *)sk_delete_ptr(                           \
2883       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2884       CHECKED_CAST(void *, X509_NAME_ENTRY *, p)))
2885 
2886 #define sk_X509_NAME_ENTRY_find(sk, out_index, p)                  \
2887   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2888           (out_index), CHECKED_CAST(void *, X509_NAME_ENTRY *, p))
2889 
2890 #define sk_X509_NAME_ENTRY_shift(sk) \
2891   ((X509_NAME_ENTRY *)sk_shift(      \
2892       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk)))
2893 
2894 #define sk_X509_NAME_ENTRY_push(sk, p)                             \
2895   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk), \
2896           CHECKED_CAST(void *, X509_NAME_ENTRY *, p))
2897 
2898 #define sk_X509_NAME_ENTRY_pop(sk) \
2899   ((X509_NAME_ENTRY *)sk_pop(      \
2900       CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk)))
2901 
2902 #define sk_X509_NAME_ENTRY_dup(sk)      \
2903   ((STACK_OF(X509_NAME_ENTRY) *)sk_dup( \
2904       CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk)))
2905 
2906 #define sk_X509_NAME_ENTRY_sort(sk) \
2907   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk))
2908 
2909 #define sk_X509_NAME_ENTRY_is_sorted(sk) \
2910   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk))
2911 
2912 #define sk_X509_NAME_ENTRY_set_cmp_func(sk, comp)                           \
2913   ((int (*)(const X509_NAME_ENTRY **a, const X509_NAME_ENTRY **b))          \
2914        sk_set_cmp_func(                                                     \
2915            CHECKED_CAST(_STACK *, STACK_OF(X509_NAME_ENTRY) *, sk),         \
2916            CHECKED_CAST(stack_cmp_func, int (*)(const X509_NAME_ENTRY **a,  \
2917                                                 const X509_NAME_ENTRY **b), \
2918                         comp)))
2919 
2920 #define sk_X509_NAME_ENTRY_deep_copy(sk, copy_func, free_func)                 \
2921   ((STACK_OF(X509_NAME_ENTRY) *)sk_deep_copy(                                  \
2922       CHECKED_CAST(const _STACK *, const STACK_OF(X509_NAME_ENTRY) *, sk),     \
2923       CHECKED_CAST(void *(*)(void *), X509_NAME_ENTRY *(*)(X509_NAME_ENTRY *), \
2924                    copy_func),                                                 \
2925       CHECKED_CAST(void (*)(void *), void (*)(X509_NAME_ENTRY *), free_func)))
2926 
2927 /* X509_OBJECT */
2928 #define sk_X509_OBJECT_new(comp)                                             \
2929   ((STACK_OF(X509_OBJECT) *)sk_new(CHECKED_CAST(                             \
2930       stack_cmp_func, int (*)(const X509_OBJECT **a, const X509_OBJECT **b), \
2931       comp)))
2932 
2933 #define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)sk_new_null())
2934 
2935 #define sk_X509_OBJECT_num(sk) \
2936   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk))
2937 
2938 #define sk_X509_OBJECT_zero(sk) \
2939   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk));
2940 
2941 #define sk_X509_OBJECT_value(sk, i) \
2942   ((X509_OBJECT *)sk_value(         \
2943       CHECKED_CAST(_STACK *, const STACK_OF(X509_OBJECT) *, sk), (i)))
2944 
2945 #define sk_X509_OBJECT_set(sk, i, p)                                          \
2946   ((X509_OBJECT *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
2947                          (i), CHECKED_CAST(void *, X509_OBJECT *, p)))
2948 
2949 #define sk_X509_OBJECT_free(sk) \
2950   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk))
2951 
2952 #define sk_X509_OBJECT_pop_free(sk, free_func)             \
2953   sk_pop_free(                                             \
2954       CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
2955       CHECKED_CAST(void (*)(void *), void (*)(X509_OBJECT *), free_func))
2956 
2957 #define sk_X509_OBJECT_insert(sk, p, where)                      \
2958   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
2959             CHECKED_CAST(void *, X509_OBJECT *, p), (where))
2960 
2961 #define sk_X509_OBJECT_delete(sk, where) \
2962   ((X509_OBJECT *)sk_delete(             \
2963       CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), (where)))
2964 
2965 #define sk_X509_OBJECT_delete_ptr(sk, p)                   \
2966   ((X509_OBJECT *)sk_delete_ptr(                           \
2967       CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
2968       CHECKED_CAST(void *, X509_OBJECT *, p)))
2969 
2970 #define sk_X509_OBJECT_find(sk, out_index, p)                               \
2971   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), (out_index), \
2972           CHECKED_CAST(void *, X509_OBJECT *, p))
2973 
2974 #define sk_X509_OBJECT_shift(sk) \
2975   ((X509_OBJECT *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk)))
2976 
2977 #define sk_X509_OBJECT_push(sk, p)                             \
2978   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk), \
2979           CHECKED_CAST(void *, X509_OBJECT *, p))
2980 
2981 #define sk_X509_OBJECT_pop(sk) \
2982   ((X509_OBJECT *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk)))
2983 
2984 #define sk_X509_OBJECT_dup(sk)      \
2985   ((STACK_OF(X509_OBJECT) *)sk_dup( \
2986       CHECKED_CAST(_STACK *, const STACK_OF(X509_OBJECT) *, sk)))
2987 
2988 #define sk_X509_OBJECT_sort(sk) \
2989   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk))
2990 
2991 #define sk_X509_OBJECT_is_sorted(sk) \
2992   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_OBJECT) *, sk))
2993 
2994 #define sk_X509_OBJECT_set_cmp_func(sk, comp)                              \
2995   ((int (*)(const X509_OBJECT **a, const X509_OBJECT **b))sk_set_cmp_func( \
2996       CHECKED_CAST(_STACK *, STACK_OF(X509_OBJECT) *, sk),                 \
2997       CHECKED_CAST(stack_cmp_func,                                         \
2998                    int (*)(const X509_OBJECT **a, const X509_OBJECT **b),  \
2999                    comp)))
3000 
3001 #define sk_X509_OBJECT_deep_copy(sk, copy_func, free_func)             \
3002   ((STACK_OF(X509_OBJECT) *)sk_deep_copy(                              \
3003       CHECKED_CAST(const _STACK *, const STACK_OF(X509_OBJECT) *, sk), \
3004       CHECKED_CAST(void *(*)(void *), X509_OBJECT *(*)(X509_OBJECT *), \
3005                    copy_func),                                         \
3006       CHECKED_CAST(void (*)(void *), void (*)(X509_OBJECT *), free_func)))
3007 
3008 /* X509_POLICY_DATA */
3009 #define sk_X509_POLICY_DATA_new(comp)                 \
3010   ((STACK_OF(X509_POLICY_DATA) *)sk_new(CHECKED_CAST( \
3011       stack_cmp_func,                                 \
3012       int (*)(const X509_POLICY_DATA **a, const X509_POLICY_DATA **b), comp)))
3013 
3014 #define sk_X509_POLICY_DATA_new_null() \
3015   ((STACK_OF(X509_POLICY_DATA) *)sk_new_null())
3016 
3017 #define sk_X509_POLICY_DATA_num(sk) \
3018   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk))
3019 
3020 #define sk_X509_POLICY_DATA_zero(sk) \
3021   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk));
3022 
3023 #define sk_X509_POLICY_DATA_value(sk, i) \
3024   ((X509_POLICY_DATA *)sk_value(         \
3025       CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_DATA) *, sk), (i)))
3026 
3027 #define sk_X509_POLICY_DATA_set(sk, i, p)                            \
3028   ((X509_POLICY_DATA *)sk_set(                                       \
3029       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), (i), \
3030       CHECKED_CAST(void *, X509_POLICY_DATA *, p)))
3031 
3032 #define sk_X509_POLICY_DATA_free(sk) \
3033   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk))
3034 
3035 #define sk_X509_POLICY_DATA_pop_free(sk, free_func)             \
3036   sk_pop_free(                                                  \
3037       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3038       CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_DATA *), free_func))
3039 
3040 #define sk_X509_POLICY_DATA_insert(sk, p, where)                      \
3041   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3042             CHECKED_CAST(void *, X509_POLICY_DATA *, p), (where))
3043 
3044 #define sk_X509_POLICY_DATA_delete(sk, where) \
3045   ((X509_POLICY_DATA *)sk_delete(             \
3046       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), (where)))
3047 
3048 #define sk_X509_POLICY_DATA_delete_ptr(sk, p)                   \
3049   ((X509_POLICY_DATA *)sk_delete_ptr(                           \
3050       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3051       CHECKED_CAST(void *, X509_POLICY_DATA *, p)))
3052 
3053 #define sk_X509_POLICY_DATA_find(sk, out_index, p)                  \
3054   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3055           (out_index), CHECKED_CAST(void *, X509_POLICY_DATA *, p))
3056 
3057 #define sk_X509_POLICY_DATA_shift(sk) \
3058   ((X509_POLICY_DATA *)sk_shift(      \
3059       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk)))
3060 
3061 #define sk_X509_POLICY_DATA_push(sk, p)                             \
3062   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk), \
3063           CHECKED_CAST(void *, X509_POLICY_DATA *, p))
3064 
3065 #define sk_X509_POLICY_DATA_pop(sk) \
3066   ((X509_POLICY_DATA *)sk_pop(      \
3067       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk)))
3068 
3069 #define sk_X509_POLICY_DATA_dup(sk)      \
3070   ((STACK_OF(X509_POLICY_DATA) *)sk_dup( \
3071       CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_DATA) *, sk)))
3072 
3073 #define sk_X509_POLICY_DATA_sort(sk) \
3074   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk))
3075 
3076 #define sk_X509_POLICY_DATA_is_sorted(sk) \
3077   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_DATA) *, sk))
3078 
3079 #define sk_X509_POLICY_DATA_set_cmp_func(sk, comp)                           \
3080   ((int (*)(const X509_POLICY_DATA **a, const X509_POLICY_DATA **b))         \
3081        sk_set_cmp_func(                                                      \
3082            CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_DATA) *, sk),         \
3083            CHECKED_CAST(stack_cmp_func, int (*)(const X509_POLICY_DATA **a,  \
3084                                                 const X509_POLICY_DATA **b), \
3085                         comp)))
3086 
3087 #define sk_X509_POLICY_DATA_deep_copy(sk, copy_func, free_func)             \
3088   ((STACK_OF(X509_POLICY_DATA) *)sk_deep_copy(                              \
3089       CHECKED_CAST(const _STACK *, const STACK_OF(X509_POLICY_DATA) *, sk), \
3090       CHECKED_CAST(void *(*)(void *),                                       \
3091                    X509_POLICY_DATA *(*)(X509_POLICY_DATA *), copy_func),   \
3092       CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_DATA *),          \
3093                    free_func)))
3094 
3095 /* X509_POLICY_NODE */
3096 #define sk_X509_POLICY_NODE_new(comp)                 \
3097   ((STACK_OF(X509_POLICY_NODE) *)sk_new(CHECKED_CAST( \
3098       stack_cmp_func,                                 \
3099       int (*)(const X509_POLICY_NODE **a, const X509_POLICY_NODE **b), comp)))
3100 
3101 #define sk_X509_POLICY_NODE_new_null() \
3102   ((STACK_OF(X509_POLICY_NODE) *)sk_new_null())
3103 
3104 #define sk_X509_POLICY_NODE_num(sk) \
3105   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk))
3106 
3107 #define sk_X509_POLICY_NODE_zero(sk) \
3108   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk));
3109 
3110 #define sk_X509_POLICY_NODE_value(sk, i) \
3111   ((X509_POLICY_NODE *)sk_value(         \
3112       CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_NODE) *, sk), (i)))
3113 
3114 #define sk_X509_POLICY_NODE_set(sk, i, p)                            \
3115   ((X509_POLICY_NODE *)sk_set(                                       \
3116       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), (i), \
3117       CHECKED_CAST(void *, X509_POLICY_NODE *, p)))
3118 
3119 #define sk_X509_POLICY_NODE_free(sk) \
3120   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk))
3121 
3122 #define sk_X509_POLICY_NODE_pop_free(sk, free_func)             \
3123   sk_pop_free(                                                  \
3124       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3125       CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_NODE *), free_func))
3126 
3127 #define sk_X509_POLICY_NODE_insert(sk, p, where)                      \
3128   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3129             CHECKED_CAST(void *, X509_POLICY_NODE *, p), (where))
3130 
3131 #define sk_X509_POLICY_NODE_delete(sk, where) \
3132   ((X509_POLICY_NODE *)sk_delete(             \
3133       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), (where)))
3134 
3135 #define sk_X509_POLICY_NODE_delete_ptr(sk, p)                   \
3136   ((X509_POLICY_NODE *)sk_delete_ptr(                           \
3137       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3138       CHECKED_CAST(void *, X509_POLICY_NODE *, p)))
3139 
3140 #define sk_X509_POLICY_NODE_find(sk, out_index, p)                  \
3141   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3142           (out_index), CHECKED_CAST(void *, X509_POLICY_NODE *, p))
3143 
3144 #define sk_X509_POLICY_NODE_shift(sk) \
3145   ((X509_POLICY_NODE *)sk_shift(      \
3146       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk)))
3147 
3148 #define sk_X509_POLICY_NODE_push(sk, p)                             \
3149   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk), \
3150           CHECKED_CAST(void *, X509_POLICY_NODE *, p))
3151 
3152 #define sk_X509_POLICY_NODE_pop(sk) \
3153   ((X509_POLICY_NODE *)sk_pop(      \
3154       CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk)))
3155 
3156 #define sk_X509_POLICY_NODE_dup(sk)      \
3157   ((STACK_OF(X509_POLICY_NODE) *)sk_dup( \
3158       CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_NODE) *, sk)))
3159 
3160 #define sk_X509_POLICY_NODE_sort(sk) \
3161   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk))
3162 
3163 #define sk_X509_POLICY_NODE_is_sorted(sk) \
3164   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_POLICY_NODE) *, sk))
3165 
3166 #define sk_X509_POLICY_NODE_set_cmp_func(sk, comp)                           \
3167   ((int (*)(const X509_POLICY_NODE **a, const X509_POLICY_NODE **b))         \
3168        sk_set_cmp_func(                                                      \
3169            CHECKED_CAST(_STACK *, STACK_OF(X509_POLICY_NODE) *, sk),         \
3170            CHECKED_CAST(stack_cmp_func, int (*)(const X509_POLICY_NODE **a,  \
3171                                                 const X509_POLICY_NODE **b), \
3172                         comp)))
3173 
3174 #define sk_X509_POLICY_NODE_deep_copy(sk, copy_func, free_func)             \
3175   ((STACK_OF(X509_POLICY_NODE) *)sk_deep_copy(                              \
3176       CHECKED_CAST(const _STACK *, const STACK_OF(X509_POLICY_NODE) *, sk), \
3177       CHECKED_CAST(void *(*)(void *),                                       \
3178                    X509_POLICY_NODE *(*)(X509_POLICY_NODE *), copy_func),   \
3179       CHECKED_CAST(void (*)(void *), void (*)(X509_POLICY_NODE *),          \
3180                    free_func)))
3181 
3182 /* X509_PURPOSE */
3183 #define sk_X509_PURPOSE_new(comp)                                              \
3184   ((STACK_OF(X509_PURPOSE) *)sk_new(CHECKED_CAST(                              \
3185       stack_cmp_func, int (*)(const X509_PURPOSE **a, const X509_PURPOSE **b), \
3186       comp)))
3187 
3188 #define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)sk_new_null())
3189 
3190 #define sk_X509_PURPOSE_num(sk) \
3191   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk))
3192 
3193 #define sk_X509_PURPOSE_zero(sk) \
3194   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk));
3195 
3196 #define sk_X509_PURPOSE_value(sk, i) \
3197   ((X509_PURPOSE *)sk_value(         \
3198       CHECKED_CAST(_STACK *, const STACK_OF(X509_PURPOSE) *, sk), (i)))
3199 
3200 #define sk_X509_PURPOSE_set(sk, i, p)                            \
3201   ((X509_PURPOSE *)sk_set(                                       \
3202       CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), (i), \
3203       CHECKED_CAST(void *, X509_PURPOSE *, p)))
3204 
3205 #define sk_X509_PURPOSE_free(sk) \
3206   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk))
3207 
3208 #define sk_X509_PURPOSE_pop_free(sk, free_func)             \
3209   sk_pop_free(                                              \
3210       CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3211       CHECKED_CAST(void (*)(void *), void (*)(X509_PURPOSE *), free_func))
3212 
3213 #define sk_X509_PURPOSE_insert(sk, p, where)                      \
3214   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3215             CHECKED_CAST(void *, X509_PURPOSE *, p), (where))
3216 
3217 #define sk_X509_PURPOSE_delete(sk, where) \
3218   ((X509_PURPOSE *)sk_delete(             \
3219       CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), (where)))
3220 
3221 #define sk_X509_PURPOSE_delete_ptr(sk, p)                   \
3222   ((X509_PURPOSE *)sk_delete_ptr(                           \
3223       CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3224       CHECKED_CAST(void *, X509_PURPOSE *, p)))
3225 
3226 #define sk_X509_PURPOSE_find(sk, out_index, p)                               \
3227   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), (out_index), \
3228           CHECKED_CAST(void *, X509_PURPOSE *, p))
3229 
3230 #define sk_X509_PURPOSE_shift(sk) \
3231   ((X509_PURPOSE *)sk_shift(      \
3232       CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk)))
3233 
3234 #define sk_X509_PURPOSE_push(sk, p)                             \
3235   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk), \
3236           CHECKED_CAST(void *, X509_PURPOSE *, p))
3237 
3238 #define sk_X509_PURPOSE_pop(sk) \
3239   ((X509_PURPOSE *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk)))
3240 
3241 #define sk_X509_PURPOSE_dup(sk)      \
3242   ((STACK_OF(X509_PURPOSE) *)sk_dup( \
3243       CHECKED_CAST(_STACK *, const STACK_OF(X509_PURPOSE) *, sk)))
3244 
3245 #define sk_X509_PURPOSE_sort(sk) \
3246   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk))
3247 
3248 #define sk_X509_PURPOSE_is_sorted(sk) \
3249   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_PURPOSE) *, sk))
3250 
3251 #define sk_X509_PURPOSE_set_cmp_func(sk, comp)                               \
3252   ((int (*)(const X509_PURPOSE **a, const X509_PURPOSE **b))sk_set_cmp_func( \
3253       CHECKED_CAST(_STACK *, STACK_OF(X509_PURPOSE) *, sk),                  \
3254       CHECKED_CAST(stack_cmp_func,                                           \
3255                    int (*)(const X509_PURPOSE **a, const X509_PURPOSE **b),  \
3256                    comp)))
3257 
3258 #define sk_X509_PURPOSE_deep_copy(sk, copy_func, free_func)              \
3259   ((STACK_OF(X509_PURPOSE) *)sk_deep_copy(                               \
3260       CHECKED_CAST(const _STACK *, const STACK_OF(X509_PURPOSE) *, sk),  \
3261       CHECKED_CAST(void *(*)(void *), X509_PURPOSE *(*)(X509_PURPOSE *), \
3262                    copy_func),                                           \
3263       CHECKED_CAST(void (*)(void *), void (*)(X509_PURPOSE *), free_func)))
3264 
3265 /* X509_REVOKED */
3266 #define sk_X509_REVOKED_new(comp)                                              \
3267   ((STACK_OF(X509_REVOKED) *)sk_new(CHECKED_CAST(                              \
3268       stack_cmp_func, int (*)(const X509_REVOKED **a, const X509_REVOKED **b), \
3269       comp)))
3270 
3271 #define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)sk_new_null())
3272 
3273 #define sk_X509_REVOKED_num(sk) \
3274   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk))
3275 
3276 #define sk_X509_REVOKED_zero(sk) \
3277   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk));
3278 
3279 #define sk_X509_REVOKED_value(sk, i) \
3280   ((X509_REVOKED *)sk_value(         \
3281       CHECKED_CAST(_STACK *, const STACK_OF(X509_REVOKED) *, sk), (i)))
3282 
3283 #define sk_X509_REVOKED_set(sk, i, p)                            \
3284   ((X509_REVOKED *)sk_set(                                       \
3285       CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), (i), \
3286       CHECKED_CAST(void *, X509_REVOKED *, p)))
3287 
3288 #define sk_X509_REVOKED_free(sk) \
3289   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk))
3290 
3291 #define sk_X509_REVOKED_pop_free(sk, free_func)             \
3292   sk_pop_free(                                              \
3293       CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3294       CHECKED_CAST(void (*)(void *), void (*)(X509_REVOKED *), free_func))
3295 
3296 #define sk_X509_REVOKED_insert(sk, p, where)                      \
3297   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3298             CHECKED_CAST(void *, X509_REVOKED *, p), (where))
3299 
3300 #define sk_X509_REVOKED_delete(sk, where) \
3301   ((X509_REVOKED *)sk_delete(             \
3302       CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), (where)))
3303 
3304 #define sk_X509_REVOKED_delete_ptr(sk, p)                   \
3305   ((X509_REVOKED *)sk_delete_ptr(                           \
3306       CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3307       CHECKED_CAST(void *, X509_REVOKED *, p)))
3308 
3309 #define sk_X509_REVOKED_find(sk, out_index, p)                               \
3310   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), (out_index), \
3311           CHECKED_CAST(void *, X509_REVOKED *, p))
3312 
3313 #define sk_X509_REVOKED_shift(sk) \
3314   ((X509_REVOKED *)sk_shift(      \
3315       CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk)))
3316 
3317 #define sk_X509_REVOKED_push(sk, p)                             \
3318   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk), \
3319           CHECKED_CAST(void *, X509_REVOKED *, p))
3320 
3321 #define sk_X509_REVOKED_pop(sk) \
3322   ((X509_REVOKED *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk)))
3323 
3324 #define sk_X509_REVOKED_dup(sk)      \
3325   ((STACK_OF(X509_REVOKED) *)sk_dup( \
3326       CHECKED_CAST(_STACK *, const STACK_OF(X509_REVOKED) *, sk)))
3327 
3328 #define sk_X509_REVOKED_sort(sk) \
3329   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk))
3330 
3331 #define sk_X509_REVOKED_is_sorted(sk) \
3332   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_REVOKED) *, sk))
3333 
3334 #define sk_X509_REVOKED_set_cmp_func(sk, comp)                               \
3335   ((int (*)(const X509_REVOKED **a, const X509_REVOKED **b))sk_set_cmp_func( \
3336       CHECKED_CAST(_STACK *, STACK_OF(X509_REVOKED) *, sk),                  \
3337       CHECKED_CAST(stack_cmp_func,                                           \
3338                    int (*)(const X509_REVOKED **a, const X509_REVOKED **b),  \
3339                    comp)))
3340 
3341 #define sk_X509_REVOKED_deep_copy(sk, copy_func, free_func)              \
3342   ((STACK_OF(X509_REVOKED) *)sk_deep_copy(                               \
3343       CHECKED_CAST(const _STACK *, const STACK_OF(X509_REVOKED) *, sk),  \
3344       CHECKED_CAST(void *(*)(void *), X509_REVOKED *(*)(X509_REVOKED *), \
3345                    copy_func),                                           \
3346       CHECKED_CAST(void (*)(void *), void (*)(X509_REVOKED *), free_func)))
3347 
3348 /* X509_TRUST */
3349 #define sk_X509_TRUST_new(comp)                                            \
3350   ((STACK_OF(X509_TRUST) *)sk_new(CHECKED_CAST(                            \
3351       stack_cmp_func, int (*)(const X509_TRUST **a, const X509_TRUST **b), \
3352       comp)))
3353 
3354 #define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)sk_new_null())
3355 
3356 #define sk_X509_TRUST_num(sk) \
3357   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk))
3358 
3359 #define sk_X509_TRUST_zero(sk) \
3360   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk));
3361 
3362 #define sk_X509_TRUST_value(sk, i) \
3363   ((X509_TRUST *)sk_value(         \
3364       CHECKED_CAST(_STACK *, const STACK_OF(X509_TRUST) *, sk), (i)))
3365 
3366 #define sk_X509_TRUST_set(sk, i, p)                                         \
3367   ((X509_TRUST *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3368                         (i), CHECKED_CAST(void *, X509_TRUST *, p)))
3369 
3370 #define sk_X509_TRUST_free(sk) \
3371   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk))
3372 
3373 #define sk_X509_TRUST_pop_free(sk, free_func)             \
3374   sk_pop_free(                                            \
3375       CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3376       CHECKED_CAST(void (*)(void *), void (*)(X509_TRUST *), free_func))
3377 
3378 #define sk_X509_TRUST_insert(sk, p, where)                      \
3379   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3380             CHECKED_CAST(void *, X509_TRUST *, p), (where))
3381 
3382 #define sk_X509_TRUST_delete(sk, where)                                        \
3383   ((X509_TRUST *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3384                            (where)))
3385 
3386 #define sk_X509_TRUST_delete_ptr(sk, p)                   \
3387   ((X509_TRUST *)sk_delete_ptr(                           \
3388       CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3389       CHECKED_CAST(void *, X509_TRUST *, p)))
3390 
3391 #define sk_X509_TRUST_find(sk, out_index, p)                               \
3392   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), (out_index), \
3393           CHECKED_CAST(void *, X509_TRUST *, p))
3394 
3395 #define sk_X509_TRUST_shift(sk) \
3396   ((X509_TRUST *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk)))
3397 
3398 #define sk_X509_TRUST_push(sk, p)                             \
3399   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk), \
3400           CHECKED_CAST(void *, X509_TRUST *, p))
3401 
3402 #define sk_X509_TRUST_pop(sk) \
3403   ((X509_TRUST *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk)))
3404 
3405 #define sk_X509_TRUST_dup(sk)      \
3406   ((STACK_OF(X509_TRUST) *)sk_dup( \
3407       CHECKED_CAST(_STACK *, const STACK_OF(X509_TRUST) *, sk)))
3408 
3409 #define sk_X509_TRUST_sort(sk) \
3410   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk))
3411 
3412 #define sk_X509_TRUST_is_sorted(sk) \
3413   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_TRUST) *, sk))
3414 
3415 #define sk_X509_TRUST_set_cmp_func(sk, comp)                             \
3416   ((int (*)(const X509_TRUST **a, const X509_TRUST **b))sk_set_cmp_func( \
3417       CHECKED_CAST(_STACK *, STACK_OF(X509_TRUST) *, sk),                \
3418       CHECKED_CAST(stack_cmp_func,                                       \
3419                    int (*)(const X509_TRUST **a, const X509_TRUST **b),  \
3420                    comp)))
3421 
3422 #define sk_X509_TRUST_deep_copy(sk, copy_func, free_func)             \
3423   ((STACK_OF(X509_TRUST) *)sk_deep_copy(                              \
3424       CHECKED_CAST(const _STACK *, const STACK_OF(X509_TRUST) *, sk), \
3425       CHECKED_CAST(void *(*)(void *), X509_TRUST *(*)(X509_TRUST *),  \
3426                    copy_func),                                        \
3427       CHECKED_CAST(void (*)(void *), void (*)(X509_TRUST *), free_func)))
3428 
3429 /* X509_VERIFY_PARAM */
3430 #define sk_X509_VERIFY_PARAM_new(comp)                                   \
3431   ((STACK_OF(X509_VERIFY_PARAM) *)sk_new(CHECKED_CAST(                   \
3432       stack_cmp_func,                                                    \
3433       int (*)(const X509_VERIFY_PARAM **a, const X509_VERIFY_PARAM **b), \
3434       comp)))
3435 
3436 #define sk_X509_VERIFY_PARAM_new_null() \
3437   ((STACK_OF(X509_VERIFY_PARAM) *)sk_new_null())
3438 
3439 #define sk_X509_VERIFY_PARAM_num(sk) \
3440   sk_num(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk))
3441 
3442 #define sk_X509_VERIFY_PARAM_zero(sk) \
3443   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk));
3444 
3445 #define sk_X509_VERIFY_PARAM_value(sk, i) \
3446   ((X509_VERIFY_PARAM *)sk_value(         \
3447       CHECKED_CAST(_STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk), (i)))
3448 
3449 #define sk_X509_VERIFY_PARAM_set(sk, i, p)                            \
3450   ((X509_VERIFY_PARAM *)sk_set(                                       \
3451       CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), (i), \
3452       CHECKED_CAST(void *, X509_VERIFY_PARAM *, p)))
3453 
3454 #define sk_X509_VERIFY_PARAM_free(sk) \
3455   sk_free(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk))
3456 
3457 #define sk_X509_VERIFY_PARAM_pop_free(sk, free_func)                        \
3458   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk),    \
3459               CHECKED_CAST(void (*)(void *), void (*)(X509_VERIFY_PARAM *), \
3460                            free_func))
3461 
3462 #define sk_X509_VERIFY_PARAM_insert(sk, p, where)                      \
3463   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3464             CHECKED_CAST(void *, X509_VERIFY_PARAM *, p), (where))
3465 
3466 #define sk_X509_VERIFY_PARAM_delete(sk, where) \
3467   ((X509_VERIFY_PARAM *)sk_delete(             \
3468       CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), (where)))
3469 
3470 #define sk_X509_VERIFY_PARAM_delete_ptr(sk, p)                   \
3471   ((X509_VERIFY_PARAM *)sk_delete_ptr(                           \
3472       CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3473       CHECKED_CAST(void *, X509_VERIFY_PARAM *, p)))
3474 
3475 #define sk_X509_VERIFY_PARAM_find(sk, out_index, p)                  \
3476   sk_find(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3477           (out_index), CHECKED_CAST(void *, X509_VERIFY_PARAM *, p))
3478 
3479 #define sk_X509_VERIFY_PARAM_shift(sk) \
3480   ((X509_VERIFY_PARAM *)sk_shift(      \
3481       CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk)))
3482 
3483 #define sk_X509_VERIFY_PARAM_push(sk, p)                             \
3484   sk_push(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk), \
3485           CHECKED_CAST(void *, X509_VERIFY_PARAM *, p))
3486 
3487 #define sk_X509_VERIFY_PARAM_pop(sk) \
3488   ((X509_VERIFY_PARAM *)sk_pop(      \
3489       CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk)))
3490 
3491 #define sk_X509_VERIFY_PARAM_dup(sk)      \
3492   ((STACK_OF(X509_VERIFY_PARAM) *)sk_dup( \
3493       CHECKED_CAST(_STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk)))
3494 
3495 #define sk_X509_VERIFY_PARAM_sort(sk) \
3496   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk))
3497 
3498 #define sk_X509_VERIFY_PARAM_is_sorted(sk) \
3499   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk))
3500 
3501 #define sk_X509_VERIFY_PARAM_set_cmp_func(sk, comp)                           \
3502   ((int (*)(const X509_VERIFY_PARAM **a, const X509_VERIFY_PARAM **b))        \
3503        sk_set_cmp_func(                                                       \
3504            CHECKED_CAST(_STACK *, STACK_OF(X509_VERIFY_PARAM) *, sk),         \
3505            CHECKED_CAST(stack_cmp_func, int (*)(const X509_VERIFY_PARAM **a,  \
3506                                                 const X509_VERIFY_PARAM **b), \
3507                         comp)))
3508 
3509 #define sk_X509_VERIFY_PARAM_deep_copy(sk, copy_func, free_func)             \
3510   ((STACK_OF(X509_VERIFY_PARAM) *)sk_deep_copy(                              \
3511       CHECKED_CAST(const _STACK *, const STACK_OF(X509_VERIFY_PARAM) *, sk), \
3512       CHECKED_CAST(void *(*)(void *),                                        \
3513                    X509_VERIFY_PARAM *(*)(X509_VERIFY_PARAM *), copy_func),  \
3514       CHECKED_CAST(void (*)(void *), void (*)(X509_VERIFY_PARAM *),          \
3515                    free_func)))
3516 
3517 /* void */
3518 #define sk_void_new(comp)                \
3519   ((STACK_OF(void)*)sk_new(CHECKED_CAST( \
3520       stack_cmp_func, int (*)(const void **a, const void **b), comp)))
3521 
3522 #define sk_void_new_null() ((STACK_OF(void)*)sk_new_null())
3523 
3524 #define sk_void_num(sk) sk_num(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk))
3525 
3526 #define sk_void_zero(sk) sk_zero(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk));
3527 
3528 #define sk_void_value(sk, i) \
3529   ((void *)sk_value(CHECKED_CAST(_STACK *, const STACK_OF(void) *, sk), (i)))
3530 
3531 #define sk_void_set(sk, i, p)                                       \
3532   ((void *)sk_set(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), (i), \
3533                   CHECKED_CAST(void *, void *, p)))
3534 
3535 #define sk_void_free(sk) sk_free(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk))
3536 
3537 #define sk_void_pop_free(sk, free_func)                     \
3538   sk_pop_free(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk), \
3539               CHECKED_CAST(void (*)(void *), void (*)(void *), free_func))
3540 
3541 #define sk_void_insert(sk, p, where)                      \
3542   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk), \
3543             CHECKED_CAST(void *, void *, p), (where))
3544 
3545 #define sk_void_delete(sk, where) \
3546   ((void *)sk_delete(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), (where)))
3547 
3548 #define sk_void_delete_ptr(sk, p)                                     \
3549   ((void *)sk_delete_ptr(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk), \
3550                          CHECKED_CAST(void *, void *, p)))
3551 
3552 #define sk_void_find(sk, out_index, p)                               \
3553   sk_find(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk), (out_index), \
3554           CHECKED_CAST(void *, void *, p))
3555 
3556 #define sk_void_shift(sk) \
3557   ((void *)sk_shift(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk)))
3558 
3559 #define sk_void_push(sk, p)                             \
3560   sk_push(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk), \
3561           CHECKED_CAST(void *, void *, p))
3562 
3563 #define sk_void_pop(sk) \
3564   ((void *)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(void)*, sk)))
3565 
3566 #define sk_void_dup(sk) \
3567   ((STACK_OF(void)*)sk_dup(CHECKED_CAST(_STACK *, const STACK_OF(void) *, sk)))
3568 
3569 #define sk_void_sort(sk) sk_sort(CHECKED_CAST(_STACK *, STACK_OF(void) *, sk))
3570 
3571 #define sk_void_is_sorted(sk) \
3572   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(void) *, sk))
3573 
3574 #define sk_void_set_cmp_func(sk, comp)                                      \
3575   ((int (*)(const void **a, const void **b))sk_set_cmp_func(                \
3576       CHECKED_CAST(_STACK *, STACK_OF(void)*, sk),                          \
3577       CHECKED_CAST(stack_cmp_func, int (*)(const void **a, const void **b), \
3578                    comp)))
3579 
3580 #define sk_void_deep_copy(sk, copy_func, free_func)                  \
3581   ((STACK_OF(void)*)sk_deep_copy(                                    \
3582       CHECKED_CAST(const _STACK *, const STACK_OF(void) *, sk),      \
3583       CHECKED_CAST(void *(*)(void *), void *(*)(void *), copy_func), \
3584       CHECKED_CAST(void (*)(void *), void (*)(void *), free_func)))
3585 
3586 /* SRTP_PROTECTION_PROFILE */
3587 #define sk_SRTP_PROTECTION_PROFILE_new(comp)                            \
3588   ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_new(CHECKED_CAST(            \
3589       stack_cmp_func, int (*)(const const SRTP_PROTECTION_PROFILE **a,  \
3590                               const const SRTP_PROTECTION_PROFILE **b), \
3591       comp)))
3592 
3593 #define sk_SRTP_PROTECTION_PROFILE_new_null() \
3594   ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_new_null())
3595 
3596 #define sk_SRTP_PROTECTION_PROFILE_num(sk) \
3597   sk_num(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3598 
3599 #define sk_SRTP_PROTECTION_PROFILE_zero(sk) \
3600   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk));
3601 
3602 #define sk_SRTP_PROTECTION_PROFILE_value(sk, i)                              \
3603   ((const SRTP_PROTECTION_PROFILE *)sk_value(                                \
3604       CHECKED_CAST(_STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3605       (i)))
3606 
3607 #define sk_SRTP_PROTECTION_PROFILE_set(sk, i, p)                            \
3608   ((const SRTP_PROTECTION_PROFILE *)sk_set(                                 \
3609       CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), (i), \
3610       CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p)))
3611 
3612 #define sk_SRTP_PROTECTION_PROFILE_free(sk) \
3613   sk_free(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3614 
3615 #define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, free_func)             \
3616   sk_pop_free(                                                         \
3617       CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3618       CHECKED_CAST(void (*)(void *),                                   \
3619                    void (*)(const SRTP_PROTECTION_PROFILE *), free_func))
3620 
3621 #define sk_SRTP_PROTECTION_PROFILE_insert(sk, p, where)                      \
3622   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3623             CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p), (where))
3624 
3625 #define sk_SRTP_PROTECTION_PROFILE_delete(sk, where)                   \
3626   ((const SRTP_PROTECTION_PROFILE *)sk_delete(                         \
3627       CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3628       (where)))
3629 
3630 #define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, p)                   \
3631   ((const SRTP_PROTECTION_PROFILE *)sk_delete_ptr(                     \
3632       CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3633       CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p)))
3634 
3635 #define sk_SRTP_PROTECTION_PROFILE_find(sk, out_index, p)                  \
3636   sk_find(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3637           (out_index),                                                     \
3638           CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p))
3639 
3640 #define sk_SRTP_PROTECTION_PROFILE_shift(sk)  \
3641   ((const SRTP_PROTECTION_PROFILE *)sk_shift( \
3642       CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk)))
3643 
3644 #define sk_SRTP_PROTECTION_PROFILE_push(sk, p)                             \
3645   sk_push(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3646           CHECKED_CAST(void *, const SRTP_PROTECTION_PROFILE *, p))
3647 
3648 #define sk_SRTP_PROTECTION_PROFILE_pop(sk)  \
3649   ((const SRTP_PROTECTION_PROFILE *)sk_pop( \
3650       CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk)))
3651 
3652 #define sk_SRTP_PROTECTION_PROFILE_dup(sk)      \
3653   ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_dup( \
3654       CHECKED_CAST(_STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, sk)))
3655 
3656 #define sk_SRTP_PROTECTION_PROFILE_sort(sk) \
3657   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3658 
3659 #define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) \
3660   sk_is_sorted(                                  \
3661       CHECKED_CAST(_STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, sk))
3662 
3663 #define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, comp)                   \
3664   ((int (*)(const SRTP_PROTECTION_PROFILE **a,                              \
3665             const SRTP_PROTECTION_PROFILE **b))                             \
3666        sk_set_cmp_func(                                                     \
3667            CHECKED_CAST(_STACK *, STACK_OF(SRTP_PROTECTION_PROFILE) *, sk), \
3668            CHECKED_CAST(stack_cmp_func,                                     \
3669                         int (*)(const SRTP_PROTECTION_PROFILE **a,          \
3670                                 const SRTP_PROTECTION_PROFILE **b),         \
3671                         comp)))
3672 
3673 #define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copy_func, free_func)        \
3674   ((STACK_OF(SRTP_PROTECTION_PROFILE) *)sk_deep_copy(                         \
3675       CHECKED_CAST(const _STACK *, const STACK_OF(SRTP_PROTECTION_PROFILE) *, \
3676                    sk),                                                       \
3677       CHECKED_CAST(void *(*)(void *), const SRTP_PROTECTION_PROFILE *(*)(     \
3678                                           const SRTP_PROTECTION_PROFILE *),   \
3679                    copy_func),                                                \
3680       CHECKED_CAST(void (*)(void *),                                          \
3681                    void (*)(const SRTP_PROTECTION_PROFILE *), free_func)))
3682 
3683 /* SSL_CIPHER */
3684 #define sk_SSL_CIPHER_new(comp)                 \
3685   ((STACK_OF(SSL_CIPHER) *)sk_new(CHECKED_CAST( \
3686       stack_cmp_func,                           \
3687       int (*)(const const SSL_CIPHER **a, const const SSL_CIPHER **b), comp)))
3688 
3689 #define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)sk_new_null())
3690 
3691 #define sk_SSL_CIPHER_num(sk) \
3692   sk_num(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk))
3693 
3694 #define sk_SSL_CIPHER_zero(sk) \
3695   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk));
3696 
3697 #define sk_SSL_CIPHER_value(sk, i) \
3698   ((const SSL_CIPHER *)sk_value(   \
3699       CHECKED_CAST(_STACK *, const STACK_OF(SSL_CIPHER) *, sk), (i)))
3700 
3701 #define sk_SSL_CIPHER_set(sk, i, p)                            \
3702   ((const SSL_CIPHER *)sk_set(                                 \
3703       CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), (i), \
3704       CHECKED_CAST(void *, const SSL_CIPHER *, p)))
3705 
3706 #define sk_SSL_CIPHER_free(sk) \
3707   sk_free(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk))
3708 
3709 #define sk_SSL_CIPHER_pop_free(sk, free_func)             \
3710   sk_pop_free(                                            \
3711       CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3712       CHECKED_CAST(void (*)(void *), void (*)(const SSL_CIPHER *), free_func))
3713 
3714 #define sk_SSL_CIPHER_insert(sk, p, where)                      \
3715   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3716             CHECKED_CAST(void *, const SSL_CIPHER *, p), (where))
3717 
3718 #define sk_SSL_CIPHER_delete(sk, where) \
3719   ((const SSL_CIPHER *)sk_delete(       \
3720       CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), (where)))
3721 
3722 #define sk_SSL_CIPHER_delete_ptr(sk, p)                   \
3723   ((const SSL_CIPHER *)sk_delete_ptr(                     \
3724       CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3725       CHECKED_CAST(void *, const SSL_CIPHER *, p)))
3726 
3727 #define sk_SSL_CIPHER_find(sk, out_index, p)                               \
3728   sk_find(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), (out_index), \
3729           CHECKED_CAST(void *, const SSL_CIPHER *, p))
3730 
3731 #define sk_SSL_CIPHER_shift(sk)  \
3732   ((const SSL_CIPHER *)sk_shift( \
3733       CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk)))
3734 
3735 #define sk_SSL_CIPHER_push(sk, p)                             \
3736   sk_push(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk), \
3737           CHECKED_CAST(void *, const SSL_CIPHER *, p))
3738 
3739 #define sk_SSL_CIPHER_pop(sk)  \
3740   ((const SSL_CIPHER *)sk_pop( \
3741       CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk)))
3742 
3743 #define sk_SSL_CIPHER_dup(sk)      \
3744   ((STACK_OF(SSL_CIPHER) *)sk_dup( \
3745       CHECKED_CAST(_STACK *, const STACK_OF(SSL_CIPHER) *, sk)))
3746 
3747 #define sk_SSL_CIPHER_sort(sk) \
3748   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk))
3749 
3750 #define sk_SSL_CIPHER_is_sorted(sk) \
3751   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(SSL_CIPHER) *, sk))
3752 
3753 #define sk_SSL_CIPHER_set_cmp_func(sk, comp)                             \
3754   ((int (*)(const SSL_CIPHER **a, const SSL_CIPHER **b))sk_set_cmp_func( \
3755       CHECKED_CAST(_STACK *, STACK_OF(SSL_CIPHER) *, sk),                \
3756       CHECKED_CAST(stack_cmp_func,                                       \
3757                    int (*)(const SSL_CIPHER **a, const SSL_CIPHER **b),  \
3758                    comp)))
3759 
3760 #define sk_SSL_CIPHER_deep_copy(sk, copy_func, free_func)                 \
3761   ((STACK_OF(SSL_CIPHER) *)sk_deep_copy(                                  \
3762       CHECKED_CAST(const _STACK *, const STACK_OF(SSL_CIPHER) *, sk),     \
3763       CHECKED_CAST(void *(*)(void *),                                     \
3764                    const SSL_CIPHER *(*)(const SSL_CIPHER *), copy_func), \
3765       CHECKED_CAST(void (*)(void *), void (*)(const SSL_CIPHER *),        \
3766                    free_func)))
3767 
3768 /* OPENSSL_STRING */
3769 #define sk_OPENSSL_STRING_new(comp)                 \
3770   ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_CAST( \
3771       stack_cmp_func,                               \
3772       int (*)(const OPENSSL_STRING *a, const OPENSSL_STRING *b), comp)))
3773 
3774 #define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null())
3775 
3776 #define sk_OPENSSL_STRING_num(sk) \
3777   sk_num(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk))
3778 
3779 #define sk_OPENSSL_STRING_zero(sk) \
3780   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk));
3781 
3782 #define sk_OPENSSL_STRING_value(sk, i) \
3783   ((OPENSSL_STRING)sk_value(           \
3784       CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_STRING) *, sk), (i)))
3785 
3786 #define sk_OPENSSL_STRING_set(sk, i, p)                            \
3787   ((OPENSSL_STRING)sk_set(                                         \
3788       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), (i), \
3789       CHECKED_CAST(void *, OPENSSL_STRING, p)))
3790 
3791 #define sk_OPENSSL_STRING_free(sk) \
3792   sk_free(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk))
3793 
3794 #define sk_OPENSSL_STRING_pop_free(sk, free_func)             \
3795   sk_pop_free(                                                \
3796       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3797       CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_STRING), free_func))
3798 
3799 #define sk_OPENSSL_STRING_insert(sk, p, where)                      \
3800   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3801             CHECKED_CAST(void *, OPENSSL_STRING, p), (where))
3802 
3803 #define sk_OPENSSL_STRING_delete(sk, where) \
3804   ((OPENSSL_STRING)sk_delete(               \
3805       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), (where)))
3806 
3807 #define sk_OPENSSL_STRING_delete_ptr(sk, p)                   \
3808   ((OPENSSL_STRING)sk_delete_ptr(                             \
3809       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3810       CHECKED_CAST(void *, OPENSSL_STRING, p)))
3811 
3812 #define sk_OPENSSL_STRING_find(sk, out_index, p)                               \
3813   sk_find(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), (out_index), \
3814           CHECKED_CAST(void *, OPENSSL_STRING, p))
3815 
3816 #define sk_OPENSSL_STRING_shift(sk) \
3817   ((OPENSSL_STRING)sk_shift(        \
3818       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk)))
3819 
3820 #define sk_OPENSSL_STRING_push(sk, p)                             \
3821   sk_push(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk), \
3822           CHECKED_CAST(void *, OPENSSL_STRING, p))
3823 
3824 #define sk_OPENSSL_STRING_pop(sk) \
3825   ((OPENSSL_STRING)sk_pop(        \
3826       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk)))
3827 
3828 #define sk_OPENSSL_STRING_dup(sk)      \
3829   ((STACK_OF(OPENSSL_STRING) *)sk_dup( \
3830       CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_STRING) *, sk)))
3831 
3832 #define sk_OPENSSL_STRING_sort(sk) \
3833   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk))
3834 
3835 #define sk_OPENSSL_STRING_is_sorted(sk) \
3836   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_STRING) *, sk))
3837 
3838 #define sk_OPENSSL_STRING_set_cmp_func(sk, comp)                           \
3839   ((int (*)(const OPENSSL_STRING **a, const OPENSSL_STRING **b))           \
3840        sk_set_cmp_func(                                                    \
3841            CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_STRING) *, sk),         \
3842            CHECKED_CAST(stack_cmp_func, int (*)(const OPENSSL_STRING **a,  \
3843                                                 const OPENSSL_STRING **b), \
3844                         comp)))
3845 
3846 #define sk_OPENSSL_STRING_deep_copy(sk, copy_func, free_func)             \
3847   ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(                              \
3848       CHECKED_CAST(const _STACK *, const STACK_OF(OPENSSL_STRING) *, sk), \
3849       CHECKED_CAST(void *(*)(void *), OPENSSL_STRING (*)(OPENSSL_STRING), \
3850                    copy_func),                                            \
3851       CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_STRING), free_func)))
3852 
3853 /* OPENSSL_BLOCK */
3854 #define sk_OPENSSL_BLOCK_new(comp)                                             \
3855   ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_CAST(                             \
3856       stack_cmp_func, int (*)(const OPENSSL_BLOCK *a, const OPENSSL_BLOCK *b), \
3857       comp)))
3858 
3859 #define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null())
3860 
3861 #define sk_OPENSSL_BLOCK_num(sk) \
3862   sk_num(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk))
3863 
3864 #define sk_OPENSSL_BLOCK_zero(sk) \
3865   sk_zero(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk));
3866 
3867 #define sk_OPENSSL_BLOCK_value(sk, i) \
3868   ((OPENSSL_BLOCK)sk_value(           \
3869       CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk), (i)))
3870 
3871 #define sk_OPENSSL_BLOCK_set(sk, i, p)                            \
3872   ((OPENSSL_BLOCK)sk_set(                                         \
3873       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), (i), \
3874       CHECKED_CAST(void *, OPENSSL_BLOCK, p)))
3875 
3876 #define sk_OPENSSL_BLOCK_free(sk) \
3877   sk_free(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk))
3878 
3879 #define sk_OPENSSL_BLOCK_pop_free(sk, free_func)             \
3880   sk_pop_free(                                               \
3881       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3882       CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_BLOCK), free_func))
3883 
3884 #define sk_OPENSSL_BLOCK_insert(sk, p, where)                      \
3885   sk_insert(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3886             CHECKED_CAST(void *, OPENSSL_BLOCK, p), (where))
3887 
3888 #define sk_OPENSSL_BLOCK_delete(sk, where) \
3889   ((OPENSSL_BLOCK)sk_delete(               \
3890       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), (where)))
3891 
3892 #define sk_OPENSSL_BLOCK_delete_ptr(sk, p)                   \
3893   ((OPENSSL_BLOCK)sk_delete_ptr(                             \
3894       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3895       CHECKED_CAST(void *, OPENSSL_BLOCK, p)))
3896 
3897 #define sk_OPENSSL_BLOCK_find(sk, out_index, p)                               \
3898   sk_find(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), (out_index), \
3899           CHECKED_CAST(void *, OPENSSL_BLOCK, p))
3900 
3901 #define sk_OPENSSL_BLOCK_shift(sk) \
3902   ((OPENSSL_BLOCK)sk_shift(        \
3903       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk)))
3904 
3905 #define sk_OPENSSL_BLOCK_push(sk, p)                             \
3906   sk_push(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk), \
3907           CHECKED_CAST(void *, OPENSSL_BLOCK, p))
3908 
3909 #define sk_OPENSSL_BLOCK_pop(sk) \
3910   ((OPENSSL_BLOCK)sk_pop(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk)))
3911 
3912 #define sk_OPENSSL_BLOCK_dup(sk)      \
3913   ((STACK_OF(OPENSSL_BLOCK) *)sk_dup( \
3914       CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk)))
3915 
3916 #define sk_OPENSSL_BLOCK_sort(sk) \
3917   sk_sort(CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk))
3918 
3919 #define sk_OPENSSL_BLOCK_is_sorted(sk) \
3920   sk_is_sorted(CHECKED_CAST(_STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk))
3921 
3922 #define sk_OPENSSL_BLOCK_set_cmp_func(sk, comp)                                \
3923   ((int (*)(const OPENSSL_BLOCK **a, const OPENSSL_BLOCK **b))sk_set_cmp_func( \
3924       CHECKED_CAST(_STACK *, STACK_OF(OPENSSL_BLOCK) *, sk),                   \
3925       CHECKED_CAST(stack_cmp_func,                                             \
3926                    int (*)(const OPENSSL_BLOCK **a, const OPENSSL_BLOCK **b),  \
3927                    comp)))
3928 
3929 #define sk_OPENSSL_BLOCK_deep_copy(sk, copy_func, free_func)             \
3930   ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(                              \
3931       CHECKED_CAST(const _STACK *, const STACK_OF(OPENSSL_BLOCK) *, sk), \
3932       CHECKED_CAST(void *(*)(void *), OPENSSL_BLOCK (*)(OPENSSL_BLOCK),  \
3933                    copy_func),                                           \
3934       CHECKED_CAST(void (*)(void *), void (*)(OPENSSL_BLOCK), free_func)))
3935