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