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