File indexing completed on 2026-09-14 09:16:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef OPENSSL_ASN1_H
0018 #define OPENSSL_ASN1_H
0019 #pragma once
0020
0021 #include <openssl/macros.h>
0022 #ifndef OPENSSL_NO_DEPRECATED_3_0
0023 #define HEADER_ASN1_H
0024 #endif
0025
0026 #ifndef OPENSSL_NO_STDIO
0027 #include <stdio.h>
0028 #endif
0029 #include <time.h>
0030 #include <openssl/e_os2.h>
0031 #include <openssl/opensslconf.h>
0032 #include <openssl/bio.h>
0033 #include <openssl/safestack.h>
0034 #include <openssl/asn1err.h>
0035 #include <openssl/symhacks.h>
0036
0037 #include <openssl/types.h>
0038 #include <openssl/bn.h>
0039
0040 #ifdef OPENSSL_BUILD_SHLIBCRYPTO
0041 #undef OPENSSL_EXTERN
0042 #define OPENSSL_EXTERN OPENSSL_EXPORT
0043 #endif
0044
0045 #ifdef __cplusplus
0046 extern "C" {
0047 #endif
0048
0049 #define V_ASN1_UNIVERSAL 0x00
0050 #define V_ASN1_APPLICATION 0x40
0051 #define V_ASN1_CONTEXT_SPECIFIC 0x80
0052 #define V_ASN1_PRIVATE 0xc0
0053
0054 #define V_ASN1_CONSTRUCTED 0x20
0055 #define V_ASN1_PRIMITIVE_TAG 0x1f
0056 #define V_ASN1_PRIMATIVE_TAG V_ASN1_PRIMITIVE_TAG
0057
0058 #define V_ASN1_APP_CHOOSE -2
0059 #define V_ASN1_OTHER -3
0060 #define V_ASN1_ANY -4
0061
0062 #define V_ASN1_UNDEF -1
0063
0064 #define V_ASN1_EOC 0
0065 #define V_ASN1_BOOLEAN 1
0066 #define V_ASN1_INTEGER 2
0067 #define V_ASN1_BIT_STRING 3
0068 #define V_ASN1_OCTET_STRING 4
0069 #define V_ASN1_NULL 5
0070 #define V_ASN1_OBJECT 6
0071 #define V_ASN1_OBJECT_DESCRIPTOR 7
0072 #define V_ASN1_EXTERNAL 8
0073 #define V_ASN1_REAL 9
0074 #define V_ASN1_ENUMERATED 10
0075 #define V_ASN1_UTF8STRING 12
0076 #define V_ASN1_SEQUENCE 16
0077 #define V_ASN1_SET 17
0078 #define V_ASN1_NUMERICSTRING 18
0079 #define V_ASN1_PRINTABLESTRING 19
0080 #define V_ASN1_T61STRING 20
0081 #define V_ASN1_TELETEXSTRING 20
0082 #define V_ASN1_VIDEOTEXSTRING 21
0083 #define V_ASN1_IA5STRING 22
0084 #define V_ASN1_UTCTIME 23
0085 #define V_ASN1_GENERALIZEDTIME 24
0086 #define V_ASN1_GRAPHICSTRING 25
0087 #define V_ASN1_ISO64STRING 26
0088 #define V_ASN1_VISIBLESTRING 26
0089 #define V_ASN1_GENERALSTRING 27
0090 #define V_ASN1_UNIVERSALSTRING 28
0091 #define V_ASN1_BMPSTRING 30
0092
0093
0094
0095
0096
0097
0098
0099 #define V_ASN1_NEG 0x100
0100 #define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG)
0101 #define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG)
0102
0103
0104 #define B_ASN1_NUMERICSTRING 0x0001
0105 #define B_ASN1_PRINTABLESTRING 0x0002
0106 #define B_ASN1_T61STRING 0x0004
0107 #define B_ASN1_TELETEXSTRING 0x0004
0108 #define B_ASN1_VIDEOTEXSTRING 0x0008
0109 #define B_ASN1_IA5STRING 0x0010
0110 #define B_ASN1_GRAPHICSTRING 0x0020
0111 #define B_ASN1_ISO64STRING 0x0040
0112 #define B_ASN1_VISIBLESTRING 0x0040
0113 #define B_ASN1_GENERALSTRING 0x0080
0114 #define B_ASN1_UNIVERSALSTRING 0x0100
0115 #define B_ASN1_OCTET_STRING 0x0200
0116 #define B_ASN1_BIT_STRING 0x0400
0117 #define B_ASN1_BMPSTRING 0x0800
0118 #define B_ASN1_UNKNOWN 0x1000
0119 #define B_ASN1_UTF8STRING 0x2000
0120 #define B_ASN1_UTCTIME 0x4000
0121 #define B_ASN1_GENERALIZEDTIME 0x8000
0122 #define B_ASN1_SEQUENCE 0x10000
0123
0124 #define MBSTRING_FLAG 0x1000
0125 #define MBSTRING_UTF8 (MBSTRING_FLAG)
0126 #define MBSTRING_ASC (MBSTRING_FLAG | 1)
0127 #define MBSTRING_BMP (MBSTRING_FLAG | 2)
0128 #define MBSTRING_UNIV (MBSTRING_FLAG | 4)
0129 #define SMIME_OLDMIME 0x400
0130 #define SMIME_CRLFEOL 0x800
0131 #define SMIME_STREAM 0x1000
0132
0133
0134
0135 SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR)
0136 #define sk_X509_ALGOR_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ALGOR_sk_type(sk))
0137 #define sk_X509_ALGOR_value(sk, idx) ((X509_ALGOR *)OPENSSL_sk_value(ossl_check_const_X509_ALGOR_sk_type(sk), (idx)))
0138 #define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp)))
0139 #define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_null())
0140 #define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n)))
0141 #define sk_X509_ALGOR_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ALGOR_sk_type(sk), (n))
0142 #define sk_X509_ALGOR_free(sk) OPENSSL_sk_free(ossl_check_X509_ALGOR_sk_type(sk))
0143 #define sk_X509_ALGOR_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ALGOR_sk_type(sk))
0144 #define sk_X509_ALGOR_delete(sk, i) ((X509_ALGOR *)OPENSSL_sk_delete(ossl_check_X509_ALGOR_sk_type(sk), (i)))
0145 #define sk_X509_ALGOR_delete_ptr(sk, ptr) ((X509_ALGOR *)OPENSSL_sk_delete_ptr(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)))
0146 #define sk_X509_ALGOR_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))
0147 #define sk_X509_ALGOR_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))
0148 #define sk_X509_ALGOR_pop(sk) ((X509_ALGOR *)OPENSSL_sk_pop(ossl_check_X509_ALGOR_sk_type(sk)))
0149 #define sk_X509_ALGOR_shift(sk) ((X509_ALGOR *)OPENSSL_sk_shift(ossl_check_X509_ALGOR_sk_type(sk)))
0150 #define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_freefunc_type(freefunc))
0151 #define sk_X509_ALGOR_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), (idx))
0152 #define sk_X509_ALGOR_set(sk, idx, ptr) ((X509_ALGOR *)OPENSSL_sk_set(ossl_check_X509_ALGOR_sk_type(sk), (idx), ossl_check_X509_ALGOR_type(ptr)))
0153 #define sk_X509_ALGOR_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))
0154 #define sk_X509_ALGOR_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))
0155 #define sk_X509_ALGOR_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), pnum)
0156 #define sk_X509_ALGOR_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ALGOR_sk_type(sk))
0157 #define sk_X509_ALGOR_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ALGOR_sk_type(sk))
0158 #define sk_X509_ALGOR_dup(sk) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_dup(ossl_check_const_X509_ALGOR_sk_type(sk)))
0159 #define sk_X509_ALGOR_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_copyfunc_type(copyfunc), ossl_check_X509_ALGOR_freefunc_type(freefunc)))
0160 #define sk_X509_ALGOR_set_cmp_func(sk, cmp) ((sk_X509_ALGOR_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_compfunc_type(cmp)))
0161
0162
0163
0164 #define ASN1_STRING_FLAG_BITS_LEFT 0x08
0165
0166
0167
0168
0169
0170 #define ASN1_STRING_FLAG_NDEF 0x010
0171
0172
0173
0174
0175
0176
0177
0178 #define ASN1_STRING_FLAG_CONT 0x020
0179
0180
0181
0182
0183 #define ASN1_STRING_FLAG_MSTRING 0x040
0184
0185 #define ASN1_STRING_FLAG_EMBED 0x080
0186
0187 #define ASN1_STRING_FLAG_X509_TIME 0x100
0188
0189 struct asn1_string_st {
0190 int length;
0191 int type;
0192 unsigned char *data;
0193
0194
0195
0196
0197
0198 long flags;
0199 };
0200
0201
0202
0203
0204
0205
0206
0207 typedef struct ASN1_ENCODING_st {
0208 unsigned char *enc;
0209 long len;
0210 int modified;
0211 } ASN1_ENCODING;
0212
0213
0214 #define ASN1_LONG_UNDEF 0x7fffffffL
0215
0216 #define STABLE_FLAGS_MALLOC 0x01
0217
0218
0219
0220
0221
0222
0223 #define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC
0224 #define STABLE_NO_MASK 0x02
0225 #define DIRSTRING_TYPE \
0226 (B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_BMPSTRING | B_ASN1_UTF8STRING)
0227 #define PKCS9STRING_TYPE (DIRSTRING_TYPE | B_ASN1_IA5STRING)
0228
0229 struct asn1_string_table_st {
0230 int nid;
0231 long minsize;
0232 long maxsize;
0233 unsigned long mask;
0234 unsigned long flags;
0235 };
0236
0237
0238 SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_TABLE)
0239 #define sk_ASN1_STRING_TABLE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk))
0240 #define sk_ASN1_STRING_TABLE_value(sk, idx) ((ASN1_STRING_TABLE *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), (idx)))
0241 #define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp)))
0242 #define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_null())
0243 #define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n)))
0244 #define sk_ASN1_STRING_TABLE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (n))
0245 #define sk_ASN1_STRING_TABLE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk))
0246 #define sk_ASN1_STRING_TABLE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_TABLE_sk_type(sk))
0247 #define sk_ASN1_STRING_TABLE_delete(sk, i) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (i)))
0248 #define sk_ASN1_STRING_TABLE_delete_ptr(sk, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)))
0249 #define sk_ASN1_STRING_TABLE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))
0250 #define sk_ASN1_STRING_TABLE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))
0251 #define sk_ASN1_STRING_TABLE_pop(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_TABLE_sk_type(sk)))
0252 #define sk_ASN1_STRING_TABLE_shift(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_TABLE_sk_type(sk)))
0253 #define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc))
0254 #define sk_ASN1_STRING_TABLE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), (idx))
0255 #define sk_ASN1_STRING_TABLE_set(sk, idx, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_set(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (idx), ossl_check_ASN1_STRING_TABLE_type(ptr)))
0256 #define sk_ASN1_STRING_TABLE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))
0257 #define sk_ASN1_STRING_TABLE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))
0258 #define sk_ASN1_STRING_TABLE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), pnum)
0259 #define sk_ASN1_STRING_TABLE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_TABLE_sk_type(sk))
0260 #define sk_ASN1_STRING_TABLE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk))
0261 #define sk_ASN1_STRING_TABLE_dup(sk) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)))
0262 #define sk_ASN1_STRING_TABLE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)))
0263 #define sk_ASN1_STRING_TABLE_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_TABLE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp)))
0264
0265
0266
0267
0268
0269 #define ub_name 32768
0270 #define ub_common_name 64
0271 #define ub_locality_name 128
0272 #define ub_state_name 128
0273 #define ub_organization_name 64
0274 #define ub_organization_unit_name 64
0275 #define ub_title 64
0276 #define ub_email_address 128
0277
0278
0279
0280
0281 typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE;
0282 typedef struct ASN1_TLC_st ASN1_TLC;
0283
0284 typedef struct ASN1_VALUE_st ASN1_VALUE;
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294 #define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \
0295 DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type)
0296 #define DECLARE_ASN1_FUNCTIONS(type) \
0297 DECLARE_ASN1_FUNCTIONS_attr(extern, type)
0298
0299 #define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \
0300 DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type)
0301 #define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \
0302 DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type)
0303
0304 #define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \
0305 DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \
0306 DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name)
0307 #define DECLARE_ASN1_FUNCTIONS_name(type, name) \
0308 DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name)
0309
0310 #define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \
0311 DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \
0312 DECLARE_ASN1_ITEM_attr(attr, itname)
0313 #define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \
0314 DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name)
0315
0316 #define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \
0317 DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name)
0318 #define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \
0319 DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name)
0320
0321 #define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \
0322 attr type *d2i_##name(type **a, const unsigned char **in, long len); \
0323 attr int i2d_##name(const type *a, unsigned char **out);
0324 #define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \
0325 DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name)
0326
0327 #define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \
0328 attr int i2d_##name##_NDEF(const name *a, unsigned char **out);
0329 #define DECLARE_ASN1_NDEF_FUNCTION(name) \
0330 DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name)
0331
0332 #define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \
0333 attr type *name##_new(void); \
0334 attr void name##_free(type *a);
0335 #define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \
0336 DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name)
0337
0338 #define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \
0339 DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type)
0340 #define DECLARE_ASN1_DUP_FUNCTION(type) \
0341 DECLARE_ASN1_DUP_FUNCTION_attr(extern, type)
0342
0343 #define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \
0344 attr type *name##_dup(const type *a);
0345 #define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \
0346 DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name)
0347
0348 #define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \
0349 DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname)
0350 #define DECLARE_ASN1_PRINT_FUNCTION(stname) \
0351 DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname)
0352
0353 #define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \
0354 attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \
0355 const ASN1_PCTX *pctx);
0356 #define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \
0357 DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname)
0358
0359 #define D2I_OF(type) type *(*)(type **, const unsigned char **, long)
0360 #define I2D_OF(type) int (*)(const type *, unsigned char **)
0361
0362 #define CHECKED_D2I_OF(type, d2i) \
0363 ((d2i_of_void *)(1 ? d2i : ((D2I_OF(type))0)))
0364 #define CHECKED_I2D_OF(type, i2d) \
0365 ((i2d_of_void *)(1 ? i2d : ((I2D_OF(type))0)))
0366 #define CHECKED_NEW_OF(type, xnew) \
0367 ((void *(*)(void))(1 ? xnew : ((type * (*)(void))0)))
0368 #define CHECKED_PTR_OF(type, p) \
0369 ((void *)(1 ? p : (type *)0))
0370 #define CHECKED_PPTR_OF(type, p) \
0371 ((void **)(1 ? p : (type **)0))
0372
0373 #define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **, const unsigned char **, long)
0374 #define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *, unsigned char **)
0375 #define TYPEDEF_D2I2D_OF(type) \
0376 TYPEDEF_D2I_OF(type); \
0377 TYPEDEF_I2D_OF(type)
0378
0379 typedef void *d2i_of_void(void **, const unsigned char **, long);
0380 typedef int i2d_of_void(const void *, unsigned char **);
0381 typedef int OSSL_i2d_of_void_ctx(const void *, unsigned char **, void *vctx);
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425 typedef const ASN1_ITEM *ASN1_ITEM_EXP(void);
0426
0427
0428 #define ASN1_ITEM_ptr(iptr) (iptr())
0429
0430
0431 #define ASN1_ITEM_ref(iptr) (iptr##_it)
0432
0433 #define ASN1_ITEM_rptr(ref) (ref##_it())
0434
0435 #define DECLARE_ASN1_ITEM_attr(attr, name) \
0436 attr const ASN1_ITEM *name##_it(void);
0437 #define DECLARE_ASN1_ITEM(name) \
0438 DECLARE_ASN1_ITEM_attr(extern, name)
0439
0440
0441
0442
0443
0444
0445
0446
0447 #define ASN1_STRFLGS_ESC_2253 1
0448 #define ASN1_STRFLGS_ESC_CTRL 2
0449 #define ASN1_STRFLGS_ESC_MSB 4
0450
0451
0452 #define ASN1_DTFLGS_TYPE_MASK 0x0FUL
0453 #define ASN1_DTFLGS_RFC822 0x00UL
0454 #define ASN1_DTFLGS_ISO8601 0x01UL
0455
0456
0457
0458
0459
0460
0461 #define ASN1_STRFLGS_ESC_QUOTE 8
0462
0463
0464
0465
0466 #define CHARTYPE_PRINTABLESTRING 0x10
0467
0468 #define CHARTYPE_FIRST_ESC_2253 0x20
0469
0470 #define CHARTYPE_LAST_ESC_2253 0x40
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481 #define ASN1_STRFLGS_UTF8_CONVERT 0x10
0482
0483
0484
0485
0486
0487
0488
0489 #define ASN1_STRFLGS_IGNORE_TYPE 0x20
0490
0491
0492 #define ASN1_STRFLGS_SHOW_TYPE 0x40
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502 #define ASN1_STRFLGS_DUMP_ALL 0x80
0503 #define ASN1_STRFLGS_DUMP_UNKNOWN 0x100
0504
0505
0506
0507
0508
0509
0510 #define ASN1_STRFLGS_DUMP_DER 0x200
0511
0512
0513
0514
0515 #define ASN1_STRFLGS_ESC_2254 0x400
0516
0517
0518
0519
0520
0521
0522 #define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB | ASN1_STRFLGS_UTF8_CONVERT | ASN1_STRFLGS_DUMP_UNKNOWN | ASN1_STRFLGS_DUMP_DER)
0523
0524 struct asn1_type_st {
0525 int type;
0526 union {
0527 char *ptr;
0528 ASN1_BOOLEAN boolean;
0529 ASN1_STRING *asn1_string;
0530 ASN1_OBJECT *object;
0531 ASN1_INTEGER *integer;
0532 ASN1_ENUMERATED *enumerated;
0533 ASN1_BIT_STRING *bit_string;
0534 ASN1_OCTET_STRING *octet_string;
0535 ASN1_PRINTABLESTRING *printablestring;
0536 ASN1_T61STRING *t61string;
0537 ASN1_IA5STRING *ia5string;
0538 ASN1_GENERALSTRING *generalstring;
0539 ASN1_BMPSTRING *bmpstring;
0540 ASN1_UNIVERSALSTRING *universalstring;
0541 ASN1_UTCTIME *utctime;
0542 ASN1_GENERALIZEDTIME *generalizedtime;
0543 ASN1_VISIBLESTRING *visiblestring;
0544 ASN1_UTF8STRING *utf8string;
0545
0546
0547
0548
0549 ASN1_STRING *set;
0550 ASN1_STRING *sequence;
0551 ASN1_VALUE *asn1_value;
0552 } value;
0553 };
0554
0555
0556 SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE)
0557 #define sk_ASN1_TYPE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_TYPE_sk_type(sk))
0558 #define sk_ASN1_TYPE_value(sk, idx) ((ASN1_TYPE *)OPENSSL_sk_value(ossl_check_const_ASN1_TYPE_sk_type(sk), (idx)))
0559 #define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp)))
0560 #define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_null())
0561 #define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n)))
0562 #define sk_ASN1_TYPE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_TYPE_sk_type(sk), (n))
0563 #define sk_ASN1_TYPE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_TYPE_sk_type(sk))
0564 #define sk_ASN1_TYPE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_TYPE_sk_type(sk))
0565 #define sk_ASN1_TYPE_delete(sk, i) ((ASN1_TYPE *)OPENSSL_sk_delete(ossl_check_ASN1_TYPE_sk_type(sk), (i)))
0566 #define sk_ASN1_TYPE_delete_ptr(sk, ptr) ((ASN1_TYPE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)))
0567 #define sk_ASN1_TYPE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))
0568 #define sk_ASN1_TYPE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))
0569 #define sk_ASN1_TYPE_pop(sk) ((ASN1_TYPE *)OPENSSL_sk_pop(ossl_check_ASN1_TYPE_sk_type(sk)))
0570 #define sk_ASN1_TYPE_shift(sk) ((ASN1_TYPE *)OPENSSL_sk_shift(ossl_check_ASN1_TYPE_sk_type(sk)))
0571 #define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_freefunc_type(freefunc))
0572 #define sk_ASN1_TYPE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), (idx))
0573 #define sk_ASN1_TYPE_set(sk, idx, ptr) ((ASN1_TYPE *)OPENSSL_sk_set(ossl_check_ASN1_TYPE_sk_type(sk), (idx), ossl_check_ASN1_TYPE_type(ptr)))
0574 #define sk_ASN1_TYPE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))
0575 #define sk_ASN1_TYPE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))
0576 #define sk_ASN1_TYPE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), pnum)
0577 #define sk_ASN1_TYPE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_TYPE_sk_type(sk))
0578 #define sk_ASN1_TYPE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_TYPE_sk_type(sk))
0579 #define sk_ASN1_TYPE_dup(sk) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_TYPE_sk_type(sk)))
0580 #define sk_ASN1_TYPE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_copyfunc_type(copyfunc), ossl_check_ASN1_TYPE_freefunc_type(freefunc)))
0581 #define sk_ASN1_TYPE_set_cmp_func(sk, cmp) ((sk_ASN1_TYPE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_compfunc_type(cmp)))
0582
0583
0584
0585 typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY;
0586
0587 DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY)
0588 DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY)
0589
0590
0591 typedef struct BIT_STRING_BITNAME_st {
0592 int bitnum;
0593 const char *lname;
0594 const char *sname;
0595 } BIT_STRING_BITNAME;
0596
0597 #define B_ASN1_TIME \
0598 B_ASN1_UTCTIME | B_ASN1_GENERALIZEDTIME
0599
0600 #define B_ASN1_PRINTABLE \
0601 B_ASN1_NUMERICSTRING | B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING | B_ASN1_BIT_STRING | B_ASN1_UNIVERSALSTRING | B_ASN1_BMPSTRING | B_ASN1_UTF8STRING | B_ASN1_SEQUENCE | B_ASN1_UNKNOWN
0602
0603 #define B_ASN1_DIRECTORYSTRING \
0604 B_ASN1_PRINTABLESTRING | B_ASN1_TELETEXSTRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING | B_ASN1_UTF8STRING
0605
0606 #define B_ASN1_DISPLAYTEXT \
0607 B_ASN1_IA5STRING | B_ASN1_VISIBLESTRING | B_ASN1_BMPSTRING | B_ASN1_UTF8STRING
0608
0609 DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE)
0610 DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE)
0611
0612 int ASN1_TYPE_get(const ASN1_TYPE *a);
0613 void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
0614 int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value);
0615 int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b);
0616
0617 ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t);
0618 void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t);
0619
0620
0621 SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT)
0622 #define sk_ASN1_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_OBJECT_sk_type(sk))
0623 #define sk_ASN1_OBJECT_value(sk, idx) ((ASN1_OBJECT *)OPENSSL_sk_value(ossl_check_const_ASN1_OBJECT_sk_type(sk), (idx)))
0624 #define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp)))
0625 #define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_null())
0626 #define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n)))
0627 #define sk_ASN1_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_OBJECT_sk_type(sk), (n))
0628 #define sk_ASN1_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_ASN1_OBJECT_sk_type(sk))
0629 #define sk_ASN1_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_OBJECT_sk_type(sk))
0630 #define sk_ASN1_OBJECT_delete(sk, i) ((ASN1_OBJECT *)OPENSSL_sk_delete(ossl_check_ASN1_OBJECT_sk_type(sk), (i)))
0631 #define sk_ASN1_OBJECT_delete_ptr(sk, ptr) ((ASN1_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)))
0632 #define sk_ASN1_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))
0633 #define sk_ASN1_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))
0634 #define sk_ASN1_OBJECT_pop(sk) ((ASN1_OBJECT *)OPENSSL_sk_pop(ossl_check_ASN1_OBJECT_sk_type(sk)))
0635 #define sk_ASN1_OBJECT_shift(sk) ((ASN1_OBJECT *)OPENSSL_sk_shift(ossl_check_ASN1_OBJECT_sk_type(sk)))
0636 #define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_freefunc_type(freefunc))
0637 #define sk_ASN1_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), (idx))
0638 #define sk_ASN1_OBJECT_set(sk, idx, ptr) ((ASN1_OBJECT *)OPENSSL_sk_set(ossl_check_ASN1_OBJECT_sk_type(sk), (idx), ossl_check_ASN1_OBJECT_type(ptr)))
0639 #define sk_ASN1_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))
0640 #define sk_ASN1_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))
0641 #define sk_ASN1_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), pnum)
0642 #define sk_ASN1_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_OBJECT_sk_type(sk))
0643 #define sk_ASN1_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_OBJECT_sk_type(sk))
0644 #define sk_ASN1_OBJECT_dup(sk) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_ASN1_OBJECT_sk_type(sk)))
0645 #define sk_ASN1_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_copyfunc_type(copyfunc), ossl_check_ASN1_OBJECT_freefunc_type(freefunc)))
0646 #define sk_ASN1_OBJECT_set_cmp_func(sk, cmp) ((sk_ASN1_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_compfunc_type(cmp)))
0647
0648
0649
0650 DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT)
0651
0652 ASN1_STRING *ASN1_STRING_new(void);
0653 void ASN1_STRING_free(ASN1_STRING *a);
0654 void ASN1_STRING_clear_free(ASN1_STRING *a);
0655 int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str);
0656 DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING)
0657 ASN1_STRING *ASN1_STRING_type_new(int type);
0658 int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b);
0659
0660
0661
0662
0663 int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);
0664 void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len);
0665 int ASN1_STRING_length(const ASN1_STRING *x);
0666 #ifndef OPENSSL_NO_DEPRECATED_3_0
0667 OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n);
0668 #endif
0669 int ASN1_STRING_type(const ASN1_STRING *x);
0670 #ifndef OPENSSL_NO_DEPRECATED_1_1_0
0671 OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x);
0672 #endif
0673 const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x);
0674
0675 DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING)
0676 int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length);
0677 int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value);
0678 int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n);
0679 int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a,
0680 const unsigned char *flags, int flags_len);
0681
0682 int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,
0683 BIT_STRING_BITNAME *tbl, int indent);
0684 int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl);
0685 int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value,
0686 BIT_STRING_BITNAME *tbl);
0687
0688
0689 SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER)
0690 #define sk_ASN1_INTEGER_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_INTEGER_sk_type(sk))
0691 #define sk_ASN1_INTEGER_value(sk, idx) ((ASN1_INTEGER *)OPENSSL_sk_value(ossl_check_const_ASN1_INTEGER_sk_type(sk), (idx)))
0692 #define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp)))
0693 #define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_null())
0694 #define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n)))
0695 #define sk_ASN1_INTEGER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_INTEGER_sk_type(sk), (n))
0696 #define sk_ASN1_INTEGER_free(sk) OPENSSL_sk_free(ossl_check_ASN1_INTEGER_sk_type(sk))
0697 #define sk_ASN1_INTEGER_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_INTEGER_sk_type(sk))
0698 #define sk_ASN1_INTEGER_delete(sk, i) ((ASN1_INTEGER *)OPENSSL_sk_delete(ossl_check_ASN1_INTEGER_sk_type(sk), (i)))
0699 #define sk_ASN1_INTEGER_delete_ptr(sk, ptr) ((ASN1_INTEGER *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)))
0700 #define sk_ASN1_INTEGER_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))
0701 #define sk_ASN1_INTEGER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))
0702 #define sk_ASN1_INTEGER_pop(sk) ((ASN1_INTEGER *)OPENSSL_sk_pop(ossl_check_ASN1_INTEGER_sk_type(sk)))
0703 #define sk_ASN1_INTEGER_shift(sk) ((ASN1_INTEGER *)OPENSSL_sk_shift(ossl_check_ASN1_INTEGER_sk_type(sk)))
0704 #define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_freefunc_type(freefunc))
0705 #define sk_ASN1_INTEGER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), (idx))
0706 #define sk_ASN1_INTEGER_set(sk, idx, ptr) ((ASN1_INTEGER *)OPENSSL_sk_set(ossl_check_ASN1_INTEGER_sk_type(sk), (idx), ossl_check_ASN1_INTEGER_type(ptr)))
0707 #define sk_ASN1_INTEGER_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))
0708 #define sk_ASN1_INTEGER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))
0709 #define sk_ASN1_INTEGER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), pnum)
0710 #define sk_ASN1_INTEGER_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_INTEGER_sk_type(sk))
0711 #define sk_ASN1_INTEGER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_INTEGER_sk_type(sk))
0712 #define sk_ASN1_INTEGER_dup(sk) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_dup(ossl_check_const_ASN1_INTEGER_sk_type(sk)))
0713 #define sk_ASN1_INTEGER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_copyfunc_type(copyfunc), ossl_check_ASN1_INTEGER_freefunc_type(freefunc)))
0714 #define sk_ASN1_INTEGER_set_cmp_func(sk, cmp) ((sk_ASN1_INTEGER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_compfunc_type(cmp)))
0715
0716
0717
0718 DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER)
0719 ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,
0720 long length);
0721 DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER)
0722 int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y);
0723
0724 DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED)
0725
0726 int ASN1_UTCTIME_check(const ASN1_UTCTIME *a);
0727 ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t);
0728 ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
0729 int offset_day, long offset_sec);
0730 int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);
0731 int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);
0732
0733 int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a);
0734 ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,
0735 time_t t);
0736 ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s,
0737 time_t t, int offset_day,
0738 long offset_sec);
0739 int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str);
0740
0741 int ASN1_TIME_diff(int *pday, int *psec,
0742 const ASN1_TIME *from, const ASN1_TIME *to);
0743
0744 DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING)
0745 DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING)
0746 int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a,
0747 const ASN1_OCTET_STRING *b);
0748 int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data,
0749 int len);
0750
0751
0752 SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING)
0753 #define sk_ASN1_UTF8STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_UTF8STRING_sk_type(sk))
0754 #define sk_ASN1_UTF8STRING_value(sk, idx) ((ASN1_UTF8STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), (idx)))
0755 #define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp)))
0756 #define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_null())
0757 #define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n)))
0758 #define sk_ASN1_UTF8STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_UTF8STRING_sk_type(sk), (n))
0759 #define sk_ASN1_UTF8STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_UTF8STRING_sk_type(sk))
0760 #define sk_ASN1_UTF8STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_UTF8STRING_sk_type(sk))
0761 #define sk_ASN1_UTF8STRING_delete(sk, i) ((ASN1_UTF8STRING *)OPENSSL_sk_delete(ossl_check_ASN1_UTF8STRING_sk_type(sk), (i)))
0762 #define sk_ASN1_UTF8STRING_delete_ptr(sk, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)))
0763 #define sk_ASN1_UTF8STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))
0764 #define sk_ASN1_UTF8STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))
0765 #define sk_ASN1_UTF8STRING_pop(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_pop(ossl_check_ASN1_UTF8STRING_sk_type(sk)))
0766 #define sk_ASN1_UTF8STRING_shift(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_shift(ossl_check_ASN1_UTF8STRING_sk_type(sk)))
0767 #define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc))
0768 #define sk_ASN1_UTF8STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), (idx))
0769 #define sk_ASN1_UTF8STRING_set(sk, idx, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_set(ossl_check_ASN1_UTF8STRING_sk_type(sk), (idx), ossl_check_ASN1_UTF8STRING_type(ptr)))
0770 #define sk_ASN1_UTF8STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))
0771 #define sk_ASN1_UTF8STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))
0772 #define sk_ASN1_UTF8STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), pnum)
0773 #define sk_ASN1_UTF8STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_UTF8STRING_sk_type(sk))
0774 #define sk_ASN1_UTF8STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_UTF8STRING_sk_type(sk))
0775 #define sk_ASN1_UTF8STRING_dup(sk) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)))
0776 #define sk_ASN1_UTF8STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_copyfunc_type(copyfunc), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)))
0777 #define sk_ASN1_UTF8STRING_set_cmp_func(sk, cmp) ((sk_ASN1_UTF8STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_compfunc_type(cmp)))
0778
0779
0780
0781 DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING)
0782 DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING)
0783 DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING)
0784 DECLARE_ASN1_FUNCTIONS(ASN1_NULL)
0785 DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING)
0786
0787 int UTF8_getc(const unsigned char *str, int len, unsigned long *val);
0788 int UTF8_putc(unsigned char *str, int len, unsigned long value);
0789
0790
0791 SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERALSTRING)
0792 #define sk_ASN1_GENERALSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk))
0793 #define sk_ASN1_GENERALSTRING_value(sk, idx) ((ASN1_GENERALSTRING *)OPENSSL_sk_value(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), (idx)))
0794 #define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp)))
0795 #define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_null())
0796 #define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n)))
0797 #define sk_ASN1_GENERALSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (n))
0798 #define sk_ASN1_GENERALSTRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk))
0799 #define sk_ASN1_GENERALSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_GENERALSTRING_sk_type(sk))
0800 #define sk_ASN1_GENERALSTRING_delete(sk, i) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (i)))
0801 #define sk_ASN1_GENERALSTRING_delete_ptr(sk, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)))
0802 #define sk_ASN1_GENERALSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))
0803 #define sk_ASN1_GENERALSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))
0804 #define sk_ASN1_GENERALSTRING_pop(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_pop(ossl_check_ASN1_GENERALSTRING_sk_type(sk)))
0805 #define sk_ASN1_GENERALSTRING_shift(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_shift(ossl_check_ASN1_GENERALSTRING_sk_type(sk)))
0806 #define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc))
0807 #define sk_ASN1_GENERALSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), (idx))
0808 #define sk_ASN1_GENERALSTRING_set(sk, idx, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_set(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (idx), ossl_check_ASN1_GENERALSTRING_type(ptr)))
0809 #define sk_ASN1_GENERALSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))
0810 #define sk_ASN1_GENERALSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))
0811 #define sk_ASN1_GENERALSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), pnum)
0812 #define sk_ASN1_GENERALSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_GENERALSTRING_sk_type(sk))
0813 #define sk_ASN1_GENERALSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk))
0814 #define sk_ASN1_GENERALSTRING_dup(sk) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)))
0815 #define sk_ASN1_GENERALSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_copyfunc_type(copyfunc), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)))
0816 #define sk_ASN1_GENERALSTRING_set_cmp_func(sk, cmp) ((sk_ASN1_GENERALSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp)))
0817
0818
0819
0820 DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE)
0821
0822 DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING)
0823 DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT)
0824 DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING)
0825 DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING)
0826 DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING)
0827 DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING)
0828 DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME)
0829 DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME)
0830 DECLARE_ASN1_FUNCTIONS(ASN1_TIME)
0831
0832 DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME)
0833 DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME)
0834 DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME)
0835
0836 DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF)
0837
0838 ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t);
0839 ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t,
0840 int offset_day, long offset_sec);
0841 int ASN1_TIME_check(const ASN1_TIME *t);
0842 ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t,
0843 ASN1_GENERALIZEDTIME **out);
0844 int ASN1_TIME_set_string(ASN1_TIME *s, const char *str);
0845 int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str);
0846 int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm);
0847 int ASN1_TIME_normalize(ASN1_TIME *s);
0848 int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t);
0849 int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b);
0850
0851 int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a);
0852 int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size);
0853 int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a);
0854 int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size);
0855 int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a);
0856 int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size);
0857 int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type);
0858 int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a);
0859
0860 int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num);
0861 ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len,
0862 const char *sn, const char *ln);
0863
0864 int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a);
0865 int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r);
0866 int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a);
0867 int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r);
0868
0869 int ASN1_INTEGER_set(ASN1_INTEGER *a, long v);
0870 long ASN1_INTEGER_get(const ASN1_INTEGER *a);
0871 ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai);
0872 BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn);
0873
0874 int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a);
0875 int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r);
0876
0877 int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
0878 long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a);
0879 ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai);
0880 BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn);
0881
0882
0883
0884 int ASN1_PRINTABLE_type(const unsigned char *s, int max);
0885
0886 unsigned long ASN1_tag2bit(int tag);
0887
0888
0889 int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,
0890 int *pclass, long omax);
0891 int ASN1_check_infinite_end(unsigned char **p, long len);
0892 int ASN1_const_check_infinite_end(const unsigned char **p, long len);
0893 void ASN1_put_object(unsigned char **pp, int constructed, int length,
0894 int tag, int xclass);
0895 int ASN1_put_eoc(unsigned char **pp);
0896 int ASN1_object_size(int constructed, int length, int tag);
0897
0898
0899 void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x);
0900
0901 #define ASN1_dup_of(type, i2d, d2i, x) \
0902 ((type *)ASN1_dup(CHECKED_I2D_OF(type, i2d), \
0903 CHECKED_D2I_OF(type, d2i), \
0904 CHECKED_PTR_OF(const type, x)))
0905
0906 void *ASN1_item_dup(const ASN1_ITEM *it, const void *x);
0907 int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1,
0908 X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
0909 const void *data, const ASN1_OCTET_STRING *id,
0910 EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx,
0911 const char *propq);
0912 int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg,
0913 const ASN1_BIT_STRING *signature, const void *data,
0914 const ASN1_OCTET_STRING *id, EVP_PKEY *pkey,
0915 OSSL_LIB_CTX *libctx, const char *propq);
0916
0917
0918
0919 #define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type))
0920 #define M_ASN1_free_of(x, type) \
0921 ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type))
0922
0923 #ifndef OPENSSL_NO_STDIO
0924 void *ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x);
0925
0926 #define ASN1_d2i_fp_of(type, xnew, d2i, in, x) \
0927 ((type *)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \
0928 CHECKED_D2I_OF(type, d2i), \
0929 in, \
0930 CHECKED_PPTR_OF(type, x)))
0931
0932 void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x,
0933 OSSL_LIB_CTX *libctx, const char *propq);
0934 void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x);
0935 int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x);
0936
0937 #define ASN1_i2d_fp_of(type, i2d, out, x) \
0938 (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \
0939 out, \
0940 CHECKED_PTR_OF(const type, x)))
0941
0942 int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x);
0943 int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags);
0944 #endif
0945
0946 int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in);
0947
0948 void *ASN1_d2i_bio(void *(*xnew)(void), d2i_of_void *d2i, BIO *in, void **x);
0949
0950 #define ASN1_d2i_bio_of(type, xnew, d2i, in, x) \
0951 ((type *)ASN1_d2i_bio(CHECKED_NEW_OF(type, xnew), \
0952 CHECKED_D2I_OF(type, d2i), \
0953 in, \
0954 CHECKED_PPTR_OF(type, x)))
0955
0956 void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval,
0957 OSSL_LIB_CTX *libctx, const char *propq);
0958 void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval);
0959 int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x);
0960
0961 #define ASN1_i2d_bio_of(type, i2d, out, x) \
0962 (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \
0963 out, \
0964 CHECKED_PTR_OF(const type, x)))
0965
0966 int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x);
0967 BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val);
0968 int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a);
0969 int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a);
0970 int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm);
0971 int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags);
0972 int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v);
0973 int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags);
0974 int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off);
0975 int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num,
0976 unsigned char *buf, int off);
0977 int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent);
0978 int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent,
0979 int dump);
0980 const char *ASN1_tag2str(int tag);
0981
0982
0983
0984 int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s);
0985
0986 int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len);
0987 int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len);
0988 int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num,
0989 unsigned char *data, int len);
0990 int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num,
0991 unsigned char *data, int max_len);
0992
0993 void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it);
0994 void *ASN1_item_unpack_ex(const ASN1_STRING *oct, const ASN1_ITEM *it,
0995 OSSL_LIB_CTX *libctx, const char *propq);
0996
0997 ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it,
0998 ASN1_OCTET_STRING **oct);
0999
1000 void ASN1_STRING_set_default_mask(unsigned long mask);
1001 int ASN1_STRING_set_default_mask_asc(const char *p);
1002 unsigned long ASN1_STRING_get_default_mask(void);
1003 int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,
1004 int inform, unsigned long mask);
1005 int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
1006 int inform, unsigned long mask,
1007 long minsize, long maxsize);
1008
1009 ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
1010 const unsigned char *in, int inlen,
1011 int inform, int nid);
1012 ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);
1013 int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long);
1014 void ASN1_STRING_TABLE_cleanup(void);
1015
1016
1017
1018
1019 ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it);
1020 ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx,
1021 const char *propq);
1022 void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);
1023 ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in,
1024 long len, const ASN1_ITEM *it,
1025 OSSL_LIB_CTX *libctx, const char *propq);
1026 ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in,
1027 long len, const ASN1_ITEM *it);
1028 int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
1029 int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out,
1030 const ASN1_ITEM *it);
1031
1032 void ASN1_add_oid_module(void);
1033 void ASN1_add_stable_module(void);
1034
1035 ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf);
1036 ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf);
1037 int ASN1_str2mask(const char *str, unsigned long *pmask);
1038
1039
1040
1041
1042 #define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001
1043
1044 #define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002
1045
1046 #define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004
1047
1048 #define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008
1049
1050 #define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010
1051
1052 #define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020
1053
1054 #define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040
1055
1056 #define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080
1057
1058 #define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100
1059
1060 int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent,
1061 const ASN1_ITEM *it, const ASN1_PCTX *pctx);
1062 ASN1_PCTX *ASN1_PCTX_new(void);
1063 void ASN1_PCTX_free(ASN1_PCTX *p);
1064 unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p);
1065 void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags);
1066 unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p);
1067 void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags);
1068 unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p);
1069 void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags);
1070 unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p);
1071 void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags);
1072 unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p);
1073 void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags);
1074
1075 ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb)(ASN1_SCTX *ctx));
1076 void ASN1_SCTX_free(ASN1_SCTX *p);
1077 const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p);
1078 const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p);
1079 unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p);
1080 void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data);
1081 void *ASN1_SCTX_get_app_data(ASN1_SCTX *p);
1082
1083 const BIO_METHOD *BIO_f_asn1(void);
1084
1085
1086 BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it);
1087
1088 int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags,
1089 const ASN1_ITEM *it);
1090 int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags,
1091 const char *hdr, const ASN1_ITEM *it);
1092
1093 int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
1094 int ctype_nid, int econt_nid,
1095 STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it);
1096 int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
1097 int ctype_nid, int econt_nid,
1098 STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it,
1099 OSSL_LIB_CTX *libctx, const char *propq);
1100 ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it);
1101 ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont,
1102 const ASN1_ITEM *it, ASN1_VALUE **x,
1103 OSSL_LIB_CTX *libctx, const char *propq);
1104 int SMIME_crlf_copy(BIO *in, BIO *out, int flags);
1105 int SMIME_text(BIO *in, BIO *out);
1106
1107 const ASN1_ITEM *ASN1_ITEM_lookup(const char *name);
1108 const ASN1_ITEM *ASN1_ITEM_get(size_t i);
1109
1110
1111 #define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \
1112 DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \
1113 DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name)
1114 #define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type)
1115 #define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \
1116 DECLARE_ASN1_ENCODE_FUNCTIONS(type, name)
1117 #define I2D_OF_const(type) I2D_OF(type)
1118 #define ASN1_dup_of_const(type, i2d, d2i, x) ASN1_dup_of(type, i2d, d2i, x)
1119 #define ASN1_i2d_fp_of_const(type, i2d, out, x) ASN1_i2d_fp_of(type, i2d, out, x)
1120 #define ASN1_i2d_bio_of_const(type, i2d, out, x) ASN1_i2d_bio_of(type, i2d, out, x)
1121
1122 #ifdef __cplusplus
1123 }
1124 #endif
1125 #endif