1*de0e0e4dSAntonio Huete Jimenez /* $OpenBSD: asn1.h,v 1.70 2022/09/11 17:22:52 tb Exp $ */ 2f5b1c8a1SJohn Marino /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3f5b1c8a1SJohn Marino * All rights reserved. 4f5b1c8a1SJohn Marino * 5f5b1c8a1SJohn Marino * This package is an SSL implementation written 6f5b1c8a1SJohn Marino * by Eric Young (eay@cryptsoft.com). 7f5b1c8a1SJohn Marino * The implementation was written so as to conform with Netscapes SSL. 8f5b1c8a1SJohn Marino * 9f5b1c8a1SJohn Marino * This library is free for commercial and non-commercial use as long as 10f5b1c8a1SJohn Marino * the following conditions are aheared to. The following conditions 11f5b1c8a1SJohn Marino * apply to all code found in this distribution, be it the RC4, RSA, 12f5b1c8a1SJohn Marino * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13f5b1c8a1SJohn Marino * included with this distribution is covered by the same copyright terms 14f5b1c8a1SJohn Marino * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15f5b1c8a1SJohn Marino * 16f5b1c8a1SJohn Marino * Copyright remains Eric Young's, and as such any Copyright notices in 17f5b1c8a1SJohn Marino * the code are not to be removed. 18f5b1c8a1SJohn Marino * If this package is used in a product, Eric Young should be given attribution 19f5b1c8a1SJohn Marino * as the author of the parts of the library used. 20f5b1c8a1SJohn Marino * This can be in the form of a textual message at program startup or 21f5b1c8a1SJohn Marino * in documentation (online or textual) provided with the package. 22f5b1c8a1SJohn Marino * 23f5b1c8a1SJohn Marino * Redistribution and use in source and binary forms, with or without 24f5b1c8a1SJohn Marino * modification, are permitted provided that the following conditions 25f5b1c8a1SJohn Marino * are met: 26f5b1c8a1SJohn Marino * 1. Redistributions of source code must retain the copyright 27f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer. 28f5b1c8a1SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 29f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer in the 30f5b1c8a1SJohn Marino * documentation and/or other materials provided with the distribution. 31f5b1c8a1SJohn Marino * 3. All advertising materials mentioning features or use of this software 32f5b1c8a1SJohn Marino * must display the following acknowledgement: 33f5b1c8a1SJohn Marino * "This product includes cryptographic software written by 34f5b1c8a1SJohn Marino * Eric Young (eay@cryptsoft.com)" 35f5b1c8a1SJohn Marino * The word 'cryptographic' can be left out if the rouines from the library 36f5b1c8a1SJohn Marino * being used are not cryptographic related :-). 37f5b1c8a1SJohn Marino * 4. If you include any Windows specific code (or a derivative thereof) from 38f5b1c8a1SJohn Marino * the apps directory (application code) you must include an acknowledgement: 39f5b1c8a1SJohn Marino * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40f5b1c8a1SJohn Marino * 41f5b1c8a1SJohn Marino * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42f5b1c8a1SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43f5b1c8a1SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44f5b1c8a1SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45f5b1c8a1SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46f5b1c8a1SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47f5b1c8a1SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48f5b1c8a1SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49f5b1c8a1SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50f5b1c8a1SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51f5b1c8a1SJohn Marino * SUCH DAMAGE. 52f5b1c8a1SJohn Marino * 53f5b1c8a1SJohn Marino * The licence and distribution terms for any publically available version or 54f5b1c8a1SJohn Marino * derivative of this code cannot be changed. i.e. this code cannot simply be 55f5b1c8a1SJohn Marino * copied and put under another distribution licence 56f5b1c8a1SJohn Marino * [including the GNU Public Licence.] 57f5b1c8a1SJohn Marino */ 58f5b1c8a1SJohn Marino 59f5b1c8a1SJohn Marino #ifndef HEADER_ASN1_H 60f5b1c8a1SJohn Marino #define HEADER_ASN1_H 61f5b1c8a1SJohn Marino 62f5b1c8a1SJohn Marino #include <time.h> 63f5b1c8a1SJohn Marino 64f5b1c8a1SJohn Marino #include <openssl/opensslconf.h> 65f5b1c8a1SJohn Marino 66f5b1c8a1SJohn Marino #ifndef OPENSSL_NO_BIO 67f5b1c8a1SJohn Marino #include <openssl/bio.h> 68f5b1c8a1SJohn Marino #endif 69f5b1c8a1SJohn Marino #include <openssl/stack.h> 70f5b1c8a1SJohn Marino #include <openssl/safestack.h> 71f5b1c8a1SJohn Marino 72f5b1c8a1SJohn Marino #include <openssl/ossl_typ.h> 73f5b1c8a1SJohn Marino #ifndef OPENSSL_NO_DEPRECATED 74f5b1c8a1SJohn Marino #include <openssl/bn.h> 75f5b1c8a1SJohn Marino #endif 76f5b1c8a1SJohn Marino 77f5b1c8a1SJohn Marino #ifdef __cplusplus 78f5b1c8a1SJohn Marino extern "C" { 79f5b1c8a1SJohn Marino #endif 80f5b1c8a1SJohn Marino 81f5b1c8a1SJohn Marino #define V_ASN1_UNIVERSAL 0x00 82f5b1c8a1SJohn Marino #define V_ASN1_APPLICATION 0x40 83f5b1c8a1SJohn Marino #define V_ASN1_CONTEXT_SPECIFIC 0x80 84f5b1c8a1SJohn Marino #define V_ASN1_PRIVATE 0xc0 85f5b1c8a1SJohn Marino 86f5b1c8a1SJohn Marino #define V_ASN1_CONSTRUCTED 0x20 87f5b1c8a1SJohn Marino #define V_ASN1_PRIMITIVE_TAG 0x1f 88f5b1c8a1SJohn Marino #define V_ASN1_PRIMATIVE_TAG 0x1f 89f5b1c8a1SJohn Marino 90f5b1c8a1SJohn Marino #define V_ASN1_APP_CHOOSE -2 /* let the recipient choose */ 91f5b1c8a1SJohn Marino #define V_ASN1_OTHER -3 /* used in ASN1_TYPE */ 92f5b1c8a1SJohn Marino #define V_ASN1_ANY -4 /* used in ASN1 template code */ 93f5b1c8a1SJohn Marino 94f5b1c8a1SJohn Marino #define V_ASN1_NEG 0x100 /* negative flag */ 95f5b1c8a1SJohn Marino 96f5b1c8a1SJohn Marino #define V_ASN1_UNDEF -1 97f5b1c8a1SJohn Marino #define V_ASN1_EOC 0 98f5b1c8a1SJohn Marino #define V_ASN1_BOOLEAN 1 /**/ 99f5b1c8a1SJohn Marino #define V_ASN1_INTEGER 2 100f5b1c8a1SJohn Marino #define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) 101f5b1c8a1SJohn Marino #define V_ASN1_BIT_STRING 3 102f5b1c8a1SJohn Marino #define V_ASN1_OCTET_STRING 4 103f5b1c8a1SJohn Marino #define V_ASN1_NULL 5 104f5b1c8a1SJohn Marino #define V_ASN1_OBJECT 6 105f5b1c8a1SJohn Marino #define V_ASN1_OBJECT_DESCRIPTOR 7 106f5b1c8a1SJohn Marino #define V_ASN1_EXTERNAL 8 107f5b1c8a1SJohn Marino #define V_ASN1_REAL 9 108f5b1c8a1SJohn Marino #define V_ASN1_ENUMERATED 10 109f5b1c8a1SJohn Marino #define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) 110f5b1c8a1SJohn Marino #define V_ASN1_UTF8STRING 12 111f5b1c8a1SJohn Marino #define V_ASN1_SEQUENCE 16 112f5b1c8a1SJohn Marino #define V_ASN1_SET 17 113f5b1c8a1SJohn Marino #define V_ASN1_NUMERICSTRING 18 /**/ 114f5b1c8a1SJohn Marino #define V_ASN1_PRINTABLESTRING 19 115f5b1c8a1SJohn Marino #define V_ASN1_T61STRING 20 116f5b1c8a1SJohn Marino #define V_ASN1_TELETEXSTRING 20 /* alias */ 117f5b1c8a1SJohn Marino #define V_ASN1_VIDEOTEXSTRING 21 /**/ 118f5b1c8a1SJohn Marino #define V_ASN1_IA5STRING 22 119f5b1c8a1SJohn Marino #define V_ASN1_UTCTIME 23 120f5b1c8a1SJohn Marino #define V_ASN1_GENERALIZEDTIME 24 /**/ 121f5b1c8a1SJohn Marino #define V_ASN1_GRAPHICSTRING 25 /**/ 122f5b1c8a1SJohn Marino #define V_ASN1_ISO64STRING 26 /**/ 123f5b1c8a1SJohn Marino #define V_ASN1_VISIBLESTRING 26 /* alias */ 124f5b1c8a1SJohn Marino #define V_ASN1_GENERALSTRING 27 /**/ 125f5b1c8a1SJohn Marino #define V_ASN1_UNIVERSALSTRING 28 /**/ 126f5b1c8a1SJohn Marino #define V_ASN1_BMPSTRING 30 127f5b1c8a1SJohn Marino 128f5b1c8a1SJohn Marino #define B_ASN1_NUMERICSTRING 0x0001 129f5b1c8a1SJohn Marino #define B_ASN1_PRINTABLESTRING 0x0002 130f5b1c8a1SJohn Marino #define B_ASN1_T61STRING 0x0004 131f5b1c8a1SJohn Marino #define B_ASN1_TELETEXSTRING 0x0004 132f5b1c8a1SJohn Marino #define B_ASN1_VIDEOTEXSTRING 0x0008 133f5b1c8a1SJohn Marino #define B_ASN1_IA5STRING 0x0010 134f5b1c8a1SJohn Marino #define B_ASN1_GRAPHICSTRING 0x0020 135f5b1c8a1SJohn Marino #define B_ASN1_ISO64STRING 0x0040 136f5b1c8a1SJohn Marino #define B_ASN1_VISIBLESTRING 0x0040 137f5b1c8a1SJohn Marino #define B_ASN1_GENERALSTRING 0x0080 138f5b1c8a1SJohn Marino #define B_ASN1_UNIVERSALSTRING 0x0100 139f5b1c8a1SJohn Marino #define B_ASN1_OCTET_STRING 0x0200 140f5b1c8a1SJohn Marino #define B_ASN1_BIT_STRING 0x0400 141f5b1c8a1SJohn Marino #define B_ASN1_BMPSTRING 0x0800 142f5b1c8a1SJohn Marino #define B_ASN1_UNKNOWN 0x1000 143f5b1c8a1SJohn Marino #define B_ASN1_UTF8STRING 0x2000 144f5b1c8a1SJohn Marino #define B_ASN1_UTCTIME 0x4000 145f5b1c8a1SJohn Marino #define B_ASN1_GENERALIZEDTIME 0x8000 146f5b1c8a1SJohn Marino #define B_ASN1_SEQUENCE 0x10000 147f5b1c8a1SJohn Marino 148f5b1c8a1SJohn Marino /* For use with ASN1_mbstring_copy() */ 149f5b1c8a1SJohn Marino #define MBSTRING_FLAG 0x1000 150f5b1c8a1SJohn Marino #define MBSTRING_UTF8 (MBSTRING_FLAG) 151f5b1c8a1SJohn Marino #define MBSTRING_ASC (MBSTRING_FLAG|1) 152f5b1c8a1SJohn Marino #define MBSTRING_BMP (MBSTRING_FLAG|2) 153f5b1c8a1SJohn Marino #define MBSTRING_UNIV (MBSTRING_FLAG|4) 154f5b1c8a1SJohn Marino 155f5b1c8a1SJohn Marino #define SMIME_OLDMIME 0x400 156f5b1c8a1SJohn Marino #define SMIME_CRLFEOL 0x800 157f5b1c8a1SJohn Marino #define SMIME_STREAM 0x1000 158f5b1c8a1SJohn Marino 159f5b1c8a1SJohn Marino struct X509_algor_st; 160f5b1c8a1SJohn Marino DECLARE_STACK_OF(X509_ALGOR) 161f5b1c8a1SJohn Marino 162f5b1c8a1SJohn Marino #define DECLARE_ASN1_SET_OF(type) /* filled in by mkstack.pl */ 163f5b1c8a1SJohn Marino #define IMPLEMENT_ASN1_SET_OF(type) /* nothing, no longer needed */ 164f5b1c8a1SJohn Marino 165f5b1c8a1SJohn Marino #define ASN1_STRING_FLAG_BITS_LEFT 0x08 /* Set if 0x07 has bits left value */ 166f5b1c8a1SJohn Marino /* This indicates that the ASN1_STRING is not a real value but just a place 167f5b1c8a1SJohn Marino * holder for the location where indefinite length constructed data should 168f5b1c8a1SJohn Marino * be inserted in the memory buffer 169f5b1c8a1SJohn Marino */ 170f5b1c8a1SJohn Marino #define ASN1_STRING_FLAG_NDEF 0x010 171f5b1c8a1SJohn Marino 172f5b1c8a1SJohn Marino /* This flag is used by the CMS code to indicate that a string is not 173f5b1c8a1SJohn Marino * complete and is a place holder for content when it had all been 174f5b1c8a1SJohn Marino * accessed. The flag will be reset when content has been written to it. 175f5b1c8a1SJohn Marino */ 176f5b1c8a1SJohn Marino 177f5b1c8a1SJohn Marino #define ASN1_STRING_FLAG_CONT 0x020 178f5b1c8a1SJohn Marino /* This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING 179f5b1c8a1SJohn Marino * type. 180f5b1c8a1SJohn Marino */ 181f5b1c8a1SJohn Marino #define ASN1_STRING_FLAG_MSTRING 0x040 182f5b1c8a1SJohn Marino /* This is the base type that holds just about everything :-) */ 183f5b1c8a1SJohn Marino struct asn1_string_st { 184f5b1c8a1SJohn Marino int length; 185f5b1c8a1SJohn Marino int type; 186f5b1c8a1SJohn Marino unsigned char *data; 187f5b1c8a1SJohn Marino /* The value of the following field depends on the type being 188f5b1c8a1SJohn Marino * held. It is mostly being used for BIT_STRING so if the 189f5b1c8a1SJohn Marino * input data has a non-zero 'unused bits' value, it will be 190f5b1c8a1SJohn Marino * handled correctly */ 191f5b1c8a1SJohn Marino long flags; 192f5b1c8a1SJohn Marino }; 193f5b1c8a1SJohn Marino 194f5b1c8a1SJohn Marino /* ASN1_ENCODING structure: this is used to save the received 195f5b1c8a1SJohn Marino * encoding of an ASN1 type. This is useful to get round 196f5b1c8a1SJohn Marino * problems with invalid encodings which can break signatures. 197f5b1c8a1SJohn Marino */ 198f5b1c8a1SJohn Marino 199f5b1c8a1SJohn Marino typedef struct ASN1_ENCODING_st { 200f5b1c8a1SJohn Marino unsigned char *enc; /* DER encoding */ 201f5b1c8a1SJohn Marino long len; /* Length of encoding */ 202f5b1c8a1SJohn Marino int modified; /* set to 1 if 'enc' is invalid */ 203f5b1c8a1SJohn Marino } ASN1_ENCODING; 204f5b1c8a1SJohn Marino 205f5b1c8a1SJohn Marino /* Used with ASN1 LONG type: if a long is set to this it is omitted */ 206f5b1c8a1SJohn Marino #define ASN1_LONG_UNDEF 0x7fffffffL 207f5b1c8a1SJohn Marino 208f5b1c8a1SJohn Marino #define STABLE_FLAGS_MALLOC 0x01 209f5b1c8a1SJohn Marino #define STABLE_NO_MASK 0x02 210f5b1c8a1SJohn Marino #define DIRSTRING_TYPE \ 211f5b1c8a1SJohn Marino (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) 212f5b1c8a1SJohn Marino #define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) 213f5b1c8a1SJohn Marino 214f5b1c8a1SJohn Marino typedef struct asn1_string_table_st { 215f5b1c8a1SJohn Marino int nid; 216f5b1c8a1SJohn Marino long minsize; 217f5b1c8a1SJohn Marino long maxsize; 218f5b1c8a1SJohn Marino unsigned long mask; 219f5b1c8a1SJohn Marino unsigned long flags; 220f5b1c8a1SJohn Marino } ASN1_STRING_TABLE; 221f5b1c8a1SJohn Marino 222f5b1c8a1SJohn Marino DECLARE_STACK_OF(ASN1_STRING_TABLE) 223f5b1c8a1SJohn Marino 224f5b1c8a1SJohn Marino /* size limits: this stuff is taken straight from RFC2459 */ 225f5b1c8a1SJohn Marino 226f5b1c8a1SJohn Marino #define ub_name 32768 227f5b1c8a1SJohn Marino #define ub_common_name 64 228f5b1c8a1SJohn Marino #define ub_locality_name 128 229f5b1c8a1SJohn Marino #define ub_state_name 128 230f5b1c8a1SJohn Marino #define ub_organization_name 64 231f5b1c8a1SJohn Marino #define ub_organization_unit_name 64 232f5b1c8a1SJohn Marino #define ub_title 64 233f5b1c8a1SJohn Marino #define ub_email_address 128 234f5b1c8a1SJohn Marino 235f5b1c8a1SJohn Marino /* Declarations for template structures: for full definitions 236f5b1c8a1SJohn Marino * see asn1t.h 237f5b1c8a1SJohn Marino */ 238f5b1c8a1SJohn Marino typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; 239f5b1c8a1SJohn Marino typedef struct ASN1_TLC_st ASN1_TLC; 240f5b1c8a1SJohn Marino /* This is just an opaque pointer */ 241f5b1c8a1SJohn Marino typedef struct ASN1_VALUE_st ASN1_VALUE; 242f5b1c8a1SJohn Marino 24372c33676SMaxim Ag #ifndef LIBRESSL_INTERNAL 24472c33676SMaxim Ag 245f5b1c8a1SJohn Marino /* Declare ASN1 functions: the implement macro in in asn1t.h */ 246f5b1c8a1SJohn Marino 247f5b1c8a1SJohn Marino #define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) 248f5b1c8a1SJohn Marino 249f5b1c8a1SJohn Marino #define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ 250f5b1c8a1SJohn Marino DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) 251f5b1c8a1SJohn Marino 252f5b1c8a1SJohn Marino #define DECLARE_ASN1_FUNCTIONS_name(type, name) \ 253f5b1c8a1SJohn Marino DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ 254f5b1c8a1SJohn Marino DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) 255f5b1c8a1SJohn Marino 256f5b1c8a1SJohn Marino #define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ 257f5b1c8a1SJohn Marino DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ 258f5b1c8a1SJohn Marino DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) 259f5b1c8a1SJohn Marino 260f5b1c8a1SJohn Marino #define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ 261f5b1c8a1SJohn Marino type *d2i_##name(type **a, const unsigned char **in, long len); \ 262f5b1c8a1SJohn Marino int i2d_##name(type *a, unsigned char **out); \ 263f5b1c8a1SJohn Marino DECLARE_ASN1_ITEM(itname) 264f5b1c8a1SJohn Marino 265f5b1c8a1SJohn Marino #define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ 266f5b1c8a1SJohn Marino type *d2i_##name(type **a, const unsigned char **in, long len); \ 267f5b1c8a1SJohn Marino int i2d_##name(const type *a, unsigned char **out); \ 268f5b1c8a1SJohn Marino DECLARE_ASN1_ITEM(name) 269f5b1c8a1SJohn Marino 270f5b1c8a1SJohn Marino #define DECLARE_ASN1_NDEF_FUNCTION(name) \ 271f5b1c8a1SJohn Marino int i2d_##name##_NDEF(name *a, unsigned char **out); 272f5b1c8a1SJohn Marino 273f5b1c8a1SJohn Marino #define DECLARE_ASN1_FUNCTIONS_const(name) \ 274f5b1c8a1SJohn Marino DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ 275f5b1c8a1SJohn Marino DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) 276f5b1c8a1SJohn Marino 277f5b1c8a1SJohn Marino #define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ 278f5b1c8a1SJohn Marino type *name##_new(void); \ 279f5b1c8a1SJohn Marino void name##_free(type *a); 280f5b1c8a1SJohn Marino 281f5b1c8a1SJohn Marino #define DECLARE_ASN1_PRINT_FUNCTION(stname) \ 282f5b1c8a1SJohn Marino DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) 283f5b1c8a1SJohn Marino 284f5b1c8a1SJohn Marino #define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ 285f5b1c8a1SJohn Marino int fname##_print_ctx(BIO *out, stname *x, int indent, \ 286f5b1c8a1SJohn Marino const ASN1_PCTX *pctx); 287f5b1c8a1SJohn Marino 28872c33676SMaxim Ag #endif /* !LIBRESSL_INTERNAL */ 28972c33676SMaxim Ag 290f5b1c8a1SJohn Marino #define D2I_OF(type) type *(*)(type **,const unsigned char **,long) 291f5b1c8a1SJohn Marino #define I2D_OF(type) int (*)(type *,unsigned char **) 292f5b1c8a1SJohn Marino #define I2D_OF_const(type) int (*)(const type *,unsigned char **) 293f5b1c8a1SJohn Marino 294f5b1c8a1SJohn Marino #define CHECKED_D2I_OF(type, d2i) \ 295f5b1c8a1SJohn Marino ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) 296f5b1c8a1SJohn Marino #define CHECKED_I2D_OF(type, i2d) \ 297f5b1c8a1SJohn Marino ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) 298f5b1c8a1SJohn Marino #define CHECKED_NEW_OF(type, xnew) \ 299f5b1c8a1SJohn Marino ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) 300f5b1c8a1SJohn Marino #define CHECKED_PTR_OF(type, p) \ 301f5b1c8a1SJohn Marino ((void*) (1 ? p : (type*)0)) 302f5b1c8a1SJohn Marino #define CHECKED_PPTR_OF(type, p) \ 303f5b1c8a1SJohn Marino ((void**) (1 ? p : (type**)0)) 304f5b1c8a1SJohn Marino 305f5b1c8a1SJohn Marino #define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) 306f5b1c8a1SJohn Marino #define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) 307f5b1c8a1SJohn Marino #define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) 308f5b1c8a1SJohn Marino 309f5b1c8a1SJohn Marino TYPEDEF_D2I2D_OF(void); 310f5b1c8a1SJohn Marino 311f5b1c8a1SJohn Marino /* The following macros and typedefs allow an ASN1_ITEM 312f5b1c8a1SJohn Marino * to be embedded in a structure and referenced. Since 313f5b1c8a1SJohn Marino * the ASN1_ITEM pointers need to be globally accessible 314f5b1c8a1SJohn Marino * (possibly from shared libraries) they may exist in 315f5b1c8a1SJohn Marino * different forms. On platforms that support it the 316f5b1c8a1SJohn Marino * ASN1_ITEM structure itself will be globally exported. 317f5b1c8a1SJohn Marino * Other platforms will export a function that returns 318f5b1c8a1SJohn Marino * an ASN1_ITEM pointer. 319f5b1c8a1SJohn Marino * 320f5b1c8a1SJohn Marino * To handle both cases transparently the macros below 321f5b1c8a1SJohn Marino * should be used instead of hard coding an ASN1_ITEM 322f5b1c8a1SJohn Marino * pointer in a structure. 323f5b1c8a1SJohn Marino * 324f5b1c8a1SJohn Marino * The structure will look like this: 325f5b1c8a1SJohn Marino * 326f5b1c8a1SJohn Marino * typedef struct SOMETHING_st { 327f5b1c8a1SJohn Marino * ... 328f5b1c8a1SJohn Marino * ASN1_ITEM_EXP *iptr; 329f5b1c8a1SJohn Marino * ... 330f5b1c8a1SJohn Marino * } SOMETHING; 331f5b1c8a1SJohn Marino * 332f5b1c8a1SJohn Marino * It would be initialised as e.g.: 333f5b1c8a1SJohn Marino * 334f5b1c8a1SJohn Marino * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; 335f5b1c8a1SJohn Marino * 336f5b1c8a1SJohn Marino * and the actual pointer extracted with: 337f5b1c8a1SJohn Marino * 338f5b1c8a1SJohn Marino * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); 339f5b1c8a1SJohn Marino * 340f5b1c8a1SJohn Marino * Finally an ASN1_ITEM pointer can be extracted from an 341f5b1c8a1SJohn Marino * appropriate reference with: ASN1_ITEM_rptr(X509). This 342f5b1c8a1SJohn Marino * would be used when a function takes an ASN1_ITEM * argument. 343f5b1c8a1SJohn Marino * 344f5b1c8a1SJohn Marino */ 345f5b1c8a1SJohn Marino 346f5b1c8a1SJohn Marino /* ASN1_ITEM pointer exported type */ 347f5b1c8a1SJohn Marino typedef const ASN1_ITEM ASN1_ITEM_EXP; 348f5b1c8a1SJohn Marino 34972c33676SMaxim Ag #ifndef LIBRESSL_INTERNAL 35072c33676SMaxim Ag 351f5b1c8a1SJohn Marino /* Macro to obtain ASN1_ITEM pointer from exported type */ 352f5b1c8a1SJohn Marino #define ASN1_ITEM_ptr(iptr) (iptr) 353f5b1c8a1SJohn Marino 354f5b1c8a1SJohn Marino /* Macro to include ASN1_ITEM pointer from base type */ 355f5b1c8a1SJohn Marino #define ASN1_ITEM_ref(iptr) (&(iptr##_it)) 356f5b1c8a1SJohn Marino 357f5b1c8a1SJohn Marino #define ASN1_ITEM_rptr(ref) (&(ref##_it)) 358f5b1c8a1SJohn Marino 359f5b1c8a1SJohn Marino #define DECLARE_ASN1_ITEM(name) \ 360f5b1c8a1SJohn Marino extern const ASN1_ITEM name##_it; 361f5b1c8a1SJohn Marino 36272c33676SMaxim Ag #endif /* !LIBRESSL_INTERNAL */ 363f5b1c8a1SJohn Marino 364f5b1c8a1SJohn Marino /* Parameters used by ASN1_STRING_print_ex() */ 365f5b1c8a1SJohn Marino 366f5b1c8a1SJohn Marino /* These determine which characters to escape: 367f5b1c8a1SJohn Marino * RFC2253 special characters, control characters and 368f5b1c8a1SJohn Marino * MSB set characters 369f5b1c8a1SJohn Marino */ 370f5b1c8a1SJohn Marino 371f5b1c8a1SJohn Marino #define ASN1_STRFLGS_ESC_2253 1 372f5b1c8a1SJohn Marino #define ASN1_STRFLGS_ESC_CTRL 2 373f5b1c8a1SJohn Marino #define ASN1_STRFLGS_ESC_MSB 4 374f5b1c8a1SJohn Marino 375f5b1c8a1SJohn Marino 376f5b1c8a1SJohn Marino /* This flag determines how we do escaping: normally 377f5b1c8a1SJohn Marino * RC2253 backslash only, set this to use backslash and 378f5b1c8a1SJohn Marino * quote. 379f5b1c8a1SJohn Marino */ 380f5b1c8a1SJohn Marino 381f5b1c8a1SJohn Marino #define ASN1_STRFLGS_ESC_QUOTE 8 382f5b1c8a1SJohn Marino 383f5b1c8a1SJohn Marino 384f5b1c8a1SJohn Marino /* These three flags are internal use only. */ 385f5b1c8a1SJohn Marino 386f5b1c8a1SJohn Marino /* Character is a valid PrintableString character */ 387f5b1c8a1SJohn Marino #define CHARTYPE_PRINTABLESTRING 0x10 388f5b1c8a1SJohn Marino /* Character needs escaping if it is the first character */ 389f5b1c8a1SJohn Marino #define CHARTYPE_FIRST_ESC_2253 0x20 390f5b1c8a1SJohn Marino /* Character needs escaping if it is the last character */ 391f5b1c8a1SJohn Marino #define CHARTYPE_LAST_ESC_2253 0x40 392f5b1c8a1SJohn Marino 393f5b1c8a1SJohn Marino /* NB the internal flags are safely reused below by flags 394f5b1c8a1SJohn Marino * handled at the top level. 395f5b1c8a1SJohn Marino */ 396f5b1c8a1SJohn Marino 397f5b1c8a1SJohn Marino /* If this is set we convert all character strings 398f5b1c8a1SJohn Marino * to UTF8 first 399f5b1c8a1SJohn Marino */ 400f5b1c8a1SJohn Marino 401f5b1c8a1SJohn Marino #define ASN1_STRFLGS_UTF8_CONVERT 0x10 402f5b1c8a1SJohn Marino 403f5b1c8a1SJohn Marino /* If this is set we don't attempt to interpret content: 404f5b1c8a1SJohn Marino * just assume all strings are 1 byte per character. This 405f5b1c8a1SJohn Marino * will produce some pretty odd looking output! 406f5b1c8a1SJohn Marino */ 407f5b1c8a1SJohn Marino 408f5b1c8a1SJohn Marino #define ASN1_STRFLGS_IGNORE_TYPE 0x20 409f5b1c8a1SJohn Marino 410f5b1c8a1SJohn Marino /* If this is set we include the string type in the output */ 411f5b1c8a1SJohn Marino #define ASN1_STRFLGS_SHOW_TYPE 0x40 412f5b1c8a1SJohn Marino 413f5b1c8a1SJohn Marino /* This determines which strings to display and which to 414f5b1c8a1SJohn Marino * 'dump' (hex dump of content octets or DER encoding). We can 415f5b1c8a1SJohn Marino * only dump non character strings or everything. If we 416f5b1c8a1SJohn Marino * don't dump 'unknown' they are interpreted as character 417f5b1c8a1SJohn Marino * strings with 1 octet per character and are subject to 418f5b1c8a1SJohn Marino * the usual escaping options. 419f5b1c8a1SJohn Marino */ 420f5b1c8a1SJohn Marino 421f5b1c8a1SJohn Marino #define ASN1_STRFLGS_DUMP_ALL 0x80 422f5b1c8a1SJohn Marino #define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 423f5b1c8a1SJohn Marino 424f5b1c8a1SJohn Marino /* These determine what 'dumping' does, we can dump the 425f5b1c8a1SJohn Marino * content octets or the DER encoding: both use the 426f5b1c8a1SJohn Marino * RFC2253 #NNNNN notation. 427f5b1c8a1SJohn Marino */ 428f5b1c8a1SJohn Marino 429f5b1c8a1SJohn Marino #define ASN1_STRFLGS_DUMP_DER 0x200 430f5b1c8a1SJohn Marino 431f5b1c8a1SJohn Marino /* All the string flags consistent with RFC2253, 432f5b1c8a1SJohn Marino * escaping control characters isn't essential in 433f5b1c8a1SJohn Marino * RFC2253 but it is advisable anyway. 434f5b1c8a1SJohn Marino */ 435f5b1c8a1SJohn Marino 436f5b1c8a1SJohn Marino #define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ 437f5b1c8a1SJohn Marino ASN1_STRFLGS_ESC_CTRL | \ 438f5b1c8a1SJohn Marino ASN1_STRFLGS_ESC_MSB | \ 439f5b1c8a1SJohn Marino ASN1_STRFLGS_UTF8_CONVERT | \ 440f5b1c8a1SJohn Marino ASN1_STRFLGS_DUMP_UNKNOWN | \ 441f5b1c8a1SJohn Marino ASN1_STRFLGS_DUMP_DER) 442f5b1c8a1SJohn Marino 443f5b1c8a1SJohn Marino DECLARE_STACK_OF(ASN1_INTEGER) 444f5b1c8a1SJohn Marino 445f5b1c8a1SJohn Marino DECLARE_STACK_OF(ASN1_GENERALSTRING) 446f5b1c8a1SJohn Marino 447f5b1c8a1SJohn Marino typedef struct asn1_type_st { 448f5b1c8a1SJohn Marino int type; 449f5b1c8a1SJohn Marino union { 450f5b1c8a1SJohn Marino char *ptr; 451f5b1c8a1SJohn Marino ASN1_BOOLEAN boolean; 452f5b1c8a1SJohn Marino ASN1_STRING * asn1_string; 453f5b1c8a1SJohn Marino ASN1_OBJECT * object; 454f5b1c8a1SJohn Marino ASN1_INTEGER * integer; 455f5b1c8a1SJohn Marino ASN1_ENUMERATED * enumerated; 456f5b1c8a1SJohn Marino ASN1_BIT_STRING * bit_string; 457f5b1c8a1SJohn Marino ASN1_OCTET_STRING * octet_string; 458f5b1c8a1SJohn Marino ASN1_PRINTABLESTRING * printablestring; 459f5b1c8a1SJohn Marino ASN1_T61STRING * t61string; 460f5b1c8a1SJohn Marino ASN1_IA5STRING * ia5string; 461f5b1c8a1SJohn Marino ASN1_GENERALSTRING * generalstring; 462f5b1c8a1SJohn Marino ASN1_BMPSTRING * bmpstring; 463f5b1c8a1SJohn Marino ASN1_UNIVERSALSTRING * universalstring; 464f5b1c8a1SJohn Marino ASN1_UTCTIME * utctime; 465f5b1c8a1SJohn Marino ASN1_GENERALIZEDTIME * generalizedtime; 466f5b1c8a1SJohn Marino ASN1_VISIBLESTRING * visiblestring; 467f5b1c8a1SJohn Marino ASN1_UTF8STRING * utf8string; 468f5b1c8a1SJohn Marino /* set and sequence are left complete and still 469f5b1c8a1SJohn Marino * contain the set or sequence bytes */ 470f5b1c8a1SJohn Marino ASN1_STRING * set; 471f5b1c8a1SJohn Marino ASN1_STRING * sequence; 472f5b1c8a1SJohn Marino ASN1_VALUE * asn1_value; 473f5b1c8a1SJohn Marino } value; 474f5b1c8a1SJohn Marino } ASN1_TYPE; 475f5b1c8a1SJohn Marino 476f5b1c8a1SJohn Marino DECLARE_STACK_OF(ASN1_TYPE) 477f5b1c8a1SJohn Marino 478f5b1c8a1SJohn Marino typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; 479f5b1c8a1SJohn Marino 48072c33676SMaxim Ag ASN1_SEQUENCE_ANY *d2i_ASN1_SEQUENCE_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len); 48172c33676SMaxim Ag int i2d_ASN1_SEQUENCE_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out); 48272c33676SMaxim Ag extern const ASN1_ITEM ASN1_SEQUENCE_ANY_it; 48372c33676SMaxim Ag ASN1_SEQUENCE_ANY *d2i_ASN1_SET_ANY(ASN1_SEQUENCE_ANY **a, const unsigned char **in, long len); 48472c33676SMaxim Ag int i2d_ASN1_SET_ANY(const ASN1_SEQUENCE_ANY *a, unsigned char **out); 48572c33676SMaxim Ag extern const ASN1_ITEM ASN1_SET_ANY_it; 486f5b1c8a1SJohn Marino 487f5b1c8a1SJohn Marino /* This is used to contain a list of bit names */ 488f5b1c8a1SJohn Marino typedef struct BIT_STRING_BITNAME_st { 489f5b1c8a1SJohn Marino int bitnum; 490f5b1c8a1SJohn Marino const char *lname; 491f5b1c8a1SJohn Marino const char *sname; 492f5b1c8a1SJohn Marino } BIT_STRING_BITNAME; 493f5b1c8a1SJohn Marino 494f5b1c8a1SJohn Marino #define B_ASN1_TIME \ 495f5b1c8a1SJohn Marino B_ASN1_UTCTIME | \ 496f5b1c8a1SJohn Marino B_ASN1_GENERALIZEDTIME 497f5b1c8a1SJohn Marino 498f5b1c8a1SJohn Marino #define B_ASN1_PRINTABLE \ 499f5b1c8a1SJohn Marino B_ASN1_NUMERICSTRING| \ 500f5b1c8a1SJohn Marino B_ASN1_PRINTABLESTRING| \ 501f5b1c8a1SJohn Marino B_ASN1_T61STRING| \ 502f5b1c8a1SJohn Marino B_ASN1_IA5STRING| \ 503f5b1c8a1SJohn Marino B_ASN1_BIT_STRING| \ 504f5b1c8a1SJohn Marino B_ASN1_UNIVERSALSTRING|\ 505f5b1c8a1SJohn Marino B_ASN1_BMPSTRING|\ 506f5b1c8a1SJohn Marino B_ASN1_UTF8STRING|\ 507f5b1c8a1SJohn Marino B_ASN1_SEQUENCE|\ 508f5b1c8a1SJohn Marino B_ASN1_UNKNOWN 509f5b1c8a1SJohn Marino 510f5b1c8a1SJohn Marino #define B_ASN1_DIRECTORYSTRING \ 511f5b1c8a1SJohn Marino B_ASN1_PRINTABLESTRING| \ 512f5b1c8a1SJohn Marino B_ASN1_TELETEXSTRING|\ 513f5b1c8a1SJohn Marino B_ASN1_BMPSTRING|\ 514f5b1c8a1SJohn Marino B_ASN1_UNIVERSALSTRING|\ 515f5b1c8a1SJohn Marino B_ASN1_UTF8STRING 516f5b1c8a1SJohn Marino 517f5b1c8a1SJohn Marino #define B_ASN1_DISPLAYTEXT \ 518f5b1c8a1SJohn Marino B_ASN1_IA5STRING| \ 519f5b1c8a1SJohn Marino B_ASN1_VISIBLESTRING| \ 520f5b1c8a1SJohn Marino B_ASN1_BMPSTRING|\ 521f5b1c8a1SJohn Marino B_ASN1_UTF8STRING 522f5b1c8a1SJohn Marino 52372c33676SMaxim Ag #ifndef LIBRESSL_INTERNAL 52472c33676SMaxim Ag #define M_ASN1_IA5STRING_new ASN1_IA5STRING_new 525f5b1c8a1SJohn Marino 52672c33676SMaxim Ag #define M_ASN1_INTEGER_free ASN1_INTEGER_free 52772c33676SMaxim Ag #define M_ASN1_ENUMERATED_free ASN1_ENUMERATED_free 52872c33676SMaxim Ag #define M_ASN1_OCTET_STRING_free ASN1_OCTET_STRING_free 529f5b1c8a1SJohn Marino 53072c33676SMaxim Ag #define M_ASN1_OCTET_STRING_print ASN1_STRING_print 53172c33676SMaxim Ag 53272c33676SMaxim Ag #define M_ASN1_STRING_data ASN1_STRING_data 53372c33676SMaxim Ag #define M_ASN1_STRING_length ASN1_STRING_length 53472c33676SMaxim Ag #endif 53572c33676SMaxim Ag 53672c33676SMaxim Ag ASN1_TYPE *ASN1_TYPE_new(void); 53772c33676SMaxim Ag void ASN1_TYPE_free(ASN1_TYPE *a); 53872c33676SMaxim Ag ASN1_TYPE *d2i_ASN1_TYPE(ASN1_TYPE **a, const unsigned char **in, long len); 53972c33676SMaxim Ag int i2d_ASN1_TYPE(ASN1_TYPE *a, unsigned char **out); 54072c33676SMaxim Ag extern const ASN1_ITEM ASN1_ANY_it; 54172c33676SMaxim Ag 54272c33676SMaxim Ag int ASN1_TYPE_get(const ASN1_TYPE *a); 543f5b1c8a1SJohn Marino void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); 544f5b1c8a1SJohn Marino int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); 54572c33676SMaxim Ag int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); 546f5b1c8a1SJohn Marino 547f5b1c8a1SJohn Marino ASN1_OBJECT *ASN1_OBJECT_new(void); 548f5b1c8a1SJohn Marino void ASN1_OBJECT_free(ASN1_OBJECT *a); 54972c33676SMaxim Ag int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); 550f5b1c8a1SJohn Marino ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, 551f5b1c8a1SJohn Marino long length); 552f5b1c8a1SJohn Marino 55372c33676SMaxim Ag extern const ASN1_ITEM ASN1_OBJECT_it; 554f5b1c8a1SJohn Marino 555f5b1c8a1SJohn Marino DECLARE_STACK_OF(ASN1_OBJECT) 556f5b1c8a1SJohn Marino 557f5b1c8a1SJohn Marino ASN1_STRING *ASN1_STRING_new(void); 558f5b1c8a1SJohn Marino void ASN1_STRING_free(ASN1_STRING *a); 559f5b1c8a1SJohn Marino int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); 560f5b1c8a1SJohn Marino ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); 561f5b1c8a1SJohn Marino ASN1_STRING *ASN1_STRING_type_new(int type); 562f5b1c8a1SJohn Marino int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); 563f5b1c8a1SJohn Marino /* Since this is used to store all sorts of things, via macros, for now, make 564f5b1c8a1SJohn Marino its data void * */ 565f5b1c8a1SJohn Marino int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); 566f5b1c8a1SJohn Marino void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); 567f5b1c8a1SJohn Marino int ASN1_STRING_length(const ASN1_STRING *x); 568f5b1c8a1SJohn Marino void ASN1_STRING_length_set(ASN1_STRING *x, int n); 56972c33676SMaxim Ag int ASN1_STRING_type(const ASN1_STRING *x); 570f5b1c8a1SJohn Marino unsigned char *ASN1_STRING_data(ASN1_STRING *x); 57172c33676SMaxim Ag const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); 572f5b1c8a1SJohn Marino 57372c33676SMaxim Ag ASN1_BIT_STRING *ASN1_BIT_STRING_new(void); 57472c33676SMaxim Ag void ASN1_BIT_STRING_free(ASN1_BIT_STRING *a); 57572c33676SMaxim Ag ASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, const unsigned char **in, long len); 57672c33676SMaxim Ag int i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **out); 57772c33676SMaxim Ag extern const ASN1_ITEM ASN1_BIT_STRING_it; 578f5b1c8a1SJohn Marino int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); 579f5b1c8a1SJohn Marino int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); 58072c33676SMaxim Ag int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); 58172c33676SMaxim Ag int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, 58272c33676SMaxim Ag const unsigned char *flags, int flags_len); 583f5b1c8a1SJohn Marino 584f5b1c8a1SJohn Marino #ifndef OPENSSL_NO_BIO 585f5b1c8a1SJohn Marino int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, 586f5b1c8a1SJohn Marino BIT_STRING_BITNAME *tbl, int indent); 587f5b1c8a1SJohn Marino #endif 58872c33676SMaxim Ag int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); 58972c33676SMaxim Ag int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, 590f5b1c8a1SJohn Marino BIT_STRING_BITNAME *tbl); 591f5b1c8a1SJohn Marino 59272c33676SMaxim Ag ASN1_INTEGER *ASN1_INTEGER_new(void); 59372c33676SMaxim Ag void ASN1_INTEGER_free(ASN1_INTEGER *a); 59472c33676SMaxim Ag ASN1_INTEGER *d2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **in, long len); 59572c33676SMaxim Ag int i2d_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **out); 59672c33676SMaxim Ag extern const ASN1_ITEM ASN1_INTEGER_it; 597f5b1c8a1SJohn Marino ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, 598f5b1c8a1SJohn Marino long length); 599f5b1c8a1SJohn Marino ASN1_INTEGER * ASN1_INTEGER_dup(const ASN1_INTEGER *x); 600f5b1c8a1SJohn Marino int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); 601f5b1c8a1SJohn Marino 60272c33676SMaxim Ag ASN1_ENUMERATED *ASN1_ENUMERATED_new(void); 60372c33676SMaxim Ag void ASN1_ENUMERATED_free(ASN1_ENUMERATED *a); 60472c33676SMaxim Ag ASN1_ENUMERATED *d2i_ASN1_ENUMERATED(ASN1_ENUMERATED **a, const unsigned char **in, long len); 60572c33676SMaxim Ag int i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a, unsigned char **out); 60672c33676SMaxim Ag extern const ASN1_ITEM ASN1_ENUMERATED_it; 607f5b1c8a1SJohn Marino 60872c33676SMaxim Ag int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); 609f5b1c8a1SJohn Marino ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); 610f5b1c8a1SJohn Marino ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, 611f5b1c8a1SJohn Marino int offset_day, long offset_sec); 612f5b1c8a1SJohn Marino int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); 61372c33676SMaxim Ag 614f5b1c8a1SJohn Marino #ifndef LIBRESSL_INTERNAL 615f5b1c8a1SJohn Marino int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); 61672c33676SMaxim Ag #endif /* !LIBRESSL_INTERNAL */ 61772c33676SMaxim Ag 61872c33676SMaxim Ag int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); 619f5b1c8a1SJohn Marino ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, 620f5b1c8a1SJohn Marino time_t t); 621f5b1c8a1SJohn Marino ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, 622f5b1c8a1SJohn Marino time_t t, int offset_day, long offset_sec); 623f5b1c8a1SJohn Marino int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); 624f5b1c8a1SJohn Marino 62572c33676SMaxim Ag ASN1_OCTET_STRING *ASN1_OCTET_STRING_new(void); 62672c33676SMaxim Ag void ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *a); 62772c33676SMaxim Ag ASN1_OCTET_STRING *d2i_ASN1_OCTET_STRING(ASN1_OCTET_STRING **a, const unsigned char **in, long len); 62872c33676SMaxim Ag int i2d_ASN1_OCTET_STRING(ASN1_OCTET_STRING *a, unsigned char **out); 62972c33676SMaxim Ag extern const ASN1_ITEM ASN1_OCTET_STRING_it; 630f5b1c8a1SJohn Marino ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); 631f5b1c8a1SJohn Marino int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, 632f5b1c8a1SJohn Marino const ASN1_OCTET_STRING *b); 633f5b1c8a1SJohn Marino int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, 634f5b1c8a1SJohn Marino int len); 635f5b1c8a1SJohn Marino 63672c33676SMaxim Ag ASN1_VISIBLESTRING *ASN1_VISIBLESTRING_new(void); 63772c33676SMaxim Ag void ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *a); 63872c33676SMaxim Ag ASN1_VISIBLESTRING *d2i_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING **a, const unsigned char **in, long len); 63972c33676SMaxim Ag int i2d_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING *a, unsigned char **out); 64072c33676SMaxim Ag extern const ASN1_ITEM ASN1_VISIBLESTRING_it; 64172c33676SMaxim Ag ASN1_UNIVERSALSTRING *ASN1_UNIVERSALSTRING_new(void); 64272c33676SMaxim Ag void ASN1_UNIVERSALSTRING_free(ASN1_UNIVERSALSTRING *a); 64372c33676SMaxim Ag ASN1_UNIVERSALSTRING *d2i_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING **a, const unsigned char **in, long len); 64472c33676SMaxim Ag int i2d_ASN1_UNIVERSALSTRING(ASN1_UNIVERSALSTRING *a, unsigned char **out); 64572c33676SMaxim Ag extern const ASN1_ITEM ASN1_UNIVERSALSTRING_it; 64672c33676SMaxim Ag ASN1_UTF8STRING *ASN1_UTF8STRING_new(void); 64772c33676SMaxim Ag void ASN1_UTF8STRING_free(ASN1_UTF8STRING *a); 64872c33676SMaxim Ag ASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a, const unsigned char **in, long len); 64972c33676SMaxim Ag int i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a, unsigned char **out); 65072c33676SMaxim Ag extern const ASN1_ITEM ASN1_UTF8STRING_it; 65172c33676SMaxim Ag ASN1_NULL *ASN1_NULL_new(void); 65272c33676SMaxim Ag void ASN1_NULL_free(ASN1_NULL *a); 65372c33676SMaxim Ag ASN1_NULL *d2i_ASN1_NULL(ASN1_NULL **a, const unsigned char **in, long len); 65472c33676SMaxim Ag int i2d_ASN1_NULL(ASN1_NULL *a, unsigned char **out); 65572c33676SMaxim Ag extern const ASN1_ITEM ASN1_NULL_it; 65672c33676SMaxim Ag ASN1_BMPSTRING *ASN1_BMPSTRING_new(void); 65772c33676SMaxim Ag void ASN1_BMPSTRING_free(ASN1_BMPSTRING *a); 65872c33676SMaxim Ag ASN1_BMPSTRING *d2i_ASN1_BMPSTRING(ASN1_BMPSTRING **a, const unsigned char **in, long len); 65972c33676SMaxim Ag int i2d_ASN1_BMPSTRING(ASN1_BMPSTRING *a, unsigned char **out); 66072c33676SMaxim Ag extern const ASN1_ITEM ASN1_BMPSTRING_it; 661f5b1c8a1SJohn Marino 66272c33676SMaxim Ag ASN1_STRING *ASN1_PRINTABLE_new(void); 66372c33676SMaxim Ag void ASN1_PRINTABLE_free(ASN1_STRING *a); 66472c33676SMaxim Ag ASN1_STRING *d2i_ASN1_PRINTABLE(ASN1_STRING **a, const unsigned char **in, long len); 66572c33676SMaxim Ag int i2d_ASN1_PRINTABLE(ASN1_STRING *a, unsigned char **out); 66672c33676SMaxim Ag extern const ASN1_ITEM ASN1_PRINTABLE_it; 667f5b1c8a1SJohn Marino 66872c33676SMaxim Ag ASN1_STRING *DIRECTORYSTRING_new(void); 66972c33676SMaxim Ag void DIRECTORYSTRING_free(ASN1_STRING *a); 67072c33676SMaxim Ag ASN1_STRING *d2i_DIRECTORYSTRING(ASN1_STRING **a, const unsigned char **in, long len); 67172c33676SMaxim Ag int i2d_DIRECTORYSTRING(ASN1_STRING *a, unsigned char **out); 67272c33676SMaxim Ag extern const ASN1_ITEM DIRECTORYSTRING_it; 67372c33676SMaxim Ag ASN1_STRING *DISPLAYTEXT_new(void); 67472c33676SMaxim Ag void DISPLAYTEXT_free(ASN1_STRING *a); 67572c33676SMaxim Ag ASN1_STRING *d2i_DISPLAYTEXT(ASN1_STRING **a, const unsigned char **in, long len); 67672c33676SMaxim Ag int i2d_DISPLAYTEXT(ASN1_STRING *a, unsigned char **out); 67772c33676SMaxim Ag extern const ASN1_ITEM DISPLAYTEXT_it; 67872c33676SMaxim Ag ASN1_PRINTABLESTRING *ASN1_PRINTABLESTRING_new(void); 67972c33676SMaxim Ag void ASN1_PRINTABLESTRING_free(ASN1_PRINTABLESTRING *a); 68072c33676SMaxim Ag ASN1_PRINTABLESTRING *d2i_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING **a, const unsigned char **in, long len); 68172c33676SMaxim Ag int i2d_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING *a, unsigned char **out); 68272c33676SMaxim Ag extern const ASN1_ITEM ASN1_PRINTABLESTRING_it; 68372c33676SMaxim Ag ASN1_T61STRING *ASN1_T61STRING_new(void); 68472c33676SMaxim Ag void ASN1_T61STRING_free(ASN1_T61STRING *a); 68572c33676SMaxim Ag ASN1_T61STRING *d2i_ASN1_T61STRING(ASN1_T61STRING **a, const unsigned char **in, long len); 68672c33676SMaxim Ag int i2d_ASN1_T61STRING(ASN1_T61STRING *a, unsigned char **out); 68772c33676SMaxim Ag extern const ASN1_ITEM ASN1_T61STRING_it; 68872c33676SMaxim Ag ASN1_IA5STRING *ASN1_IA5STRING_new(void); 68972c33676SMaxim Ag void ASN1_IA5STRING_free(ASN1_IA5STRING *a); 69072c33676SMaxim Ag ASN1_IA5STRING *d2i_ASN1_IA5STRING(ASN1_IA5STRING **a, const unsigned char **in, long len); 69172c33676SMaxim Ag int i2d_ASN1_IA5STRING(ASN1_IA5STRING *a, unsigned char **out); 69272c33676SMaxim Ag extern const ASN1_ITEM ASN1_IA5STRING_it; 69372c33676SMaxim Ag ASN1_GENERALSTRING *ASN1_GENERALSTRING_new(void); 69472c33676SMaxim Ag void ASN1_GENERALSTRING_free(ASN1_GENERALSTRING *a); 69572c33676SMaxim Ag ASN1_GENERALSTRING *d2i_ASN1_GENERALSTRING(ASN1_GENERALSTRING **a, const unsigned char **in, long len); 69672c33676SMaxim Ag int i2d_ASN1_GENERALSTRING(ASN1_GENERALSTRING *a, unsigned char **out); 69772c33676SMaxim Ag extern const ASN1_ITEM ASN1_GENERALSTRING_it; 69872c33676SMaxim Ag ASN1_UTCTIME *ASN1_UTCTIME_new(void); 69972c33676SMaxim Ag void ASN1_UTCTIME_free(ASN1_UTCTIME *a); 70072c33676SMaxim Ag ASN1_UTCTIME *d2i_ASN1_UTCTIME(ASN1_UTCTIME **a, const unsigned char **in, long len); 70172c33676SMaxim Ag int i2d_ASN1_UTCTIME(ASN1_UTCTIME *a, unsigned char **out); 70272c33676SMaxim Ag extern const ASN1_ITEM ASN1_UTCTIME_it; 70372c33676SMaxim Ag ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_new(void); 70472c33676SMaxim Ag void ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *a); 70572c33676SMaxim Ag ASN1_GENERALIZEDTIME *d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a, const unsigned char **in, long len); 70672c33676SMaxim Ag int i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *a, unsigned char **out); 70772c33676SMaxim Ag extern const ASN1_ITEM ASN1_GENERALIZEDTIME_it; 70872c33676SMaxim Ag ASN1_TIME *ASN1_TIME_new(void); 70972c33676SMaxim Ag void ASN1_TIME_free(ASN1_TIME *a); 71072c33676SMaxim Ag ASN1_TIME *d2i_ASN1_TIME(ASN1_TIME **a, const unsigned char **in, long len); 71172c33676SMaxim Ag int i2d_ASN1_TIME(ASN1_TIME *a, unsigned char **out); 71272c33676SMaxim Ag extern const ASN1_ITEM ASN1_TIME_it; 713f5b1c8a1SJohn Marino 714*de0e0e4dSAntonio Huete Jimenez int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); 715*de0e0e4dSAntonio Huete Jimenez int ASN1_TIME_compare(const ASN1_TIME *t1, const ASN1_TIME *t2); 716*de0e0e4dSAntonio Huete Jimenez int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t2); 717*de0e0e4dSAntonio Huete Jimenez int ASN1_TIME_normalize(ASN1_TIME *t); 718*de0e0e4dSAntonio Huete Jimenez int ASN1_TIME_set_string_X509(ASN1_TIME *time, const char *str); 719*de0e0e4dSAntonio Huete Jimenez int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, 720*de0e0e4dSAntonio Huete Jimenez const ASN1_TIME *to); 721*de0e0e4dSAntonio Huete Jimenez 72272c33676SMaxim Ag extern const ASN1_ITEM ASN1_OCTET_STRING_NDEF_it; 723f5b1c8a1SJohn Marino 724f5b1c8a1SJohn Marino ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); 72572c33676SMaxim Ag ASN1_TIME *ASN1_TIME_set_tm(ASN1_TIME *s, struct tm *tm); 726f5b1c8a1SJohn Marino ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day, 727f5b1c8a1SJohn Marino long offset_sec); 72872c33676SMaxim Ag int ASN1_TIME_check(const ASN1_TIME *t); 72972c33676SMaxim Ag ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, 730f5b1c8a1SJohn Marino ASN1_GENERALIZEDTIME **out); 731f5b1c8a1SJohn Marino int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); 732f5b1c8a1SJohn Marino 733f5b1c8a1SJohn Marino #ifndef OPENSSL_NO_BIO 73472c33676SMaxim Ag int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); 735f5b1c8a1SJohn Marino int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); 73672c33676SMaxim Ag int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); 737f5b1c8a1SJohn Marino int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); 73872c33676SMaxim Ag int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); 739f5b1c8a1SJohn Marino int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); 74072c33676SMaxim Ag int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); 741f5b1c8a1SJohn Marino #endif 74272c33676SMaxim Ag int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); 743f5b1c8a1SJohn Marino 744f5b1c8a1SJohn Marino int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); 745f5b1c8a1SJohn Marino ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, 746f5b1c8a1SJohn Marino const char *sn, const char *ln); 747f5b1c8a1SJohn Marino 748*de0e0e4dSAntonio Huete Jimenez int ASN1_INTEGER_get_uint64(uint64_t *out_val, const ASN1_INTEGER *aint); 749*de0e0e4dSAntonio Huete Jimenez int ASN1_INTEGER_set_uint64(ASN1_INTEGER *aint, uint64_t val); 750*de0e0e4dSAntonio Huete Jimenez int ASN1_INTEGER_get_int64(int64_t *out_val, const ASN1_INTEGER *aint); 751*de0e0e4dSAntonio Huete Jimenez int ASN1_INTEGER_set_int64(ASN1_INTEGER *aint, int64_t val); 752f5b1c8a1SJohn Marino int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); 753f5b1c8a1SJohn Marino long ASN1_INTEGER_get(const ASN1_INTEGER *a); 754f5b1c8a1SJohn Marino ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); 755f5b1c8a1SJohn Marino BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); 756f5b1c8a1SJohn Marino 757*de0e0e4dSAntonio Huete Jimenez int ASN1_ENUMERATED_get_int64(int64_t *out_val, const ASN1_ENUMERATED *aenum); 758*de0e0e4dSAntonio Huete Jimenez int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *aenum, int64_t val); 759f5b1c8a1SJohn Marino int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); 76072c33676SMaxim Ag long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); 76172c33676SMaxim Ag ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); 76272c33676SMaxim Ag BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); 763f5b1c8a1SJohn Marino 764f5b1c8a1SJohn Marino /* General */ 765f5b1c8a1SJohn Marino /* given a string, return the correct type, max is the maximum length */ 766f5b1c8a1SJohn Marino int ASN1_PRINTABLE_type(const unsigned char *s, int max); 767f5b1c8a1SJohn Marino 768f5b1c8a1SJohn Marino /* SPECIALS */ 769f5b1c8a1SJohn Marino int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, 770f5b1c8a1SJohn Marino int *pclass, long omax); 771f5b1c8a1SJohn Marino void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag, 772f5b1c8a1SJohn Marino int xclass); 773f5b1c8a1SJohn Marino int ASN1_put_eoc(unsigned char **pp); 774f5b1c8a1SJohn Marino int ASN1_object_size(int constructed, int length, int tag); 775f5b1c8a1SJohn Marino 776f5b1c8a1SJohn Marino void *ASN1_item_dup(const ASN1_ITEM *it, void *x); 777f5b1c8a1SJohn Marino 778f5b1c8a1SJohn Marino #ifndef LIBRESSL_INTERNAL 779f5b1c8a1SJohn Marino 780f5b1c8a1SJohn Marino void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); 781f5b1c8a1SJohn Marino 78272c33676SMaxim Ag #endif /* !LIBRESSL_INTERNAL */ 783f5b1c8a1SJohn Marino 784f5b1c8a1SJohn Marino void *ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x); 785f5b1c8a1SJohn Marino 786f5b1c8a1SJohn Marino #define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ 787f5b1c8a1SJohn Marino ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ 788f5b1c8a1SJohn Marino CHECKED_D2I_OF(type, d2i), \ 789f5b1c8a1SJohn Marino in, \ 790f5b1c8a1SJohn Marino CHECKED_PPTR_OF(type, x))) 791f5b1c8a1SJohn Marino 792f5b1c8a1SJohn Marino void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); 793f5b1c8a1SJohn Marino int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); 794f5b1c8a1SJohn Marino 795f5b1c8a1SJohn Marino #define ASN1_i2d_fp_of(type,i2d,out,x) \ 796f5b1c8a1SJohn Marino (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ 797f5b1c8a1SJohn Marino out, \ 798f5b1c8a1SJohn Marino CHECKED_PTR_OF(type, x))) 799f5b1c8a1SJohn Marino 800f5b1c8a1SJohn Marino #define ASN1_i2d_fp_of_const(type,i2d,out,x) \ 801f5b1c8a1SJohn Marino (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ 802f5b1c8a1SJohn Marino out, \ 803f5b1c8a1SJohn Marino CHECKED_PTR_OF(const type, x))) 804f5b1c8a1SJohn Marino 805f5b1c8a1SJohn Marino int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); 80672c33676SMaxim Ag int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, 80772c33676SMaxim Ag unsigned long flags); 808f5b1c8a1SJohn Marino 80972c33676SMaxim Ag int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); 810f5b1c8a1SJohn Marino 811f5b1c8a1SJohn Marino #ifndef OPENSSL_NO_BIO 812f5b1c8a1SJohn Marino void *ASN1_d2i_bio(void *(*xnew)(void), d2i_of_void *d2i, BIO *in, void **x); 813f5b1c8a1SJohn Marino 814f5b1c8a1SJohn Marino #define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ 815f5b1c8a1SJohn Marino ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ 816f5b1c8a1SJohn Marino CHECKED_D2I_OF(type, d2i), \ 817f5b1c8a1SJohn Marino in, \ 818f5b1c8a1SJohn Marino CHECKED_PPTR_OF(type, x))) 819f5b1c8a1SJohn Marino 820f5b1c8a1SJohn Marino void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); 821f5b1c8a1SJohn Marino int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); 822f5b1c8a1SJohn Marino 823f5b1c8a1SJohn Marino #define ASN1_i2d_bio_of(type,i2d,out,x) \ 824f5b1c8a1SJohn Marino (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ 825f5b1c8a1SJohn Marino out, \ 826f5b1c8a1SJohn Marino CHECKED_PTR_OF(type, x))) 827f5b1c8a1SJohn Marino 828f5b1c8a1SJohn Marino #define ASN1_i2d_bio_of_const(type,i2d,out,x) \ 829f5b1c8a1SJohn Marino (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ 830f5b1c8a1SJohn Marino out, \ 831f5b1c8a1SJohn Marino CHECKED_PTR_OF(const type, x))) 832f5b1c8a1SJohn Marino 833f5b1c8a1SJohn Marino int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); 834f5b1c8a1SJohn Marino int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); 835f5b1c8a1SJohn Marino int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); 836f5b1c8a1SJohn Marino int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); 837f5b1c8a1SJohn Marino int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); 83872c33676SMaxim Ag int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); 839f5b1c8a1SJohn Marino int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, 840f5b1c8a1SJohn Marino unsigned char *buf, int off); 841f5b1c8a1SJohn Marino int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); 842f5b1c8a1SJohn Marino int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, int dump); 843f5b1c8a1SJohn Marino #endif 84472c33676SMaxim Ag 84572c33676SMaxim Ag unsigned long ASN1_tag2bit(int tag); 846f5b1c8a1SJohn Marino const char *ASN1_tag2str(int tag); 847f5b1c8a1SJohn Marino 848f5b1c8a1SJohn Marino int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); 849f5b1c8a1SJohn Marino 85072c33676SMaxim Ag int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, const unsigned char *data, int len); 85172c33676SMaxim Ag int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, 852f5b1c8a1SJohn Marino int max_len); 85372c33676SMaxim Ag int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, const unsigned char *data, 85472c33676SMaxim Ag int len); 85572c33676SMaxim Ag int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, 85672c33676SMaxim Ag unsigned char *data, int max_len); 857f5b1c8a1SJohn Marino 858f5b1c8a1SJohn Marino ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, 859f5b1c8a1SJohn Marino ASN1_OCTET_STRING **oct); 86072c33676SMaxim Ag void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); 861f5b1c8a1SJohn Marino 862f5b1c8a1SJohn Marino void ASN1_STRING_set_default_mask(unsigned long mask); 863f5b1c8a1SJohn Marino int ASN1_STRING_set_default_mask_asc(const char *p); 864f5b1c8a1SJohn Marino unsigned long ASN1_STRING_get_default_mask(void); 865f5b1c8a1SJohn Marino int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, 866f5b1c8a1SJohn Marino int inform, unsigned long mask); 867f5b1c8a1SJohn Marino int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, 868f5b1c8a1SJohn Marino int inform, unsigned long mask, long minsize, long maxsize); 869f5b1c8a1SJohn Marino 870f5b1c8a1SJohn Marino ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, 871f5b1c8a1SJohn Marino const unsigned char *in, int inlen, int inform, int nid); 872f5b1c8a1SJohn Marino ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); 873f5b1c8a1SJohn Marino int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); 874f5b1c8a1SJohn Marino void ASN1_STRING_TABLE_cleanup(void); 875f5b1c8a1SJohn Marino 876f5b1c8a1SJohn Marino /* ASN1 template functions */ 877f5b1c8a1SJohn Marino 878f5b1c8a1SJohn Marino /* Old API compatible functions */ 879f5b1c8a1SJohn Marino ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); 880f5b1c8a1SJohn Marino void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); 881f5b1c8a1SJohn Marino ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, 882f5b1c8a1SJohn Marino long len, const ASN1_ITEM *it); 883f5b1c8a1SJohn Marino int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); 884f5b1c8a1SJohn Marino int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); 885f5b1c8a1SJohn Marino 886f5b1c8a1SJohn Marino void ASN1_add_oid_module(void); 887f5b1c8a1SJohn Marino 88872c33676SMaxim Ag ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); 88972c33676SMaxim Ag ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); 890f5b1c8a1SJohn Marino 891f5b1c8a1SJohn Marino /* ASN1 Print flags */ 892f5b1c8a1SJohn Marino 893f5b1c8a1SJohn Marino /* Indicate missing OPTIONAL fields */ 894f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 895f5b1c8a1SJohn Marino /* Mark start and end of SEQUENCE */ 896f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 897f5b1c8a1SJohn Marino /* Mark start and end of SEQUENCE/SET OF */ 898f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 899f5b1c8a1SJohn Marino /* Show the ASN1 type of primitives */ 900f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 901f5b1c8a1SJohn Marino /* Don't show ASN1 type of ANY */ 902f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 903f5b1c8a1SJohn Marino /* Don't show ASN1 type of MSTRINGs */ 904f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 905f5b1c8a1SJohn Marino /* Don't show field names in SEQUENCE */ 906f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 907f5b1c8a1SJohn Marino /* Show structure names of each SEQUENCE field */ 908f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 909f5b1c8a1SJohn Marino /* Don't show structure name even at top level */ 910f5b1c8a1SJohn Marino #define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 911f5b1c8a1SJohn Marino 912f5b1c8a1SJohn Marino int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, 913f5b1c8a1SJohn Marino const ASN1_ITEM *it, const ASN1_PCTX *pctx); 914f5b1c8a1SJohn Marino ASN1_PCTX *ASN1_PCTX_new(void); 915f5b1c8a1SJohn Marino void ASN1_PCTX_free(ASN1_PCTX *p); 91672c33676SMaxim Ag unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); 917f5b1c8a1SJohn Marino void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); 91872c33676SMaxim Ag unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); 919f5b1c8a1SJohn Marino void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); 92072c33676SMaxim Ag unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); 921f5b1c8a1SJohn Marino void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); 92272c33676SMaxim Ag unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); 923f5b1c8a1SJohn Marino void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); 92472c33676SMaxim Ag unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); 925f5b1c8a1SJohn Marino void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); 926f5b1c8a1SJohn Marino 92772c33676SMaxim Ag const BIO_METHOD *BIO_f_asn1(void); 928f5b1c8a1SJohn Marino 929f5b1c8a1SJohn Marino BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); 930f5b1c8a1SJohn Marino 931f5b1c8a1SJohn Marino int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, 932f5b1c8a1SJohn Marino const ASN1_ITEM *it); 933f5b1c8a1SJohn Marino int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, 934f5b1c8a1SJohn Marino const char *hdr, const ASN1_ITEM *it); 935f5b1c8a1SJohn Marino int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, 936f5b1c8a1SJohn Marino int ctype_nid, int econt_nid, STACK_OF(X509_ALGOR) *mdalgs, 937f5b1c8a1SJohn Marino const ASN1_ITEM *it); 938f5b1c8a1SJohn Marino ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); 939f5b1c8a1SJohn Marino int SMIME_crlf_copy(BIO *in, BIO *out, int flags); 940f5b1c8a1SJohn Marino int SMIME_text(BIO *in, BIO *out); 941f5b1c8a1SJohn Marino 942f5b1c8a1SJohn Marino void ERR_load_ASN1_strings(void); 943f5b1c8a1SJohn Marino 944f5b1c8a1SJohn Marino /* Error codes for the ASN1 functions. */ 945f5b1c8a1SJohn Marino 946f5b1c8a1SJohn Marino /* Function codes. */ 947f5b1c8a1SJohn Marino #define ASN1_F_A2D_ASN1_OBJECT 100 948f5b1c8a1SJohn Marino #define ASN1_F_A2I_ASN1_ENUMERATED 101 949f5b1c8a1SJohn Marino #define ASN1_F_A2I_ASN1_INTEGER 102 950f5b1c8a1SJohn Marino #define ASN1_F_A2I_ASN1_STRING 103 951f5b1c8a1SJohn Marino #define ASN1_F_APPEND_EXP 176 952f5b1c8a1SJohn Marino #define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 953f5b1c8a1SJohn Marino #define ASN1_F_ASN1_CB 177 954f5b1c8a1SJohn Marino #define ASN1_F_ASN1_CHECK_TLEN 104 955f5b1c8a1SJohn Marino #define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 956f5b1c8a1SJohn Marino #define ASN1_F_ASN1_COLLECT 106 957f5b1c8a1SJohn Marino #define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 958f5b1c8a1SJohn Marino #define ASN1_F_ASN1_D2I_FP 109 959f5b1c8a1SJohn Marino #define ASN1_F_ASN1_D2I_READ_BIO 107 960f5b1c8a1SJohn Marino #define ASN1_F_ASN1_DIGEST 184 961f5b1c8a1SJohn Marino #define ASN1_F_ASN1_DO_ADB 110 962f5b1c8a1SJohn Marino #define ASN1_F_ASN1_DUP 111 963f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ENUMERATED_SET 112 964f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ENUMERATED_TO_BN 113 965f5b1c8a1SJohn Marino #define ASN1_F_ASN1_EX_C2I 204 966f5b1c8a1SJohn Marino #define ASN1_F_ASN1_FIND_END 190 967f5b1c8a1SJohn Marino #define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 968f5b1c8a1SJohn Marino #define ASN1_F_ASN1_GENERALIZEDTIME_SET 185 969f5b1c8a1SJohn Marino #define ASN1_F_ASN1_GENERATE_V3 178 970f5b1c8a1SJohn Marino #define ASN1_F_ASN1_GET_OBJECT 114 971f5b1c8a1SJohn Marino #define ASN1_F_ASN1_HEADER_NEW 115 972f5b1c8a1SJohn Marino #define ASN1_F_ASN1_I2D_BIO 116 973f5b1c8a1SJohn Marino #define ASN1_F_ASN1_I2D_FP 117 974f5b1c8a1SJohn Marino #define ASN1_F_ASN1_INTEGER_SET 118 975f5b1c8a1SJohn Marino #define ASN1_F_ASN1_INTEGER_TO_BN 119 976f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_D2I_FP 206 977f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_DUP 191 978f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121 979f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_EX_D2I 120 980f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_I2D_BIO 192 981f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_I2D_FP 193 982f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_PACK 198 983f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_SIGN 195 984f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_SIGN_CTX 220 985f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_UNPACK 199 986f5b1c8a1SJohn Marino #define ASN1_F_ASN1_ITEM_VERIFY 197 987f5b1c8a1SJohn Marino #define ASN1_F_ASN1_MBSTRING_NCOPY 122 988f5b1c8a1SJohn Marino #define ASN1_F_ASN1_OBJECT_NEW 123 989f5b1c8a1SJohn Marino #define ASN1_F_ASN1_OUTPUT_DATA 214 990f5b1c8a1SJohn Marino #define ASN1_F_ASN1_PACK_STRING 124 991f5b1c8a1SJohn Marino #define ASN1_F_ASN1_PCTX_NEW 205 992f5b1c8a1SJohn Marino #define ASN1_F_ASN1_PKCS5_PBE_SET 125 993f5b1c8a1SJohn Marino #define ASN1_F_ASN1_SEQ_PACK 126 994f5b1c8a1SJohn Marino #define ASN1_F_ASN1_SEQ_UNPACK 127 995f5b1c8a1SJohn Marino #define ASN1_F_ASN1_SIGN 128 996f5b1c8a1SJohn Marino #define ASN1_F_ASN1_STR2TYPE 179 997f5b1c8a1SJohn Marino #define ASN1_F_ASN1_STRING_SET 186 998f5b1c8a1SJohn Marino #define ASN1_F_ASN1_STRING_TABLE_ADD 129 999f5b1c8a1SJohn Marino #define ASN1_F_ASN1_STRING_TYPE_NEW 130 1000f5b1c8a1SJohn Marino #define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 1001f5b1c8a1SJohn Marino #define ASN1_F_ASN1_TEMPLATE_NEW 133 1002f5b1c8a1SJohn Marino #define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 1003f5b1c8a1SJohn Marino #define ASN1_F_ASN1_TIME_ADJ 217 1004f5b1c8a1SJohn Marino #define ASN1_F_ASN1_TIME_SET 175 1005f5b1c8a1SJohn Marino #define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 1006f5b1c8a1SJohn Marino #define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 1007f5b1c8a1SJohn Marino #define ASN1_F_ASN1_UNPACK_STRING 136 1008f5b1c8a1SJohn Marino #define ASN1_F_ASN1_UTCTIME_ADJ 218 1009f5b1c8a1SJohn Marino #define ASN1_F_ASN1_UTCTIME_SET 187 1010f5b1c8a1SJohn Marino #define ASN1_F_ASN1_VERIFY 137 1011f5b1c8a1SJohn Marino #define ASN1_F_B64_READ_ASN1 209 1012f5b1c8a1SJohn Marino #define ASN1_F_B64_WRITE_ASN1 210 1013f5b1c8a1SJohn Marino #define ASN1_F_BIO_NEW_NDEF 208 1014f5b1c8a1SJohn Marino #define ASN1_F_BITSTR_CB 180 1015f5b1c8a1SJohn Marino #define ASN1_F_BN_TO_ASN1_ENUMERATED 138 1016f5b1c8a1SJohn Marino #define ASN1_F_BN_TO_ASN1_INTEGER 139 1017f5b1c8a1SJohn Marino #define ASN1_F_C2I_ASN1_BIT_STRING 189 1018f5b1c8a1SJohn Marino #define ASN1_F_C2I_ASN1_INTEGER 194 1019f5b1c8a1SJohn Marino #define ASN1_F_C2I_ASN1_OBJECT 196 1020f5b1c8a1SJohn Marino #define ASN1_F_COLLECT_DATA 140 1021f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_BIT_STRING 141 1022f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_BOOLEAN 142 1023f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_BYTES 143 1024f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_GENERALIZEDTIME 144 1025f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_HEADER 145 1026f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_INTEGER 146 1027f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_OBJECT 147 1028f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_SET 148 1029f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_TYPE_BYTES 149 1030f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_UINTEGER 150 1031f5b1c8a1SJohn Marino #define ASN1_F_D2I_ASN1_UTCTIME 151 1032f5b1c8a1SJohn Marino #define ASN1_F_D2I_AUTOPRIVATEKEY 207 1033f5b1c8a1SJohn Marino #define ASN1_F_D2I_NETSCAPE_RSA 152 1034f5b1c8a1SJohn Marino #define ASN1_F_D2I_NETSCAPE_RSA_2 153 1035f5b1c8a1SJohn Marino #define ASN1_F_D2I_PRIVATEKEY 154 1036f5b1c8a1SJohn Marino #define ASN1_F_D2I_PUBLICKEY 155 1037f5b1c8a1SJohn Marino #define ASN1_F_D2I_RSA_NET 200 1038f5b1c8a1SJohn Marino #define ASN1_F_D2I_RSA_NET_2 201 1039f5b1c8a1SJohn Marino #define ASN1_F_D2I_X509 156 1040f5b1c8a1SJohn Marino #define ASN1_F_D2I_X509_CINF 157 1041f5b1c8a1SJohn Marino #define ASN1_F_D2I_X509_PKEY 159 1042f5b1c8a1SJohn Marino #define ASN1_F_I2D_ASN1_BIO_STREAM 211 1043f5b1c8a1SJohn Marino #define ASN1_F_I2D_ASN1_SET 188 1044f5b1c8a1SJohn Marino #define ASN1_F_I2D_ASN1_TIME 160 1045f5b1c8a1SJohn Marino #define ASN1_F_I2D_DSA_PUBKEY 161 1046f5b1c8a1SJohn Marino #define ASN1_F_I2D_EC_PUBKEY 181 1047f5b1c8a1SJohn Marino #define ASN1_F_I2D_PRIVATEKEY 163 1048f5b1c8a1SJohn Marino #define ASN1_F_I2D_PUBLICKEY 164 1049f5b1c8a1SJohn Marino #define ASN1_F_I2D_RSA_NET 162 1050f5b1c8a1SJohn Marino #define ASN1_F_I2D_RSA_PUBKEY 165 1051f5b1c8a1SJohn Marino #define ASN1_F_LONG_C2I 166 1052f5b1c8a1SJohn Marino #define ASN1_F_OID_MODULE_INIT 174 1053f5b1c8a1SJohn Marino #define ASN1_F_PARSE_TAGGING 182 1054f5b1c8a1SJohn Marino #define ASN1_F_PKCS5_PBE2_SET_IV 167 1055f5b1c8a1SJohn Marino #define ASN1_F_PKCS5_PBE_SET 202 1056f5b1c8a1SJohn Marino #define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 1057f5b1c8a1SJohn Marino #define ASN1_F_PKCS5_PBKDF2_SET 219 1058f5b1c8a1SJohn Marino #define ASN1_F_SMIME_READ_ASN1 212 1059f5b1c8a1SJohn Marino #define ASN1_F_SMIME_TEXT 213 1060f5b1c8a1SJohn Marino #define ASN1_F_X509_CINF_NEW 168 1061f5b1c8a1SJohn Marino #define ASN1_F_X509_CRL_ADD0_REVOKED 169 1062f5b1c8a1SJohn Marino #define ASN1_F_X509_INFO_NEW 170 1063f5b1c8a1SJohn Marino #define ASN1_F_X509_NAME_ENCODE 203 1064f5b1c8a1SJohn Marino #define ASN1_F_X509_NAME_EX_D2I 158 1065f5b1c8a1SJohn Marino #define ASN1_F_X509_NAME_EX_NEW 171 1066f5b1c8a1SJohn Marino #define ASN1_F_X509_NEW 172 1067f5b1c8a1SJohn Marino #define ASN1_F_X509_PKEY_NEW 173 1068f5b1c8a1SJohn Marino 1069f5b1c8a1SJohn Marino /* Reason codes. */ 1070f5b1c8a1SJohn Marino #define ASN1_R_ADDING_OBJECT 171 1071f5b1c8a1SJohn Marino #define ASN1_R_ASN1_PARSE_ERROR 203 1072f5b1c8a1SJohn Marino #define ASN1_R_ASN1_SIG_PARSE_ERROR 204 1073f5b1c8a1SJohn Marino #define ASN1_R_AUX_ERROR 100 1074f5b1c8a1SJohn Marino #define ASN1_R_BAD_CLASS 101 1075f5b1c8a1SJohn Marino #define ASN1_R_BAD_OBJECT_HEADER 102 1076f5b1c8a1SJohn Marino #define ASN1_R_BAD_PASSWORD_READ 103 1077f5b1c8a1SJohn Marino #define ASN1_R_BAD_TAG 104 1078f1828659SDaniel Fojt #define ASN1_R_BAD_TEMPLATE 230 1079f5b1c8a1SJohn Marino #define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 1080f5b1c8a1SJohn Marino #define ASN1_R_BN_LIB 105 1081f5b1c8a1SJohn Marino #define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 1082f5b1c8a1SJohn Marino #define ASN1_R_BUFFER_TOO_SMALL 107 1083f5b1c8a1SJohn Marino #define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 1084f5b1c8a1SJohn Marino #define ASN1_R_CONTEXT_NOT_INITIALISED 217 1085f5b1c8a1SJohn Marino #define ASN1_R_DATA_IS_WRONG 109 1086f5b1c8a1SJohn Marino #define ASN1_R_DECODE_ERROR 110 1087f5b1c8a1SJohn Marino #define ASN1_R_DECODING_ERROR 111 1088f5b1c8a1SJohn Marino #define ASN1_R_DEPTH_EXCEEDED 174 1089f5b1c8a1SJohn Marino #define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 1090f5b1c8a1SJohn Marino #define ASN1_R_ENCODE_ERROR 112 1091f5b1c8a1SJohn Marino #define ASN1_R_ERROR_GETTING_TIME 173 1092f5b1c8a1SJohn Marino #define ASN1_R_ERROR_LOADING_SECTION 172 1093f5b1c8a1SJohn Marino #define ASN1_R_ERROR_PARSING_SET_ELEMENT 113 1094f5b1c8a1SJohn Marino #define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 1095f5b1c8a1SJohn Marino #define ASN1_R_EXPECTING_AN_INTEGER 115 1096f5b1c8a1SJohn Marino #define ASN1_R_EXPECTING_AN_OBJECT 116 1097f5b1c8a1SJohn Marino #define ASN1_R_EXPECTING_A_BOOLEAN 117 1098f5b1c8a1SJohn Marino #define ASN1_R_EXPECTING_A_TIME 118 1099f5b1c8a1SJohn Marino #define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 1100f5b1c8a1SJohn Marino #define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 1101f5b1c8a1SJohn Marino #define ASN1_R_FIELD_MISSING 121 1102f5b1c8a1SJohn Marino #define ASN1_R_FIRST_NUM_TOO_LARGE 122 1103f5b1c8a1SJohn Marino #define ASN1_R_HEADER_TOO_LONG 123 1104f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 1105f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_BOOLEAN 176 1106f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_CHARACTERS 124 1107f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_FORMAT 177 1108f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_HEX 178 1109f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 1110f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_INTEGER 180 1111*de0e0e4dSAntonio Huete Jimenez #define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 1112f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_NESTED_TAGGING 181 1113f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_NULL 125 1114f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_NULL_VALUE 182 1115f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_OBJECT 183 1116f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 1117f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 1118f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_TAGGED_ANY 127 1119f5b1c8a1SJohn Marino #define ASN1_R_ILLEGAL_TIME_VALUE 184 1120f5b1c8a1SJohn Marino #define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 1121f5b1c8a1SJohn Marino #define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 1122f5b1c8a1SJohn Marino #define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 1123f5b1c8a1SJohn Marino #define ASN1_R_INVALID_BMPSTRING_LENGTH 129 1124f5b1c8a1SJohn Marino #define ASN1_R_INVALID_DIGIT 130 1125f5b1c8a1SJohn Marino #define ASN1_R_INVALID_MIME_TYPE 205 1126f5b1c8a1SJohn Marino #define ASN1_R_INVALID_MODIFIER 186 1127f5b1c8a1SJohn Marino #define ASN1_R_INVALID_NUMBER 187 1128f5b1c8a1SJohn Marino #define ASN1_R_INVALID_OBJECT_ENCODING 216 1129f5b1c8a1SJohn Marino #define ASN1_R_INVALID_SEPARATOR 131 1130f5b1c8a1SJohn Marino #define ASN1_R_INVALID_TIME_FORMAT 132 1131f5b1c8a1SJohn Marino #define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 1132f5b1c8a1SJohn Marino #define ASN1_R_INVALID_UTF8STRING 134 1133f5b1c8a1SJohn Marino #define ASN1_R_IV_TOO_LARGE 135 1134f5b1c8a1SJohn Marino #define ASN1_R_LENGTH_ERROR 136 1135f5b1c8a1SJohn Marino #define ASN1_R_LIST_ERROR 188 1136f5b1c8a1SJohn Marino #define ASN1_R_MIME_NO_CONTENT_TYPE 206 1137f5b1c8a1SJohn Marino #define ASN1_R_MIME_PARSE_ERROR 207 1138f5b1c8a1SJohn Marino #define ASN1_R_MIME_SIG_PARSE_ERROR 208 1139f5b1c8a1SJohn Marino #define ASN1_R_MISSING_EOC 137 1140f5b1c8a1SJohn Marino #define ASN1_R_MISSING_SECOND_NUMBER 138 1141f5b1c8a1SJohn Marino #define ASN1_R_MISSING_VALUE 189 1142f5b1c8a1SJohn Marino #define ASN1_R_MSTRING_NOT_UNIVERSAL 139 1143f5b1c8a1SJohn Marino #define ASN1_R_MSTRING_WRONG_TAG 140 1144f5b1c8a1SJohn Marino #define ASN1_R_NESTED_ASN1_STRING 197 114572c33676SMaxim Ag #define ASN1_R_NESTED_TOO_DEEP 219 1146f5b1c8a1SJohn Marino #define ASN1_R_NON_HEX_CHARACTERS 141 1147f5b1c8a1SJohn Marino #define ASN1_R_NOT_ASCII_FORMAT 190 1148f5b1c8a1SJohn Marino #define ASN1_R_NOT_ENOUGH_DATA 142 1149f5b1c8a1SJohn Marino #define ASN1_R_NO_CONTENT_TYPE 209 1150f5b1c8a1SJohn Marino #define ASN1_R_NO_DEFAULT_DIGEST 201 1151f5b1c8a1SJohn Marino #define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 1152f5b1c8a1SJohn Marino #define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 1153f5b1c8a1SJohn Marino #define ASN1_R_NO_MULTIPART_BOUNDARY 211 1154f5b1c8a1SJohn Marino #define ASN1_R_NO_SIG_CONTENT_TYPE 212 1155f5b1c8a1SJohn Marino #define ASN1_R_NULL_IS_WRONG_LENGTH 144 1156f5b1c8a1SJohn Marino #define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 1157f5b1c8a1SJohn Marino #define ASN1_R_ODD_NUMBER_OF_CHARS 145 1158f5b1c8a1SJohn Marino #define ASN1_R_PRIVATE_KEY_HEADER_MISSING 146 1159f5b1c8a1SJohn Marino #define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 1160f5b1c8a1SJohn Marino #define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 1161f5b1c8a1SJohn Marino #define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 1162f5b1c8a1SJohn Marino #define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 1163f5b1c8a1SJohn Marino #define ASN1_R_SHORT_LINE 150 1164f5b1c8a1SJohn Marino #define ASN1_R_SIG_INVALID_MIME_TYPE 213 1165f5b1c8a1SJohn Marino #define ASN1_R_STREAMING_NOT_SUPPORTED 202 1166f5b1c8a1SJohn Marino #define ASN1_R_STRING_TOO_LONG 151 1167f5b1c8a1SJohn Marino #define ASN1_R_STRING_TOO_SHORT 152 1168f5b1c8a1SJohn Marino #define ASN1_R_TAG_VALUE_TOO_HIGH 153 1169f5b1c8a1SJohn Marino #define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 1170f5b1c8a1SJohn Marino #define ASN1_R_TIME_NOT_ASCII_FORMAT 193 1171*de0e0e4dSAntonio Huete Jimenez #define ASN1_R_TOO_LARGE 223 1172f5b1c8a1SJohn Marino #define ASN1_R_TOO_LONG 155 1173*de0e0e4dSAntonio Huete Jimenez #define ASN1_R_TOO_SMALL 224 1174f5b1c8a1SJohn Marino #define ASN1_R_TYPE_NOT_CONSTRUCTED 156 1175*de0e0e4dSAntonio Huete Jimenez #define ASN1_R_TYPE_NOT_PRIMITIVE 231 1176f5b1c8a1SJohn Marino #define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 1177f5b1c8a1SJohn Marino #define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 1178f5b1c8a1SJohn Marino #define ASN1_R_UNEXPECTED_EOC 159 1179f5b1c8a1SJohn Marino #define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 1180f5b1c8a1SJohn Marino #define ASN1_R_UNKNOWN_FORMAT 160 1181f5b1c8a1SJohn Marino #define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 1182f5b1c8a1SJohn Marino #define ASN1_R_UNKNOWN_OBJECT_TYPE 162 1183f5b1c8a1SJohn Marino #define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 1184f5b1c8a1SJohn Marino #define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 1185f5b1c8a1SJohn Marino #define ASN1_R_UNKNOWN_TAG 194 1186f5b1c8a1SJohn Marino #define ASN1_R_UNKOWN_FORMAT 195 1187f5b1c8a1SJohn Marino #define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 1188f5b1c8a1SJohn Marino #define ASN1_R_UNSUPPORTED_CIPHER 165 1189f5b1c8a1SJohn Marino #define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 166 1190f5b1c8a1SJohn Marino #define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 1191f5b1c8a1SJohn Marino #define ASN1_R_UNSUPPORTED_TYPE 196 1192*de0e0e4dSAntonio Huete Jimenez #define ASN1_R_WRONG_INTEGER_TYPE 225 1193f5b1c8a1SJohn Marino #define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 1194f5b1c8a1SJohn Marino #define ASN1_R_WRONG_TAG 168 1195f5b1c8a1SJohn Marino #define ASN1_R_WRONG_TYPE 169 1196f5b1c8a1SJohn Marino 119772c33676SMaxim Ag int ASN1_time_parse(const char *_bytes, size_t _len, struct tm *_tm, int _mode); 119872c33676SMaxim Ag int ASN1_time_tm_cmp(struct tm *_tm1, struct tm *_tm2); 1199f5b1c8a1SJohn Marino #ifdef __cplusplus 1200f5b1c8a1SJohn Marino } 1201f5b1c8a1SJohn Marino #endif 1202f5b1c8a1SJohn Marino #endif 1203