14c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* crypto/asn1/asn1.h */ 24c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 34c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * All rights reserved. 44c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 54c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This package is an SSL implementation written 64c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * by Eric Young (eay@cryptsoft.com). 74c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The implementation was written so as to conform with Netscapes SSL. 84c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 94c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This library is free for commercial and non-commercial use as long as 104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the following conditions are aheared to. The following conditions 114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * apply to all code found in this distribution, be it the RC4, RSA, 124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * lhash, DES, etc., code; not just the SSL code. The SSL documentation 134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * included with this distribution is covered by the same copyright terms 144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com). 154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Copyright remains Eric Young's, and as such any Copyright notices in 174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the code are not to be removed. 184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * If this package is used in a product, Eric Young should be given attribution 194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * as the author of the parts of the library used. 204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * This can be in the form of a textual message at program startup or 214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * in documentation (online or textual) provided with the package. 224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Redistribution and use in source and binary forms, with or without 244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * modification, are permitted provided that the following conditions 254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * are met: 264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 1. Redistributions of source code must retain the copyright 274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * notice, this list of conditions and the following disclaimer. 284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 2. Redistributions in binary form must reproduce the above copyright 294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * notice, this list of conditions and the following disclaimer in the 304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * documentation and/or other materials provided with the distribution. 314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3. All advertising materials mentioning features or use of this software 324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * must display the following acknowledgement: 334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * "This product includes cryptographic software written by 344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Eric Young (eay@cryptsoft.com)" 354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The word 'cryptographic' can be left out if the rouines from the library 364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * being used are not cryptographic related :-). 374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 4. If you include any Windows specific code (or a derivative thereof) from 384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the apps directory (application code) you must include an acknowledgement: 394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SUCH DAMAGE. 524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The licence and distribution terms for any publically available version or 544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * derivative of this code cannot be changed. i.e. this code cannot simply be 554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * copied and put under another distribution licence 564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * [including the GNU Public Licence.] 574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef HEADER_ASN1_H 604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define HEADER_ASN1_H 614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/base.h> 634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <time.h> 654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO 674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/bio.h> 684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/stack.h> 704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#include <openssl/bn.h> 724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef __cplusplus 744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyextern "C" { 754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_UNIVERSAL 0x00 784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_APPLICATION 0x40 794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_CONTEXT_SPECIFIC 0x80 804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_PRIVATE 0xc0 814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_CONSTRUCTED 0x20 834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_PRIMITIVE_TAG 0x1f 844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_PRIMATIVE_TAG 0x1f 854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_APP_CHOOSE -2 /* let the recipient choose */ 874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_OTHER -3 /* used in ASN1_TYPE */ 884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_ANY -4 /* used in ASN1 template code */ 894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_NEG 0x100 /* negative flag */ 914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_UNDEF -1 934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_EOC 0 944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_BOOLEAN 1 /**/ 954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_INTEGER 2 964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) 974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_BIT_STRING 3 984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_OCTET_STRING 4 994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_NULL 5 1004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_OBJECT 6 1014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_OBJECT_DESCRIPTOR 7 1024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_EXTERNAL 8 1034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_REAL 9 1044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_ENUMERATED 10 1054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) 1064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_UTF8STRING 12 1074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_SEQUENCE 16 1084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_SET 17 1094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_NUMERICSTRING 18 /**/ 1104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_PRINTABLESTRING 19 1114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_T61STRING 20 1124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_TELETEXSTRING 20 /* alias */ 1134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_VIDEOTEXSTRING 21 /**/ 1144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_IA5STRING 22 1154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_UTCTIME 23 1164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_GENERALIZEDTIME 24 /**/ 1174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_GRAPHICSTRING 25 /**/ 1184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_ISO64STRING 26 /**/ 1194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_VISIBLESTRING 26 /* alias */ 1204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_GENERALSTRING 27 /**/ 1214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_UNIVERSALSTRING 28 /**/ 1224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define V_ASN1_BMPSTRING 30 1234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* For use with d2i_ASN1_type_bytes() */ 1254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_NUMERICSTRING 0x0001 1264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_PRINTABLESTRING 0x0002 1274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_T61STRING 0x0004 1284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_TELETEXSTRING 0x0004 1294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_VIDEOTEXSTRING 0x0008 1304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_IA5STRING 0x0010 1314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_GRAPHICSTRING 0x0020 1324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_ISO64STRING 0x0040 1334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_VISIBLESTRING 0x0040 1344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_GENERALSTRING 0x0080 1354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_UNIVERSALSTRING 0x0100 1364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_OCTET_STRING 0x0200 1374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_BIT_STRING 0x0400 1384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_BMPSTRING 0x0800 1394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_UNKNOWN 0x1000 1404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_UTF8STRING 0x2000 1414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_UTCTIME 0x4000 1424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_GENERALIZEDTIME 0x8000 1434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_SEQUENCE 0x10000 1444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* For use with ASN1_mbstring_copy() */ 1464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define MBSTRING_FLAG 0x1000 1474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define MBSTRING_UTF8 (MBSTRING_FLAG) 1484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define MBSTRING_ASC (MBSTRING_FLAG|1) 1494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define MBSTRING_BMP (MBSTRING_FLAG|2) 1504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define MBSTRING_UNIV (MBSTRING_FLAG|4) 1514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SMIME_OLDMIME 0x400 1534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SMIME_CRLFEOL 0x800 1544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define SMIME_STREAM 0x1000 1554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_SET_OF(type) /* filled in by mkstack.pl */ 1574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define IMPLEMENT_ASN1_SET_OF(type) /* nothing, no longer needed */ 1584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* We MUST make sure that, except for constness, asn1_ctx_st and 1604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley asn1_const_ctx are exactly the same. Fortunately, as soon as 1614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley the old ASN1 parsing macros are gone, we can throw this away 1624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley as well... */ 1634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct asn1_ctx_st 1644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 1654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned char *p;/* work char pointer */ 1664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int eos; /* end of sequence read for indefinite encoding */ 1674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int error; /* error code to use when returning an error */ 1684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int inf; /* constructed if 0x20, indefinite is 0x21 */ 1694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int tag; /* tag from last 'get object' */ 1704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int xclass; /* class from last 'get object' */ 1714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley long slen; /* length of last 'get object' */ 1724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned char *max; /* largest value of p allowed */ 1734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned char *q;/* temporary variable */ 1744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned char **pp;/* variable */ 1754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int line; /* used in error processing */ 1764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } ASN1_CTX; 1774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct asn1_const_ctx_st 1794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 1804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const unsigned char *p;/* work char pointer */ 1814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int eos; /* end of sequence read for indefinite encoding */ 1824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int error; /* error code to use when returning an error */ 1834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int inf; /* constructed if 0x20, indefinite is 0x21 */ 1844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int tag; /* tag from last 'get object' */ 1854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int xclass; /* class from last 'get object' */ 1864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley long slen; /* length of last 'get object' */ 1874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const unsigned char *max; /* largest value of p allowed */ 1884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const unsigned char *q;/* temporary variable */ 1894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const unsigned char **pp;/* variable */ 1904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int line; /* used in error processing */ 1914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } ASN1_const_CTX; 1924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* These are used internally in the ASN1_OBJECT to keep track of 1944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * whether the names and data need to be free()ed */ 1954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_OBJECT_FLAG_DYNAMIC 0x01 /* internal use */ 1964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_OBJECT_FLAG_CRITICAL 0x02 /* critical x509v3 object id */ 1974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04 /* internal use */ 1984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08 /* internal use */ 1994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct asn1_object_st 2004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 2014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const char *sn,*ln; 2024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int nid; 2034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int length; 2044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const unsigned char *data; /* data remains const after init */ 2054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int flags; /* Should we free this one */ 2064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley }; 2074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRING_FLAG_BITS_LEFT 0x08 /* Set if 0x07 has bits left value */ 2094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This indicates that the ASN1_STRING is not a real value but just a place 2104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * holder for the location where indefinite length constructed data should 2114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * be inserted in the memory buffer 2124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 2134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRING_FLAG_NDEF 0x010 2144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This flag is used by the CMS code to indicate that a string is not 2164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * complete and is a place holder for content when it had all been 2174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * accessed. The flag will be reset when content has been written to it. 2184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 2194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRING_FLAG_CONT 0x020 2214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING 2224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * type. 2234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 2244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRING_FLAG_MSTRING 0x040 2254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This is the base type that holds just about everything :-) */ 2264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct asn1_string_st 2274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 2284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int length; 2294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int type; 2304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned char *data; 2314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley /* The value of the following field depends on the type being 2324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * held. It is mostly being used for BIT_STRING so if the 2334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * input data has a non-zero 'unused bits' value, it will be 2344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * handled correctly */ 2354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley long flags; 2364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley }; 2374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ASN1_ENCODING structure: this is used to save the received 2394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * encoding of an ASN1 type. This is useful to get round 2404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * problems with invalid encodings which can break signatures. 2414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 2424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ASN1_ENCODING_st 2444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 2454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned char *enc; /* DER encoding */ 2464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley long len; /* Length of encoding */ 2474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int modified; /* set to 1 if 'enc' is invalid */ 2484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } ASN1_ENCODING; 2494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Used with ASN1 LONG type: if a long is set to this it is omitted */ 2514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_LONG_UNDEF 0x7fffffffL 2524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define STABLE_FLAGS_MALLOC 0x01 2544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define STABLE_NO_MASK 0x02 2554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DIRSTRING_TYPE \ 2564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) 2574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) 2584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct asn1_string_table_st { 2604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int nid; 2614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley long minsize; 2624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley long maxsize; 2634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned long mask; 2644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley unsigned long flags; 2654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley} ASN1_STRING_TABLE; 2664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* size limits: this stuff is taken straight from RFC2459 */ 2684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_name 32768 2704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_common_name 64 2714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_locality_name 128 2724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_state_name 128 2734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_organization_name 64 2744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_organization_unit_name 64 2754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_title 64 2764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ub_email_address 128 2774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Declarations for template structures: for full definitions 2794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * see asn1t.h 2804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 2814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; 2824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ASN1_TLC_st ASN1_TLC; 2834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This is just an opaque pointer */ 2844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct ASN1_VALUE_st ASN1_VALUE; 2854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Declare ASN1 functions: the implement macro in in asn1t.h */ 2874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) 2894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ 2914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) 2924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_FUNCTIONS_name(type, name) \ 2944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ 2954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) 2964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 2974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ 2984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ 2994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) 3004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ 302eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT type *d2i_##name(type **a, const unsigned char **in, long len); \ 303eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT int i2d_##name(type *a, unsigned char **out); \ 3044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ITEM(itname) 3054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ 307eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT type *d2i_##name(type **a, const unsigned char **in, long len); \ 308eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT int i2d_##name(const type *a, unsigned char **out); \ 3094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ITEM(name) 3104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_NDEF_FUNCTION(name) \ 312eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT int i2d_##name##_NDEF(name *a, unsigned char **out); 3134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_FUNCTIONS_const(name) \ 3154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ 3164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) 3174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ 319eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT type *name##_new(void); \ 320eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT void name##_free(type *a); 3214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_PRINT_FUNCTION(stname) \ 3234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) 3244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ 326eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley OPENSSL_EXPORT int fname##_print_ctx(BIO *out, stname *x, int indent, \ 3274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const ASN1_PCTX *pctx); 3284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define D2I_OF(type) type *(*)(type **,const unsigned char **,long) 3304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define I2D_OF(type) int (*)(type *,unsigned char **) 3314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define I2D_OF_const(type) int (*)(const type *,unsigned char **) 3324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CHECKED_D2I_OF(type, d2i) \ 3344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) 3354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CHECKED_I2D_OF(type, i2d) \ 3364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) 3374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CHECKED_NEW_OF(type, xnew) \ 3384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) 3394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CHECKED_PPTR_OF(type, p) \ 3404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((void**) (1 ? p : (type**)0)) 3414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) 3434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) 3444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) 3454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyTYPEDEF_D2I2D_OF(void); 3474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* The following macros and typedefs allow an ASN1_ITEM 3494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to be embedded in a structure and referenced. Since 3504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the ASN1_ITEM pointers need to be globally accessible 3514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * (possibly from shared libraries) they may exist in 3524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * different forms. On platforms that support it the 3534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ASN1_ITEM structure itself will be globally exported. 3544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Other platforms will export a function that returns 3554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * an ASN1_ITEM pointer. 3564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * To handle both cases transparently the macros below 3584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * should be used instead of hard coding an ASN1_ITEM 3594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * pointer in a structure. 3604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * The structure will look like this: 3624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * typedef struct SOMETHING_st { 3644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ... 3654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ASN1_ITEM_EXP *iptr; 3664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * ... 3674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * } SOMETHING; 3684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * It would be initialised as e.g.: 3704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; 3724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * and the actual pointer extracted with: 3744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); 3764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * Finally an ASN1_ITEM pointer can be extracted from an 3784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * appropriate reference with: ASN1_ITEM_rptr(X509). This 3794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * would be used when a function takes an ASN1_ITEM * argument. 3804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 3814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 3824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ASN1_ITEM pointer exported type */ 3844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef const ASN1_ITEM ASN1_ITEM_EXP; 3854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Macro to obtain ASN1_ITEM pointer from exported type */ 3874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_ITEM_ptr(iptr) (iptr) 3884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Macro to include ASN1_ITEM pointer from base type */ 3904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_ITEM_ref(iptr) (&(iptr##_it)) 3914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_ITEM_rptr(ref) (&(ref##_it)) 3934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define DECLARE_ASN1_ITEM(name) \ 3954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley extern const ASN1_ITEM name##_it; 3964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Parameters used by ASN1_STRING_print_ex() */ 3984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 3994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* These determine which characters to escape: 4004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * RFC2253 special characters, control characters and 4014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * MSB set characters 4024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_ESC_2253 1 4054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_ESC_CTRL 2 4064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_ESC_MSB 4 4074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This flag determines how we do escaping: normally 4104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * RC2253 backslash only, set this to use backslash and 4114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * quote. 4124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_ESC_QUOTE 8 4154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* These three flags are internal use only. */ 4184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Character is a valid PrintableString character */ 4204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CHARTYPE_PRINTABLESTRING 0x10 4214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Character needs escaping if it is the first character */ 4224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CHARTYPE_FIRST_ESC_2253 0x20 4234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Character needs escaping if it is the last character */ 4244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define CHARTYPE_LAST_ESC_2253 0x40 4254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* NB the internal flags are safely reused below by flags 4274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * handled at the top level. 4284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* If this is set we convert all character strings 4314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * to UTF8 first 4324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_UTF8_CONVERT 0x10 4354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* If this is set we don't attempt to interpret content: 4374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * just assume all strings are 1 byte per character. This 4384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * will produce some pretty odd looking output! 4394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_IGNORE_TYPE 0x20 4424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* If this is set we include the string type in the output */ 4444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_SHOW_TYPE 0x40 4454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This determines which strings to display and which to 4474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * 'dump' (hex dump of content octets or DER encoding). We can 4484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * only dump non character strings or everything. If we 4494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * don't dump 'unknown' they are interpreted as character 4504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * strings with 1 octet per character and are subject to 4514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * the usual escaping options. 4524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_DUMP_ALL 0x80 4554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 4564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* These determine what 'dumping' does, we can dump the 4584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * content octets or the DER encoding: both use the 4594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * RFC2253 #XXXXX notation. 4604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_DUMP_DER 0x200 4634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* All the string flags consistent with RFC2253, 4654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * escaping control characters isn't essential in 4664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * RFC2253 but it is advisable anyway. 4674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 4684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ 4704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRFLGS_ESC_CTRL | \ 4714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRFLGS_ESC_MSB | \ 4724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRFLGS_UTF8_CONVERT | \ 4734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRFLGS_DUMP_UNKNOWN | \ 4744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRFLGS_DUMP_DER) 4754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_SET_OF(ASN1_INTEGER) 4774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 4784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct asn1_type_st 4794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 4804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int type; 4814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley union { 4824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley char *ptr; 4834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_BOOLEAN boolean; 4844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING * asn1_string; 4854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_OBJECT * object; 4864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_INTEGER * integer; 4874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_ENUMERATED * enumerated; 4884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_BIT_STRING * bit_string; 4894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_OCTET_STRING * octet_string; 4904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_PRINTABLESTRING * printablestring; 4914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_T61STRING * t61string; 4924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_IA5STRING * ia5string; 4934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_GENERALSTRING * generalstring; 4944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_BMPSTRING * bmpstring; 4954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_UNIVERSALSTRING * universalstring; 4964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_UTCTIME * utctime; 4974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_GENERALIZEDTIME * generalizedtime; 4984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_VISIBLESTRING * visiblestring; 4994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_UTF8STRING * utf8string; 5004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley /* set and sequence are left complete and still 5014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * contain the set or sequence bytes */ 5024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING * set; 5034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING * sequence; 5044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_VALUE * asn1_value; 5054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } value; 5064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } ASN1_TYPE; 5074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_SET_OF(ASN1_TYPE) 5094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; 5114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) 5134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) 5144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleystruct X509_algor_st 5164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 5174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_OBJECT *algorithm; 5184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_TYPE *parameter; 5194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } /* X509_ALGOR */; 5204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDEFINE_STACK_OF(X509_ALGOR); 5214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(X509_ALGOR); 5234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct NETSCAPE_X509_st 5254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley { 5264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_OCTET_STRING *header; 5274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley X509 *cert; 5284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley } NETSCAPE_X509; 5294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* This is used to contain a list of bit names */ 5314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef struct BIT_STRING_BITNAME_st { 5324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int bitnum; 5334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const char *lname; 5344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const char *sname; 5354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley} BIT_STRING_BITNAME; 5364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_STRING_length(x) ((x)->length) 5394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) 5404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_STRING_type(x) ((x)->type) 5414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_STRING_data(x) ((x)->data) 5424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Macros for string operations */ 5444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ 5454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_BIT_STRING) 5464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 5474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ 5484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_dup((const ASN1_STRING *)a) 5494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ 5504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (const ASN1_STRING *)a,(const ASN1_STRING *)b) 5514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) 5524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ 5544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_INTEGER) 5554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) 5564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ 5574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_dup((const ASN1_STRING *)a) 5584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ 5594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (const ASN1_STRING *)a,(const ASN1_STRING *)b) 5604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ 5624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_ENUMERATED) 5634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) 5644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ 5654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_dup((const ASN1_STRING *)a) 5664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ 5674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (const ASN1_STRING *)a,(const ASN1_STRING *)b) 5684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ 5704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_OCTET_STRING) 5714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 5724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ 5734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_dup((const ASN1_STRING *)a) 5744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ 5754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (const ASN1_STRING *)a,(const ASN1_STRING *)b) 5764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) 5774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) 5784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_OCTET_STRING(a,pp) \ 5794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ 5804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 5814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_TIME \ 5834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_UTCTIME | \ 5844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_GENERALIZEDTIME 5854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_PRINTABLE \ 5874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_NUMERICSTRING| \ 5884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_PRINTABLESTRING| \ 5894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_T61STRING| \ 5904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_IA5STRING| \ 5914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_BIT_STRING| \ 5924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_UNIVERSALSTRING|\ 5934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_BMPSTRING|\ 5944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_UTF8STRING|\ 5954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_SEQUENCE|\ 5964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_UNKNOWN 5974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 5984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_DIRECTORYSTRING \ 5994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_PRINTABLESTRING| \ 6004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_TELETEXSTRING|\ 6014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_BMPSTRING|\ 6024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_UNIVERSALSTRING|\ 6034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_UTF8STRING 6044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define B_ASN1_DISPLAYTEXT \ 6064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_IA5STRING| \ 6074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_VISIBLESTRING| \ 6084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_BMPSTRING|\ 6094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_UTF8STRING 6104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) 6124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ 6144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley pp,a->type,V_ASN1_UNIVERSAL) 6154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_PRINTABLE(a,pp,l) \ 6164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ 6174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_PRINTABLE) 6184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) 6204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_DIRECTORYSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ 6224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley pp,a->type,V_ASN1_UNIVERSAL) 6234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_DIRECTORYSTRING(a,pp,l) \ 6244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ 6254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_DIRECTORYSTRING) 6264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) 6284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ 6304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley pp,a->type,V_ASN1_UNIVERSAL) 6314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_DISPLAYTEXT(a,pp,l) \ 6324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ 6334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_DISPLAYTEXT) 6344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ 6364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) 6374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_PRINTABLESTRING(a,pp) \ 6394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\ 6404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 6414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \ 6424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ 6434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) 6444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ 6464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_T61STRING) 6474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_T61STRING(a,pp) \ 6494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\ 6504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 6514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_T61STRING(a,pp,l) \ 6524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_T61STRING *)d2i_ASN1_type_bytes\ 6534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING) 6544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ 6564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_IA5STRING) 6574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_IA5STRING_dup(a) \ 6594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) 6604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_IA5STRING(a,pp) \ 6614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\ 6624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 6634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_IA5STRING(a,pp,l) \ 6644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\ 6654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley B_ASN1_IA5STRING) 6664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ 6684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_UTCTIME) 6694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ 6714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_dup((const ASN1_STRING *)a) 6724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ 6744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) 6754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ 6774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (const ASN1_STRING *)a) 6784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_TIME_new() (ASN1_TIME *)\ 6804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_UTCTIME) 6814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ 6834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_dup((const ASN1_STRING *)a) 6844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ 6864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_GENERALSTRING) 6874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_GENERALSTRING(a,pp) \ 6894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\ 6904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 6914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_GENERALSTRING(a,pp,l) \ 6924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\ 6934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING) 6944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 6954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ 6964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) 6974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 6984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \ 6994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\ 7004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 7014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \ 7024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\ 7034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING) 7044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ 7064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_BMPSTRING) 7074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 7084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_BMPSTRING(a,pp) \ 7094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\ 7104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 7114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_BMPSTRING(a,pp,l) \ 7124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\ 7134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING) 7144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ 7164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) 7174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 7184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_VISIBLESTRING(a,pp) \ 7194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\ 7204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 7214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \ 7224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\ 7234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING) 7244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ 7264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_STRING_type_new(V_ASN1_UTF8STRING) 7274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) 7284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_i2d_ASN1_UTF8STRING(a,pp) \ 7294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ 7304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley V_ASN1_UNIVERSAL) 7314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_d2i_ASN1_UTF8STRING(a,pp,l) \ 7324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ 7334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) 7344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley /* for the is_set parameter to i2d_ASN1_SET */ 7364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define IS_SEQUENCE 0 7374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define IS_SET 1 7384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) 7404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 741eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_TYPE_get(ASN1_TYPE *a); 742eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); 743eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); 744eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_TYPE_cmp(ASN1_TYPE *a, ASN1_TYPE *b); 7454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 746eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_OBJECT * ASN1_OBJECT_new(void ); 747eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_OBJECT_free(ASN1_OBJECT *a); 748eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2d_ASN1_OBJECT(ASN1_OBJECT *a,unsigned char **pp); 749eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_OBJECT * c2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp, 750eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley long length); 751eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_OBJECT * d2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp, 752eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley long length); 7534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_ITEM(ASN1_OBJECT) 7554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_SET_OF(ASN1_OBJECT) 7574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 758eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING * ASN1_STRING_new(void); 759eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_STRING_free(ASN1_STRING *a); 760eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); 761eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING * ASN1_STRING_dup(const ASN1_STRING *a); 762eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING * ASN1_STRING_type_new(int type ); 763eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); 7644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley /* Since this is used to store all sorts of things, via macros, for now, make 7654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley its data void * */ 766eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); 767eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); 768eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_length(const ASN1_STRING *x); 769eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_STRING_length_set(ASN1_STRING *x, int n); 770eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_type(ASN1_STRING *x); 771eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned char * ASN1_STRING_data(ASN1_STRING *x); 7724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) 774eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp); 775eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,const unsigned char **pp, long length); 776eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length ); 777eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); 778eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n); 779eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a, unsigned char *flags, int flags_len); 7804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO 782eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, BIT_STRING_BITNAME *tbl, int indent); 7834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 784eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl); 785eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, BIT_STRING_BITNAME *tbl); 7864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 787eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2d_ASN1_BOOLEAN(int a,unsigned char **pp); 788eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int d2i_ASN1_BOOLEAN(int *a,const unsigned char **pp,long length); 7894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) 791eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2c_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp); 792eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,const unsigned char **pp, long length); 793eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,const unsigned char **pp, long length); 794eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_INTEGER * ASN1_INTEGER_dup(const ASN1_INTEGER *x); 795eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); 7964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 7974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) 7984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 799eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); 800eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t); 801eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec); 802eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); 803eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); 8044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#if 0 8054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytime_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); 8064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 8074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 808eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); 809eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t); 810eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec); 811eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); 812eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); 8134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) 815eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_OCTET_STRING * ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); 816eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); 817eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); 8184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) 8204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) 8214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) 8224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_NULL) 8234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) 8244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 825eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int UTF8_getc(const unsigned char *str, int len, unsigned long *val); 826eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int UTF8_putc(unsigned char *str, int len, unsigned long value); 8274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) 8294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) 8314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) 8324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) 8334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) 8344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) 8354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) 8364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) 8374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) 8384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(ASN1_TIME) 8394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) 8414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 842eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t); 843eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s,time_t t, int offset_day, long offset_sec); 844eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_TIME_check(ASN1_TIME *t); 845eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out); 846eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); 847eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley 848eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp, i2d_of_void *i2d, int ex_tag, int ex_class, int is_set); 849eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a, 8504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley const unsigned char **pp, 8514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley long length, d2i_of_void *d2i, 8524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley void (*free_func)(OPENSSL_BLOCK), int ex_tag, 8534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley int ex_class); 8544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO 856eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a); 857eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size); 858eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a); 859eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int a2i_ASN1_ENUMERATED(BIO *bp,ASN1_ENUMERATED *bs,char *buf,int size); 860eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2a_ASN1_OBJECT(BIO *bp,ASN1_OBJECT *a); 861eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int a2i_ASN1_STRING(BIO *bp,ASN1_STRING *bs,char *buf,int size); 862eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type); 8634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 864eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2t_ASN1_OBJECT(char *buf,int buf_len,ASN1_OBJECT *a); 8654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 866eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int a2d_ASN1_OBJECT(unsigned char *out,int olen, const char *buf, int num); 867eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data,int len, const char *sn, const char *ln); 8684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 869eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); 870eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long ASN1_INTEGER_get(const ASN1_INTEGER *a); 871eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); 872eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai,BIGNUM *bn); 8734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 874eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); 875eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a); 876eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); 877eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai,BIGNUM *bn); 8784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* General */ 8804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* given a string, return the correct type, max is the maximum length */ 881eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_PRINTABLE_type(const unsigned char *s, int max); 8824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 883eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); 884eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp, long length, int Ptag, int Pclass); 885eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long ASN1_tag2bit(int tag); 8864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* type is one or more of the B_ASN1_ values. */ 887eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a,const unsigned char **pp, long length,int type); 8884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* PARSING */ 890eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int asn1_Finish(ASN1_CTX *c); 891eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int asn1_const_Finish(ASN1_const_CTX *c); 8924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 8934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* SPECIALS */ 894eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, int *pclass, long omax); 895eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_check_infinite_end(unsigned char **p,long len); 896eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_const_check_infinite_end(const unsigned char **p,long len); 897eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag, int xclass); 898eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_put_eoc(unsigned char **pp); 899eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_object_size(int constructed, int length, int tag); 9004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Used to implement other functions */ 902eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); 9034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_dup_of(type,i2d,d2i,x) \ 9054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ 9064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_D2I_OF(type, d2i), \ 9074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PTR_OF(type, x))) 9084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_dup_of_const(type,i2d,d2i,x) \ 9104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ 9114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_D2I_OF(type, d2i), \ 9124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PTR_OF(const type, x))) 9134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 914eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_item_dup(const ASN1_ITEM *it, void *x); 9154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ASN1 alloc/free macros for when a type is only used internally */ 9174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) 9194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define M_ASN1_free_of(x, type) \ 9204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) 9214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_FP_API 923eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x); 9244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ 9264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ 9274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_D2I_OF(type, d2i), \ 9284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley in, \ 9294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PPTR_OF(type, x))) 9304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 931eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); 932eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_i2d_fp(i2d_of_void *i2d,FILE *out,void *x); 9334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_i2d_fp_of(type,i2d,out,x) \ 9354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ 9364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley out, \ 9374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PTR_OF(type, x))) 9384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_i2d_fp_of_const(type,i2d,out,x) \ 9404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ 9414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley out, \ 9424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PTR_OF(const type, x))) 9434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 944eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); 945eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags); 9464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 9474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 948eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); 9494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifndef OPENSSL_NO_BIO 951eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_d2i_bio(void *(*xnew)(void), d2i_of_void *d2i, BIO *in, void **x); 9524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ 9544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ 9554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_D2I_OF(type, d2i), \ 9564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley in, \ 9574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PPTR_OF(type, x))) 9584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 959eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); 960eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_i2d_bio(i2d_of_void *i2d,BIO *out, unsigned char *x); 9614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_i2d_bio_of(type,i2d,out,x) \ 9634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ 9644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley out, \ 9654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PTR_OF(type, x))) 9664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_i2d_bio_of_const(type,i2d,out,x) \ 9684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ 9694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley out, \ 9704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_PTR_OF(const type, x))) 9714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 972eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); 973eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); 974eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); 975eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); 976eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); 977eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags); 978eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, unsigned char *buf, int off); 979eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_parse(BIO *bp,const unsigned char *pp,long len,int indent); 980eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_parse_dump(BIO *bp,const unsigned char *pp,long len,int indent,int dump); 9814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 982eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT const char *ASN1_tag2str(int tag); 9834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Used to load and write netscape format cert */ 9854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam LangleyDECLARE_ASN1_FUNCTIONS(NETSCAPE_X509) 9874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyint ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); 9894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 990eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT STACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len, d2i_of_void *d2i, void (*free_func)(OPENSSL_BLOCK)); 991eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d, unsigned char **buf, int *len ); 992eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i); 993eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it); 994eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, ASN1_OCTET_STRING **oct); 9954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 9964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_pack_string_of(type,obj,i2d,oct) \ 9974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \ 9984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley CHECKED_I2D_OF(type, i2d), \ 9994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley oct)) 10004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1001eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct); 10024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1003eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_STRING_set_default_mask(unsigned long mask); 1004eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_set_default_mask_asc(const char *p); 1005eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long ASN1_STRING_get_default_mask(void); 1006eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, int inform, unsigned long mask); 1007eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, int inform, unsigned long mask, long minsize, long maxsize); 10084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1009eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in, int inlen, int inform, int nid); 1010eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); 1011eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); 1012eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_STRING_TABLE_cleanup(void); 10134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ASN1 template functions */ 10154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Old API compatible functions */ 1017eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); 1018eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); 1019eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_VALUE * ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); 1020eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); 1021eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); 10224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1023eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_add_oid_module(void); 10244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1025eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf); 1026eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf); 10274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* ASN1 Print flags */ 10294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Indicate missing OPTIONAL fields */ 10314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 10324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Mark start and end of SEQUENCE */ 10334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 10344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Mark start and end of SEQUENCE/SET OF */ 10354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 10364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Show the ASN1 type of primitives */ 10374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 10384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't show ASN1 type of ANY */ 10394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 10404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't show ASN1 type of MSTRINGs */ 10414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 10424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't show field names in SEQUENCE */ 10434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 10444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Show structure names of each SEQUENCE field */ 10454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 10464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* Don't show structure name even at top level */ 10474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 10484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 1049eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, const ASN1_ITEM *it, const ASN1_PCTX *pctx); 1050eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_PCTX *ASN1_PCTX_new(void); 1051eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_PCTX_free(ASN1_PCTX *p); 1052eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p); 1053eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); 1054eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p); 1055eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); 1056eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p); 1057eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); 1058eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p); 1059eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); 1060eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p); 1061eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); 1062eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley 1063eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO_METHOD *BIO_f_asn1(void); 1064eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley 1065eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); 1066eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley 1067eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const ASN1_ITEM *it); 1068eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const char *hdr, const ASN1_ITEM *it); 1069eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); 1070eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SMIME_crlf_copy(BIO *in, BIO *out, int flags); 1071eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int SMIME_text(BIO *in, BIO *out); 10724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* BEGIN ERROR CODES */ 10744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley/* The following lines are auto generated by the script mkerr.pl. Any changes 10754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley * made after this point may be overwritten when the script is next run. 10764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley */ 10774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleyvoid ERR_load_ASN1_strings(void); 10784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langleytypedef int asn1_ps_func(BIO *b, unsigned char **pbuf, int *plen, void *parg); 1080eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, asn1_ps_func *prefix_free); 1081eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, asn1_ps_func **pprefix_free); 1082eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, asn1_ps_func *suffix_free); 1083eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam LangleyOPENSSL_EXPORT int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, asn1_ps_func **psuffix_free); 10844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#ifdef __cplusplus 10864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley} 10874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 10884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 10894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_template_ex_d2i 100 10904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_dup 101 10914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_a2i_ASN1_STRING 102 10924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_d2i_fp 103 10934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_d2i_ASN1_OBJECT 104 10944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_item_ex_combine_new 105 10954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_template_new 106 10964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_do_adb 107 10974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_d2i_read_bio 108 10984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_ex_c2i 109 10994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_c2i_ASN1_INTEGER 110 11004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_PCTX_new 111 11014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_item_unpack 112 11024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_d2i_ASN1_type_bytes 113 11034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_a2i_ASN1_INTEGER 114 11044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_collect 115 11054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_item_dup 116 11064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_ENUMERATED_set 117 11074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_c2i_ASN1_OBJECT 118 11084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_unpack_string 119 11094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_d2i_ASN1_UINTEGER 120 11104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_long_c2i 121 11114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_seq_pack 122 11124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_a2d_ASN1_OBJECT 123 11134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_STRING_type_new 124 11144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_INTEGER_set 125 11154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_BN_to_ASN1_INTEGER 126 11164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_BIO_new_NDEF 127 11174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_ENUMERATED_to_BN 128 11184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_item_ex_d2i 129 11194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_INTEGER_to_BN 130 11204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_i2d_ASN1_TIME 131 11214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_TIME_adj 132 11224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_BIT_STRING_set_bit 133 11234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_seq_unpack 134 11244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_item_pack 135 11254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_STRING_set 136 11264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_UTCTIME_adj 137 11274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_mbstring_ncopy 138 11284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_d2i_ASN1_BOOLEAN 139 11294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_OBJECT_new 140 11304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_template_noexp_d2i 141 11314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_c2i_ASN1_BIT_STRING 142 11324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_BN_to_ASN1_ENUMERATED 143 11334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_d2i_ex_primitive 144 11344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_i2d_bio 145 11354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_item_i2d_bio 146 11364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_d2i_ASN1_UTCTIME 147 11374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_STRING_TABLE_add 148 11384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_find_end 149 11394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_item_d2i_fp 150 11404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_collect_data 151 11414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_check_tlen 152 11424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_i2d_fp 153 11434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_item_i2d_fp 154 11444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_GENERALIZEDTIME_adj 155 11454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_asn1_collate_primitive 156 11464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_pack_string 157 11474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_ASN1_get_object 158 11484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_d2i_ASN1_bytes 159 11494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_F_a2i_ASN1_ENUMERATED 160 11504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ASN1_SIG_PARSE_ERROR 100 11514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ADDING_OBJECT 101 11524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MIME_NO_CONTENT_TYPE 102 11534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNKNOWN_OBJECT_TYPE 103 11544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_FORMAT 104 11554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_HEADER_TOO_LONG 105 11564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_UTF8STRING 106 11574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_EXPLICIT_LENGTH_MISMATCH 107 11584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_TAGGED_ANY 108 11594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_DATA_IS_WRONG 109 11604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NOT_ASCII_FORMAT 110 11614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NOT_ENOUGH_DATA 111 11624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MSTRING_NOT_UNIVERSAL 112 11634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNKOWN_FORMAT 113 11644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 114 11654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BAD_PASSWORD_READ 115 11664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BAD_OBJECT_HEADER 116 11674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_CHARACTERS 117 11684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_CONTEXT_NOT_INITIALISED 118 11694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 119 11704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BN_LIB 120 11714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NO_MATCHING_CHOICE_TYPE 121 11724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 122 11734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ASN1_PARSE_ERROR 123 11744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NO_MULTIPART_BOUNDARY 124 11754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_SEPARATOR 125 11764c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MALLOC_FAILURE 126 11774c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_NULL 127 11784c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_MIME_TYPE 128 11794c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_NUMBER 129 11804c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_STRING_TOO_LONG 130 11814c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BAD_GET_ASN1_OBJECT_CALL 131 11824c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 132 11834c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_EXPECTING_A_TIME 133 11844c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_TAG_VALUE_TOO_HIGH 134 11854c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NESTED_ASN1_STRING 135 11864c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_BITSTRING_FORMAT 136 11874c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MISSING_SECOND_NUMBER 137 11884c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_TIME_NOT_ASCII_FORMAT 138 11894c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 139 11904c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_WRONG_TYPE 140 11914c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_EXPECTING_AN_INTEGER 141 11924c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_DEPTH_EXCEEDED 142 11934c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_OBJECT 143 11944c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNKNOWN_TAG 144 11954c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_IMPLICIT_TAG 145 11964c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_AUX_ERROR 146 11974c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_SEQUENCE_LENGTH_MISMATCH 147 11984c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_FIELD_MISSING 148 11994c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_TYPE_NOT_CONSTRUCTED 149 12004c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 150 12014c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_FIRST_NUM_TOO_LARGE 151 12024c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_DIGIT 152 12034c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MSTRING_WRONG_TAG 153 12044c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_OBJECT_NOT_ASCII_FORMAT 154 12054c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNSUPPORTED_TYPE 155 12064c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ERROR_LOADING_SECTION 156 12074c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ODD_NUMBER_OF_CHARS 157 12084c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ASN1_LENGTH_MISMATCH 158 12094c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MISSING_EOC 159 12104c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_INTEGER 160 12114c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_HEX 161 12124c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NESTED_ASN1_ERROR 162 12134c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_TOO_LONG 163 12144c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_LENGTH_ERROR 164 12154c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_DECODING_ERROR 165 12164c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MIME_SIG_PARSE_ERROR 166 12174c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_NULL_VALUE 167 12184c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_EXPECTING_A_BOOLEAN 168 12194c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_STREAMING_NOT_SUPPORTED 169 12204c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_BMPSTRING_LENGTH 170 12214c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INTEGER_NOT_ASCII_FORMAT 171 12224c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_MODIFIER 172 12234c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNEXPECTED_EOC 173 12244c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_NESTED_TAGGING 174 12254c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_IV_TOO_LARGE 175 12264c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 176 12274c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 177 12284c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BUFFER_TOO_SMALL 178 12294c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 179 12304c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_WRONG_PUBLIC_KEY_TYPE 180 12314c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 181 12324c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MIME_PARSE_ERROR 182 12334c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_OBJECT_ENCODING 183 12344c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_PRIVATE_KEY_HEADER_MISSING 184 12354c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNSUPPORTED_CIPHER 185 12364c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NO_MULTIPART_BODY_FAILURE 186 12374c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NO_CONTENT_TYPE 187 12384c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_SECOND_NUMBER_TOO_LARGE 188 12394c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_INVALID_TIME_FORMAT 189 12404c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NO_DEFAULT_DIGEST 190 12414c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 191 12424c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_EXPECTING_AN_OBJECT 192 12434c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 193 12444c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ERROR_GETTING_TIME 194 12454c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MISSING_VALUE 195 12464c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_LIST_ERROR 196 12474c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_DECODE_ERROR 197 12484c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NON_HEX_CHARACTERS 198 12494c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 199 12504c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNKNOWN_FORMAT 200 12514c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_EXPECTING_AN_ASN1_SEQUENCE 201 12524c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 202 12534c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_STRING_TOO_SHORT 203 12544c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_OPTIONAL_ANY 204 12554c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 205 12564c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NO_SIG_CONTENT_TYPE 206 12574c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ENCODE_ERROR 207 12584c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_SHORT_LINE 208 12594c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_TIME_VALUE 209 12604c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 210 12614c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 211 12624c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BAD_CLASS 212 12634c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BAD_TAG 213 12644c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 214 12654c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 215 12664c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ILLEGAL_BOOLEAN 216 12674c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_SIG_INVALID_MIME_TYPE 217 12684c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_NULL_IS_WRONG_LENGTH 218 12694c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_MISSING_ASN1_EOS 219 12704c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_ERROR_PARSING_SET_ELEMENT 220 12714c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_WRONG_TAG 221 12724c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 222 12734c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 223 12744c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley 12754c921e1bbcc1d1cd23848e3b11ab2c9f85ee37eaAdam Langley#endif 1276