asn1.h revision 68651
155714Skris/* crypto/asn1/asn1.h */
255714Skris/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
355714Skris * All rights reserved.
455714Skris *
555714Skris * This package is an SSL implementation written
655714Skris * by Eric Young (eay@cryptsoft.com).
755714Skris * The implementation was written so as to conform with Netscapes SSL.
855714Skris *
955714Skris * This library is free for commercial and non-commercial use as long as
1055714Skris * the following conditions are aheared to.  The following conditions
1155714Skris * apply to all code found in this distribution, be it the RC4, RSA,
1255714Skris * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
1355714Skris * included with this distribution is covered by the same copyright terms
1455714Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com).
1555714Skris *
1655714Skris * Copyright remains Eric Young's, and as such any Copyright notices in
1755714Skris * the code are not to be removed.
1855714Skris * If this package is used in a product, Eric Young should be given attribution
1955714Skris * as the author of the parts of the library used.
2055714Skris * This can be in the form of a textual message at program startup or
2155714Skris * in documentation (online or textual) provided with the package.
2255714Skris *
2355714Skris * Redistribution and use in source and binary forms, with or without
2455714Skris * modification, are permitted provided that the following conditions
2555714Skris * are met:
2655714Skris * 1. Redistributions of source code must retain the copyright
2755714Skris *    notice, this list of conditions and the following disclaimer.
2855714Skris * 2. Redistributions in binary form must reproduce the above copyright
2955714Skris *    notice, this list of conditions and the following disclaimer in the
3055714Skris *    documentation and/or other materials provided with the distribution.
3155714Skris * 3. All advertising materials mentioning features or use of this software
3255714Skris *    must display the following acknowledgement:
3355714Skris *    "This product includes cryptographic software written by
3455714Skris *     Eric Young (eay@cryptsoft.com)"
3555714Skris *    The word 'cryptographic' can be left out if the rouines from the library
3655714Skris *    being used are not cryptographic related :-).
3755714Skris * 4. If you include any Windows specific code (or a derivative thereof) from
3855714Skris *    the apps directory (application code) you must include an acknowledgement:
3955714Skris *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
4055714Skris *
4155714Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
4255714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4355714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4455714Skris * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
4555714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
4655714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
4755714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4855714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
4955714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5055714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5155714Skris * SUCH DAMAGE.
5255714Skris *
5355714Skris * The licence and distribution terms for any publically available version or
5455714Skris * derivative of this code cannot be changed.  i.e. this code cannot simply be
5555714Skris * copied and put under another distribution licence
5655714Skris * [including the GNU Public Licence.]
5755714Skris */
5855714Skris
5955714Skris#ifndef HEADER_ASN1_H
6055714Skris#define HEADER_ASN1_H
6155714Skris
6268651Skris#include <time.h>
6368651Skris#ifndef NO_BIO
6468651Skris#include <openssl/bio.h>
6555714Skris#endif
6655714Skris#include <openssl/bn.h>
6755714Skris#include <openssl/stack.h>
6855714Skris#include <openssl/safestack.h>
6955714Skris
7068651Skris#include <openssl/symhacks.h>
7168651Skris
7268651Skris#ifdef  __cplusplus
7368651Skrisextern "C" {
7459191Skris#endif
7559191Skris
7655714Skris#define V_ASN1_UNIVERSAL		0x00
7755714Skris#define	V_ASN1_APPLICATION		0x40
7855714Skris#define V_ASN1_CONTEXT_SPECIFIC		0x80
7955714Skris#define V_ASN1_PRIVATE			0xc0
8055714Skris
8155714Skris#define V_ASN1_CONSTRUCTED		0x20
8255714Skris#define V_ASN1_PRIMITIVE_TAG		0x1f
8355714Skris#define V_ASN1_PRIMATIVE_TAG		0x1f
8455714Skris
8559191Skris#define V_ASN1_APP_CHOOSE		-2	/* let the recipient choose */
8668651Skris#define V_ASN1_OTHER			-3	/* used in ASN1_TYPE */
8755714Skris
8868651Skris#define V_ASN1_NEG			0x100	/* negative flag */
8968651Skris
9055714Skris#define V_ASN1_UNDEF			-1
9155714Skris#define V_ASN1_EOC			0
9255714Skris#define V_ASN1_BOOLEAN			1	/**/
9355714Skris#define V_ASN1_INTEGER			2
9468651Skris#define V_ASN1_NEG_INTEGER		(2 | V_ASN1_NEG)
9555714Skris#define V_ASN1_BIT_STRING		3
9655714Skris#define V_ASN1_OCTET_STRING		4
9755714Skris#define V_ASN1_NULL			5
9855714Skris#define V_ASN1_OBJECT			6
9955714Skris#define V_ASN1_OBJECT_DESCRIPTOR	7
10055714Skris#define V_ASN1_EXTERNAL			8
10155714Skris#define V_ASN1_REAL			9
10255714Skris#define V_ASN1_ENUMERATED		10
10368651Skris#define V_ASN1_NEG_ENUMERATED		(10 | V_ASN1_NEG)
10455714Skris#define V_ASN1_UTF8STRING		12
10555714Skris#define V_ASN1_SEQUENCE			16
10655714Skris#define V_ASN1_SET			17
10755714Skris#define V_ASN1_NUMERICSTRING		18	/**/
10855714Skris#define V_ASN1_PRINTABLESTRING		19
10955714Skris#define V_ASN1_T61STRING		20
11055714Skris#define V_ASN1_TELETEXSTRING		20	/* alias */
11155714Skris#define V_ASN1_VIDEOTEXSTRING		21	/**/
11255714Skris#define V_ASN1_IA5STRING		22
11355714Skris#define V_ASN1_UTCTIME			23
11455714Skris#define V_ASN1_GENERALIZEDTIME		24	/**/
11555714Skris#define V_ASN1_GRAPHICSTRING		25	/**/
11655714Skris#define V_ASN1_ISO64STRING		26	/**/
11755714Skris#define V_ASN1_VISIBLESTRING		26	/* alias */
11855714Skris#define V_ASN1_GENERALSTRING		27	/**/
11955714Skris#define V_ASN1_UNIVERSALSTRING		28	/**/
12055714Skris#define V_ASN1_BMPSTRING		30
12155714Skris
12255714Skris/* For use with d2i_ASN1_type_bytes() */
12355714Skris#define B_ASN1_NUMERICSTRING	0x0001
12455714Skris#define B_ASN1_PRINTABLESTRING	0x0002
12555714Skris#define B_ASN1_T61STRING	0x0004
12655714Skris#define B_ASN1_TELETEXSTRING	0x0008
12755714Skris#define B_ASN1_VIDEOTEXSTRING	0x0008
12855714Skris#define B_ASN1_IA5STRING	0x0010
12955714Skris#define B_ASN1_GRAPHICSTRING	0x0020
13055714Skris#define B_ASN1_ISO64STRING	0x0040
13155714Skris#define B_ASN1_VISIBLESTRING	0x0040
13255714Skris#define B_ASN1_GENERALSTRING	0x0080
13355714Skris#define B_ASN1_UNIVERSALSTRING	0x0100
13455714Skris#define B_ASN1_OCTET_STRING	0x0200
13555714Skris#define B_ASN1_BIT_STRING	0x0400
13655714Skris#define B_ASN1_BMPSTRING	0x0800
13755714Skris#define B_ASN1_UNKNOWN		0x1000
13855714Skris#define B_ASN1_UTF8STRING	0x2000
13955714Skris
14059191Skris/* For use with ASN1_mbstring_copy() */
14159191Skris#define MBSTRING_FLAG		0x1000
14259191Skris#define MBSTRING_ASC		(MBSTRING_FLAG|1)
14359191Skris#define MBSTRING_BMP		(MBSTRING_FLAG|2)
14459191Skris#define MBSTRING_UNIV		(MBSTRING_FLAG|3)
14559191Skris#define MBSTRING_UTF8		(MBSTRING_FLAG|4)
14659191Skris
14768651Skrisstruct X509_algor_st;
14855714Skris
14968651Skris#define DECLARE_ASN1_SET_OF(type) /* filled in by mkstack.pl */
15068651Skris#define IMPLEMENT_ASN1_SET_OF(type) /* nothing, no longer needed */
15155714Skris
15255714Skristypedef struct asn1_ctx_st
15355714Skris	{
15455714Skris	unsigned char *p;/* work char pointer */
15555714Skris	int eos;	/* end of sequence read for indefinite encoding */
15655714Skris	int error;	/* error code to use when returning an error */
15755714Skris	int inf;	/* constructed if 0x20, indefinite is 0x21 */
15855714Skris	int tag;	/* tag from last 'get object' */
15955714Skris	int xclass;	/* class from last 'get object' */
16055714Skris	long slen;	/* length of last 'get object' */
16159191Skris	unsigned char *max; /* largest value of p allowed */
16255714Skris	unsigned char *q;/* temporary variable */
16355714Skris	unsigned char **pp;/* variable */
16455714Skris	int line;	/* used in error processing */
16555714Skris	} ASN1_CTX;
16655714Skris
16755714Skris/* These are used internally in the ASN1_OBJECT to keep track of
16855714Skris * whether the names and data need to be free()ed */
16955714Skris#define ASN1_OBJECT_FLAG_DYNAMIC	 0x01	/* internal use */
17055714Skris#define ASN1_OBJECT_FLAG_CRITICAL	 0x02	/* critical x509v3 object id */
17155714Skris#define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04	/* internal use */
17255714Skris#define ASN1_OBJECT_FLAG_DYNAMIC_DATA 	 0x08	/* internal use */
17355714Skristypedef struct asn1_object_st
17455714Skris	{
17555714Skris	const char *sn,*ln;
17655714Skris	int nid;
17755714Skris	int length;
17855714Skris	unsigned char *data;
17955714Skris	int flags;	/* Should we free this one */
18055714Skris	} ASN1_OBJECT;
18155714Skris
18255714Skris#define ASN1_STRING_FLAG_BITS_LEFT 0x08 /* Set if 0x07 has bits left value */
18355714Skris/* This is the base type that holds just about everything :-) */
18455714Skristypedef struct asn1_string_st
18555714Skris	{
18655714Skris	int length;
18755714Skris	int type;
18855714Skris	unsigned char *data;
18955714Skris	/* The value of the following field depends on the type being
19055714Skris	 * held.  It is mostly being used for BIT_STRING so if the
19155714Skris	 * input data has a non-zero 'unused bits' value, it will be
19255714Skris	 * handled correctly */
19355714Skris	long flags;
19455714Skris	} ASN1_STRING;
19555714Skris
19659191Skris#define STABLE_FLAGS_MALLOC	0x01
19759191Skris#define STABLE_NO_MASK		0x02
19859191Skris#define DIRSTRING_TYPE	\
19959191Skris (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING)
20059191Skris#define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING)
20159191Skris
20259191Skristypedef struct asn1_string_table_st {
20359191Skris	int nid;
20459191Skris	long minsize;
20559191Skris	long maxsize;
20659191Skris	unsigned long mask;
20759191Skris	unsigned long flags;
20859191Skris} ASN1_STRING_TABLE;
20959191Skris
21059191SkrisDECLARE_STACK_OF(ASN1_STRING_TABLE)
21159191Skris
21259191Skris/* size limits: this stuff is taken straight from RFC2459 */
21359191Skris
21459191Skris#define ub_name				32768
21559191Skris#define ub_common_name			64
21659191Skris#define ub_locality_name		128
21759191Skris#define ub_state_name			128
21859191Skris#define ub_organization_name		64
21959191Skris#define ub_organization_unit_name	64
22059191Skris#define ub_title			64
22159191Skris#define ub_email_address		128
22259191Skris
22359191Skris#ifdef NO_ASN1_TYPEDEFS
22455714Skris#define ASN1_INTEGER		ASN1_STRING
22555714Skris#define ASN1_ENUMERATED		ASN1_STRING
22655714Skris#define ASN1_BIT_STRING		ASN1_STRING
22755714Skris#define ASN1_OCTET_STRING	ASN1_STRING
22855714Skris#define ASN1_PRINTABLESTRING	ASN1_STRING
22955714Skris#define ASN1_T61STRING		ASN1_STRING
23055714Skris#define ASN1_IA5STRING		ASN1_STRING
23155714Skris#define ASN1_UTCTIME		ASN1_STRING
23255714Skris#define ASN1_GENERALIZEDTIME	ASN1_STRING
23355714Skris#define ASN1_TIME		ASN1_STRING
23455714Skris#define ASN1_GENERALSTRING	ASN1_STRING
23555714Skris#define ASN1_UNIVERSALSTRING	ASN1_STRING
23655714Skris#define ASN1_BMPSTRING		ASN1_STRING
23755714Skris#define ASN1_VISIBLESTRING	ASN1_STRING
23855714Skris#define ASN1_UTF8STRING		ASN1_STRING
23968651Skris#define ASN1_BOOLEAN		int
24055714Skris#else
24155714Skristypedef struct asn1_string_st ASN1_INTEGER;
24255714Skristypedef struct asn1_string_st ASN1_ENUMERATED;
24355714Skristypedef struct asn1_string_st ASN1_BIT_STRING;
24455714Skristypedef struct asn1_string_st ASN1_OCTET_STRING;
24555714Skristypedef struct asn1_string_st ASN1_PRINTABLESTRING;
24655714Skristypedef struct asn1_string_st ASN1_T61STRING;
24755714Skristypedef struct asn1_string_st ASN1_IA5STRING;
24855714Skristypedef struct asn1_string_st ASN1_GENERALSTRING;
24955714Skristypedef struct asn1_string_st ASN1_UNIVERSALSTRING;
25055714Skristypedef struct asn1_string_st ASN1_BMPSTRING;
25155714Skristypedef struct asn1_string_st ASN1_UTCTIME;
25255714Skristypedef struct asn1_string_st ASN1_TIME;
25355714Skristypedef struct asn1_string_st ASN1_GENERALIZEDTIME;
25455714Skristypedef struct asn1_string_st ASN1_VISIBLESTRING;
25555714Skristypedef struct asn1_string_st ASN1_UTF8STRING;
25668651Skristypedef int ASN1_BOOLEAN;
25755714Skris#endif
25855714Skris
25959191Skristypedef int ASN1_NULL;
26059191Skris
26168651Skris/* Parameters used by ASN1_STRING_print_ex() */
26268651Skris
26368651Skris/* These determine which characters to escape:
26468651Skris * RFC2253 special characters, control characters and
26568651Skris * MSB set characters
26668651Skris */
26768651Skris
26868651Skris#define ASN1_STRFLGS_ESC_2253		1
26968651Skris#define ASN1_STRFLGS_ESC_CTRL		2
27068651Skris#define ASN1_STRFLGS_ESC_MSB		4
27168651Skris
27268651Skris
27368651Skris/* This flag determines how we do escaping: normally
27468651Skris * RC2253 backslash only, set this to use backslash and
27568651Skris * quote.
27668651Skris */
27768651Skris
27868651Skris#define ASN1_STRFLGS_ESC_QUOTE		8
27968651Skris
28068651Skris
28168651Skris/* These three flags are internal use only. */
28268651Skris
28368651Skris/* Character is a valid PrintableString character */
28468651Skris#define CHARTYPE_PRINTABLESTRING	0x10
28568651Skris/* Character needs escaping if it is the first character */
28668651Skris#define CHARTYPE_FIRST_ESC_2253		0x20
28768651Skris/* Character needs escaping if it is the last character */
28868651Skris#define CHARTYPE_LAST_ESC_2253		0x40
28968651Skris
29068651Skris/* NB the internal flags are safely reused below by flags
29168651Skris * handled at the top level.
29268651Skris */
29368651Skris
29468651Skris/* If this is set we convert all character strings
29568651Skris * to UTF8 first
29668651Skris */
29768651Skris
29868651Skris#define ASN1_STRFLGS_UTF8_CONVERT	0x10
29968651Skris
30068651Skris/* If this is set we don't attempt to interpret content:
30168651Skris * just assume all strings are 1 byte per character. This
30268651Skris * will produce some pretty odd looking output!
30368651Skris */
30468651Skris
30568651Skris#define ASN1_STRFLGS_IGNORE_TYPE	0x20
30668651Skris
30768651Skris/* If this is set we include the string type in the output */
30868651Skris#define ASN1_STRFLGS_SHOW_TYPE		0x40
30968651Skris
31068651Skris/* This determines which strings to display and which to
31168651Skris * 'dump' (hex dump of content octets or DER encoding). We can
31268651Skris * only dump non character strings or everything. If we
31368651Skris * don't dump 'unknown' they are interpreted as character
31468651Skris * strings with 1 octet per character and are subject to
31568651Skris * the usual escaping options.
31668651Skris */
31768651Skris
31868651Skris#define ASN1_STRFLGS_DUMP_ALL		0x80
31968651Skris#define ASN1_STRFLGS_DUMP_UNKNOWN	0x100
32068651Skris
32168651Skris/* These determine what 'dumping' does, we can dump the
32268651Skris * content octets or the DER encoding: both use the
32368651Skris * RFC2253 #XXXXX notation.
32468651Skris */
32568651Skris
32668651Skris#define ASN1_STRFLGS_DUMP_DER		0x200
32768651Skris
32868651Skris/* All the string flags consistent with RFC2253,
32968651Skris * escaping control characters isn't essential in
33068651Skris * RFC2253 but it is advisable anyway.
33168651Skris */
33268651Skris
33368651Skris#define ASN1_STRFLGS_RFC2253	(ASN1_STRFLGS_ESC_2253 | \
33468651Skris				ASN1_STRFLGS_ESC_CTRL | \
33568651Skris				ASN1_STRFLGS_ESC_MSB | \
33668651Skris				ASN1_STRFLGS_UTF8_CONVERT | \
33768651Skris				ASN1_STRFLGS_DUMP_UNKNOWN | \
33868651Skris				ASN1_STRFLGS_DUMP_DER)
33968651Skris
34068651SkrisDECLARE_STACK_OF(ASN1_INTEGER)
34168651SkrisDECLARE_ASN1_SET_OF(ASN1_INTEGER)
34268651Skris
34355714Skristypedef struct asn1_type_st
34455714Skris	{
34555714Skris	int type;
34655714Skris	union	{
34755714Skris		char *ptr;
34868651Skris		ASN1_BOOLEAN		boolean;
34955714Skris		ASN1_STRING *		asn1_string;
35055714Skris		ASN1_OBJECT *		object;
35155714Skris		ASN1_INTEGER *		integer;
35255714Skris		ASN1_ENUMERATED *	enumerated;
35355714Skris		ASN1_BIT_STRING *	bit_string;
35455714Skris		ASN1_OCTET_STRING *	octet_string;
35555714Skris		ASN1_PRINTABLESTRING *	printablestring;
35655714Skris		ASN1_T61STRING *	t61string;
35755714Skris		ASN1_IA5STRING *	ia5string;
35855714Skris		ASN1_GENERALSTRING *	generalstring;
35955714Skris		ASN1_BMPSTRING *	bmpstring;
36055714Skris		ASN1_UNIVERSALSTRING *	universalstring;
36155714Skris		ASN1_UTCTIME *		utctime;
36255714Skris		ASN1_GENERALIZEDTIME *	generalizedtime;
36355714Skris		ASN1_VISIBLESTRING *	visiblestring;
36455714Skris		ASN1_UTF8STRING *	utf8string;
36555714Skris		/* set and sequence are left complete and still
36655714Skris		 * contain the set or sequence bytes */
36755714Skris		ASN1_STRING *		set;
36855714Skris		ASN1_STRING *		sequence;
36955714Skris		} value;
37055714Skris	} ASN1_TYPE;
37155714Skris
37255714SkrisDECLARE_STACK_OF(ASN1_TYPE)
37355714SkrisDECLARE_ASN1_SET_OF(ASN1_TYPE)
37455714Skris
37555714Skristypedef struct asn1_method_st
37655714Skris	{
37755714Skris	int (*i2d)();
37855714Skris	char *(*d2i)();
37955714Skris	char *(*create)();
38055714Skris	void (*destroy)();
38155714Skris	} ASN1_METHOD;
38255714Skris
38355714Skris/* This is used when parsing some Netscape objects */
38455714Skristypedef struct asn1_header_st
38555714Skris	{
38655714Skris	ASN1_OCTET_STRING *header;
38755714Skris	char *data;
38855714Skris	ASN1_METHOD *meth;
38955714Skris	} ASN1_HEADER;
39055714Skris
39159191Skris/* This is used to contain a list of bit names */
39259191Skristypedef struct BIT_STRING_BITNAME_st {
39359191Skris	int bitnum;
39459191Skris	const char *lname;
39559191Skris	const char *sname;
39659191Skris} BIT_STRING_BITNAME;
39755714Skris
39859191Skris
39959191Skris#define M_ASN1_STRING_length(x)	((x)->length)
40059191Skris#define M_ASN1_STRING_length_set(x, n)	((x)->length = (n))
40159191Skris#define M_ASN1_STRING_type(x)	((x)->type)
40259191Skris#define M_ASN1_STRING_data(x)	((x)->data)
40359191Skris
40455714Skris/* Macros for string operations */
40559191Skris#define M_ASN1_BIT_STRING_new()	(ASN1_BIT_STRING *)\
40655714Skris		ASN1_STRING_type_new(V_ASN1_BIT_STRING)
40759191Skris#define M_ASN1_BIT_STRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
40859191Skris#define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\
40955714Skris		ASN1_STRING_dup((ASN1_STRING *)a)
41059191Skris#define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\
41155714Skris		(ASN1_STRING *)a,(ASN1_STRING *)b)
41259191Skris#define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c)
41355714Skris
41459191Skris#define M_ASN1_INTEGER_new()	(ASN1_INTEGER *)\
41555714Skris		ASN1_STRING_type_new(V_ASN1_INTEGER)
41659191Skris#define M_ASN1_INTEGER_free(a)		ASN1_STRING_free((ASN1_STRING *)a)
41759191Skris#define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)ASN1_STRING_dup((ASN1_STRING *)a)
41859191Skris#define M_ASN1_INTEGER_cmp(a,b)	ASN1_STRING_cmp(\
41955714Skris		(ASN1_STRING *)a,(ASN1_STRING *)b)
42055714Skris
42159191Skris#define M_ASN1_ENUMERATED_new()	(ASN1_ENUMERATED *)\
42255714Skris		ASN1_STRING_type_new(V_ASN1_ENUMERATED)
42359191Skris#define M_ASN1_ENUMERATED_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
42459191Skris#define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)ASN1_STRING_dup((ASN1_STRING *)a)
42559191Skris#define M_ASN1_ENUMERATED_cmp(a,b)	ASN1_STRING_cmp(\
42655714Skris		(ASN1_STRING *)a,(ASN1_STRING *)b)
42755714Skris
42859191Skris#define M_ASN1_OCTET_STRING_new()	(ASN1_OCTET_STRING *)\
42955714Skris		ASN1_STRING_type_new(V_ASN1_OCTET_STRING)
43059191Skris#define M_ASN1_OCTET_STRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
43159191Skris#define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\
43255714Skris		ASN1_STRING_dup((ASN1_STRING *)a)
43359191Skris#define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\
43455714Skris		(ASN1_STRING *)a,(ASN1_STRING *)b)
43559191Skris#define M_ASN1_OCTET_STRING_set(a,b,c)	ASN1_STRING_set((ASN1_STRING *)a,b,c)
43659191Skris#define M_ASN1_OCTET_STRING_print(a,b)	ASN1_STRING_print(a,(ASN1_STRING *)b)
43755714Skris#define M_i2d_ASN1_OCTET_STRING(a,pp) \
43855714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\
43959191Skris		V_ASN1_UNIVERSAL)
44055714Skris
44159191Skris#define M_ASN1_PRINTABLE_new()	ASN1_STRING_type_new(V_ASN1_T61STRING)
44259191Skris#define M_ASN1_PRINTABLE_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
44355714Skris#define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\
44455714Skris		pp,a->type,V_ASN1_UNIVERSAL)
44555714Skris#define M_d2i_ASN1_PRINTABLE(a,pp,l) \
44655714Skris		d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \
44755714Skris			B_ASN1_PRINTABLESTRING| \
44855714Skris			B_ASN1_T61STRING| \
44955714Skris			B_ASN1_IA5STRING| \
45055714Skris			B_ASN1_BIT_STRING| \
45155714Skris			B_ASN1_UNIVERSALSTRING|\
45255714Skris			B_ASN1_BMPSTRING|\
45359191Skris			B_ASN1_UTF8STRING|\
45455714Skris			B_ASN1_UNKNOWN)
45555714Skris
45659191Skris#define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)
45759191Skris#define M_DIRECTORYSTRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
45855714Skris#define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\
45955714Skris						pp,a->type,V_ASN1_UNIVERSAL)
46055714Skris#define M_d2i_DIRECTORYSTRING(a,pp,l) \
46155714Skris		d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \
46255714Skris			B_ASN1_PRINTABLESTRING| \
46355714Skris			B_ASN1_TELETEXSTRING|\
46455714Skris			B_ASN1_BMPSTRING|\
46555714Skris			B_ASN1_UNIVERSALSTRING|\
46655714Skris			B_ASN1_UTF8STRING)
46755714Skris
46859191Skris#define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)
46959191Skris#define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a)
47055714Skris#define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\
47155714Skris						pp,a->type,V_ASN1_UNIVERSAL)
47255714Skris#define M_d2i_DISPLAYTEXT(a,pp,l) \
47355714Skris		d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \
47455714Skris			B_ASN1_VISIBLESTRING| \
47555714Skris			B_ASN1_BMPSTRING|\
47655714Skris			B_ASN1_UTF8STRING)
47755714Skris
47859191Skris#define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\
47955714Skris		ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)
48059191Skris#define M_ASN1_PRINTABLESTRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
48155714Skris#define M_i2d_ASN1_PRINTABLESTRING(a,pp) \
48255714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\
48355714Skris		V_ASN1_UNIVERSAL)
48455714Skris#define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \
48555714Skris		(ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\
48655714Skris		((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING)
48755714Skris
48859191Skris#define M_ASN1_T61STRING_new()	(ASN1_T61STRING *)\
48955714Skris		ASN1_STRING_type_new(V_ASN1_T61STRING)
49059191Skris#define M_ASN1_T61STRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
49155714Skris#define M_i2d_ASN1_T61STRING(a,pp) \
49255714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\
49355714Skris		V_ASN1_UNIVERSAL)
49455714Skris#define M_d2i_ASN1_T61STRING(a,pp,l) \
49555714Skris		(ASN1_T61STRING *)d2i_ASN1_type_bytes\
49655714Skris		((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING)
49755714Skris
49859191Skris#define M_ASN1_IA5STRING_new()	(ASN1_IA5STRING *)\
49955714Skris		ASN1_STRING_type_new(V_ASN1_IA5STRING)
50059191Skris#define M_ASN1_IA5STRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
50159191Skris#define M_ASN1_IA5STRING_dup(a)	\
50255714Skris			(ASN1_IA5STRING *)ASN1_STRING_dup((ASN1_STRING *)a)
50355714Skris#define M_i2d_ASN1_IA5STRING(a,pp) \
50455714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\
50555714Skris			V_ASN1_UNIVERSAL)
50655714Skris#define M_d2i_ASN1_IA5STRING(a,pp,l) \
50755714Skris		(ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\
50855714Skris			B_ASN1_IA5STRING)
50955714Skris
51059191Skris#define M_ASN1_UTCTIME_new()	(ASN1_UTCTIME *)\
51155714Skris		ASN1_STRING_type_new(V_ASN1_UTCTIME)
51259191Skris#define M_ASN1_UTCTIME_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
51359191Skris#define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)ASN1_STRING_dup((ASN1_STRING *)a)
51455714Skris
51559191Skris#define M_ASN1_GENERALIZEDTIME_new()	(ASN1_GENERALIZEDTIME *)\
51655714Skris		ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME)
51759191Skris#define M_ASN1_GENERALIZEDTIME_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
51859191Skris#define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\
51955714Skris	(ASN1_STRING *)a)
52055714Skris
52159191Skris#define M_ASN1_TIME_new()	(ASN1_TIME *)\
52255714Skris		ASN1_STRING_type_new(V_ASN1_UTCTIME)
52359191Skris#define M_ASN1_TIME_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
52459191Skris#define M_ASN1_TIME_dup(a) (ASN1_TIME *)ASN1_STRING_dup((ASN1_STRING *)a)
52555714Skris
52659191Skris#define M_ASN1_GENERALSTRING_new()	(ASN1_GENERALSTRING *)\
52755714Skris		ASN1_STRING_type_new(V_ASN1_GENERALSTRING)
52859191Skris#define M_ASN1_GENERALSTRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
52955714Skris#define M_i2d_ASN1_GENERALSTRING(a,pp) \
53055714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\
53155714Skris			V_ASN1_UNIVERSAL)
53255714Skris#define M_d2i_ASN1_GENERALSTRING(a,pp,l) \
53355714Skris		(ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\
53455714Skris		((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING)
53555714Skris
53659191Skris#define M_ASN1_UNIVERSALSTRING_new()	(ASN1_UNIVERSALSTRING *)\
53755714Skris		ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING)
53859191Skris#define M_ASN1_UNIVERSALSTRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
53955714Skris#define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \
54055714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\
54155714Skris			V_ASN1_UNIVERSAL)
54255714Skris#define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \
54355714Skris		(ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\
54455714Skris		((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING)
54555714Skris
54659191Skris#define M_ASN1_BMPSTRING_new()	(ASN1_BMPSTRING *)\
54755714Skris		ASN1_STRING_type_new(V_ASN1_BMPSTRING)
54859191Skris#define M_ASN1_BMPSTRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
54955714Skris#define M_i2d_ASN1_BMPSTRING(a,pp) \
55055714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\
55155714Skris			V_ASN1_UNIVERSAL)
55255714Skris#define M_d2i_ASN1_BMPSTRING(a,pp,l) \
55355714Skris		(ASN1_BMPSTRING *)d2i_ASN1_type_bytes\
55455714Skris		((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING)
55555714Skris
55659191Skris#define M_ASN1_VISIBLESTRING_new()	(ASN1_VISIBLESTRING *)\
55755714Skris		ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)
55859191Skris#define M_ASN1_VISIBLESTRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
55955714Skris#define M_i2d_ASN1_VISIBLESTRING(a,pp) \
56055714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\
56155714Skris			V_ASN1_UNIVERSAL)
56255714Skris#define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \
56355714Skris		(ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\
56455714Skris		((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING)
56555714Skris
56659191Skris#define M_ASN1_UTF8STRING_new()	(ASN1_UTF8STRING *)\
56755714Skris		ASN1_STRING_type_new(V_ASN1_UTF8STRING)
56859191Skris#define M_ASN1_UTF8STRING_free(a)	ASN1_STRING_free((ASN1_STRING *)a)
56955714Skris#define M_i2d_ASN1_UTF8STRING(a,pp) \
57055714Skris		i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\
57155714Skris			V_ASN1_UNIVERSAL)
57255714Skris#define M_d2i_ASN1_UTF8STRING(a,pp,l) \
57355714Skris		(ASN1_UTF8STRING *)d2i_ASN1_type_bytes\
57455714Skris		((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING)
57555714Skris
57655714Skris  /* for the is_set parameter to i2d_ASN1_SET */
57755714Skris#define IS_SEQUENCE	0
57855714Skris#define IS_SET		1
57955714Skris
58055714SkrisASN1_TYPE *	ASN1_TYPE_new(void );
58155714Skrisvoid		ASN1_TYPE_free(ASN1_TYPE *a);
58255714Skrisint		i2d_ASN1_TYPE(ASN1_TYPE *a,unsigned char **pp);
58355714SkrisASN1_TYPE *	d2i_ASN1_TYPE(ASN1_TYPE **a,unsigned char **pp,long length);
58455714Skrisint ASN1_TYPE_get(ASN1_TYPE *a);
58555714Skrisvoid ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
58655714Skris
58755714SkrisASN1_OBJECT *	ASN1_OBJECT_new(void );
58855714Skrisvoid		ASN1_OBJECT_free(ASN1_OBJECT *a);
58955714Skrisint		i2d_ASN1_OBJECT(ASN1_OBJECT *a,unsigned char **pp);
59068651SkrisASN1_OBJECT *	c2i_ASN1_OBJECT(ASN1_OBJECT **a,unsigned char **pp,
59168651Skris			long length);
59255714SkrisASN1_OBJECT *	d2i_ASN1_OBJECT(ASN1_OBJECT **a,unsigned char **pp,
59355714Skris			long length);
59455714Skris
59555714SkrisDECLARE_STACK_OF(ASN1_OBJECT)
59655714SkrisDECLARE_ASN1_SET_OF(ASN1_OBJECT)
59755714Skris
59859191SkrisASN1_STRING *	ASN1_STRING_new(void);
59955714Skrisvoid		ASN1_STRING_free(ASN1_STRING *a);
60055714SkrisASN1_STRING *	ASN1_STRING_dup(ASN1_STRING *a);
60155714SkrisASN1_STRING *	ASN1_STRING_type_new(int type );
60255714Skrisint 		ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b);
60355714Skris  /* Since this is used to store all sorts of things, via macros, for now, make
60455714Skris     its data void * */
60555714Skrisint 		ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);
60659191Skrisint ASN1_STRING_length(ASN1_STRING *x);
60759191Skrisvoid ASN1_STRING_length_set(ASN1_STRING *x, int n);
60859191Skrisint ASN1_STRING_type(ASN1_STRING *x);
60959191Skrisunsigned char * ASN1_STRING_data(ASN1_STRING *x);
61055714Skris
61159191SkrisASN1_BIT_STRING *	ASN1_BIT_STRING_new(void);
61259191Skrisvoid		ASN1_BIT_STRING_free(ASN1_BIT_STRING *a);
61355714Skrisint		i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp);
61468651Skrisint		i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp);
61555714SkrisASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,unsigned char **pp,
61655714Skris			long length);
61768651SkrisASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,unsigned char **pp,
61868651Skris			long length);
61959191Skrisint		ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d,
62059191Skris			int length );
62155714Skrisint		ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value);
62255714Skrisint		ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n);
62355714Skris
62468651Skris#ifndef NO_BIO
62559191Skrisint ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,
62659191Skris				BIT_STRING_BITNAME *tbl, int indent);
62759191Skris#endif
62859191Skrisint ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl);
62959191Skrisint ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value,
63059191Skris				BIT_STRING_BITNAME *tbl);
63155714Skris
63255714Skrisint		i2d_ASN1_BOOLEAN(int a,unsigned char **pp);
63355714Skrisint 		d2i_ASN1_BOOLEAN(int *a,unsigned char **pp,long length);
63455714Skris
63559191SkrisASN1_INTEGER *	ASN1_INTEGER_new(void);
63659191Skrisvoid		ASN1_INTEGER_free(ASN1_INTEGER *a);
63755714Skrisint		i2d_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);
63868651Skrisint		i2c_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);
63955714SkrisASN1_INTEGER *d2i_ASN1_INTEGER(ASN1_INTEGER **a,unsigned char **pp,
64055714Skris			long length);
64168651SkrisASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,unsigned char **pp,
64268651Skris			long length);
64355714SkrisASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,unsigned char **pp,
64455714Skris			long length);
64559191SkrisASN1_INTEGER *	ASN1_INTEGER_dup(ASN1_INTEGER *x);
64659191Skrisint ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y);
64755714Skris
64859191SkrisASN1_ENUMERATED *	ASN1_ENUMERATED_new(void);
64959191Skrisvoid		ASN1_ENUMERATED_free(ASN1_ENUMERATED *a);
65055714Skrisint		i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a,unsigned char **pp);
65155714SkrisASN1_ENUMERATED *d2i_ASN1_ENUMERATED(ASN1_ENUMERATED **a,unsigned char **pp,
65255714Skris			long length);
65355714Skris
65455714Skrisint ASN1_UTCTIME_check(ASN1_UTCTIME *a);
65555714SkrisASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t);
65655714Skrisint ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, char *str);
65768651Skrisint ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);
65868651Skris#if 0
65968651Skristime_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s);
66068651Skris#endif
66155714Skris
66255714Skrisint ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a);
66355714SkrisASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t);
66455714Skrisint ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, char *str);
66555714Skris
66659191SkrisASN1_OCTET_STRING *	ASN1_OCTET_STRING_new(void);
66759191Skrisvoid		ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *a);
66855714Skrisint		i2d_ASN1_OCTET_STRING(ASN1_OCTET_STRING *a,unsigned char **pp);
66955714SkrisASN1_OCTET_STRING *d2i_ASN1_OCTET_STRING(ASN1_OCTET_STRING **a,
67055714Skris			unsigned char **pp,long length);
67159191SkrisASN1_OCTET_STRING *	ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *a);
67259191Skrisint 	ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *a, ASN1_OCTET_STRING *b);
67359191Skrisint 	ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, unsigned char *data, int len);
67455714Skris
67559191SkrisASN1_VISIBLESTRING *	ASN1_VISIBLESTRING_new(void);
67659191Skrisvoid		ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *a);
67755714Skrisint	i2d_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING *a,unsigned char **pp);
67855714SkrisASN1_VISIBLESTRING *d2i_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING **a,
67955714Skris			unsigned char **pp,long length);
68055714Skris
68159191SkrisASN1_UTF8STRING *	ASN1_UTF8STRING_new(void);
68259191Skrisvoid		ASN1_UTF8STRING_free(ASN1_UTF8STRING *a);
68355714Skrisint		i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a,unsigned char **pp);
68455714SkrisASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a,
68555714Skris			unsigned char **pp,long length);
68655714Skris
68759191SkrisASN1_NULL *	ASN1_NULL_new(void);
68859191Skrisvoid		ASN1_NULL_free(ASN1_NULL *a);
68959191Skrisint		i2d_ASN1_NULL(ASN1_NULL *a,unsigned char **pp);
69059191SkrisASN1_NULL *d2i_ASN1_NULL(ASN1_NULL **a, unsigned char **pp,long length);
69159191Skris
69259191SkrisASN1_BMPSTRING *	ASN1_BMPSTRING_new(void);
69359191Skrisvoid		ASN1_BMPSTRING_free(ASN1_BMPSTRING *a);
69455714Skrisint i2d_ASN1_BMPSTRING(ASN1_BMPSTRING *a, unsigned char **pp);
69555714SkrisASN1_BMPSTRING *d2i_ASN1_BMPSTRING(ASN1_BMPSTRING **a, unsigned char **pp,
69655714Skris	long length);
69755714Skris
69859191Skris
69959191Skrisint UTF8_getc(const unsigned char *str, int len, unsigned long *val);
70059191Skrisint UTF8_putc(unsigned char *str, int len, unsigned long value);
70159191Skris
70255714Skrisint i2d_ASN1_PRINTABLE(ASN1_STRING *a,unsigned char **pp);
70355714SkrisASN1_STRING *d2i_ASN1_PRINTABLE(ASN1_STRING **a,
70455714Skris	unsigned char **pp, long l);
70559191Skris
70659191SkrisASN1_PRINTABLESTRING *	ASN1_PRINTABLESTRING_new(void);
70759191Skrisvoid		ASN1_PRINTABLESTRING_free(ASN1_PRINTABLESTRING *a);
70855714SkrisASN1_PRINTABLESTRING *d2i_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING **a,
70955714Skris	unsigned char **pp, long l);
71059191Skrisint i2d_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING *a, unsigned char **pp);
71155714Skris
71259191SkrisASN1_STRING *	DIRECTORYSTRING_new(void);
71359191Skrisvoid		DIRECTORYSTRING_free(ASN1_STRING *a);
71455714Skrisint	i2d_DIRECTORYSTRING(ASN1_STRING *a,unsigned char **pp);
71555714SkrisASN1_STRING *d2i_DIRECTORYSTRING(ASN1_STRING **a, unsigned char **pp,
71655714Skris								 long length);
71755714Skris
71859191SkrisASN1_STRING *	DISPLAYTEXT_new(void);
71959191Skrisvoid		DISPLAYTEXT_free(ASN1_STRING *a);
72055714Skrisint	i2d_DISPLAYTEXT(ASN1_STRING *a,unsigned char **pp);
72155714SkrisASN1_STRING *d2i_DISPLAYTEXT(ASN1_STRING **a, unsigned char **pp, long length);
72255714Skris
72359191SkrisASN1_T61STRING *	ASN1_T61STRING_new(void);
72459191Skrisvoid		ASN1_T61STRING_free(ASN1_IA5STRING *a);
72555714SkrisASN1_T61STRING *d2i_ASN1_T61STRING(ASN1_T61STRING **a,
72655714Skris	unsigned char **pp, long l);
72759191Skris
72859191SkrisASN1_IA5STRING *	ASN1_IA5STRING_new(void);
72959191Skrisvoid		ASN1_IA5STRING_free(ASN1_IA5STRING *a);
73055714Skrisint i2d_ASN1_IA5STRING(ASN1_IA5STRING *a,unsigned char **pp);
73155714SkrisASN1_IA5STRING *d2i_ASN1_IA5STRING(ASN1_IA5STRING **a,
73255714Skris	unsigned char **pp, long l);
73355714Skris
73459191SkrisASN1_UTCTIME *	ASN1_UTCTIME_new(void);
73559191Skrisvoid		ASN1_UTCTIME_free(ASN1_UTCTIME *a);
73655714Skrisint		i2d_ASN1_UTCTIME(ASN1_UTCTIME *a,unsigned char **pp);
73755714SkrisASN1_UTCTIME *	d2i_ASN1_UTCTIME(ASN1_UTCTIME **a,unsigned char **pp,
73855714Skris			long length);
73955714Skris
74059191SkrisASN1_GENERALIZEDTIME *	ASN1_GENERALIZEDTIME_new(void);
74159191Skrisvoid		ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *a);
74255714Skrisint		i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *a,unsigned char **pp);
74355714SkrisASN1_GENERALIZEDTIME *	d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a,unsigned char **pp,
74455714Skris			long length);
74555714Skris
74659191SkrisASN1_TIME *	ASN1_TIME_new(void);
74759191Skrisvoid		ASN1_TIME_free(ASN1_TIME *a);
74855714Skrisint		i2d_ASN1_TIME(ASN1_TIME *a,unsigned char **pp);
74955714SkrisASN1_TIME *	d2i_ASN1_TIME(ASN1_TIME **a,unsigned char **pp, long length);
75055714SkrisASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t);
75155714Skris
75255714Skrisint		i2d_ASN1_SET(STACK *a, unsigned char **pp,
75355714Skris			int (*func)(), int ex_tag, int ex_class, int is_set);
75455714SkrisSTACK *		d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
75568651Skris			char *(*func)(), void (*free_func)(void *),
75655714Skris			int ex_tag, int ex_class);
75755714Skris
75868651Skris#ifndef NO_BIO
75955714Skrisint i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);
76055714Skrisint a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size);
76155714Skrisint i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a);
76255714Skrisint a2i_ASN1_ENUMERATED(BIO *bp,ASN1_ENUMERATED *bs,char *buf,int size);
76355714Skrisint i2a_ASN1_OBJECT(BIO *bp,ASN1_OBJECT *a);
76455714Skrisint a2i_ASN1_STRING(BIO *bp,ASN1_STRING *bs,char *buf,int size);
76555714Skrisint i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type);
76655714Skris#endif
76755714Skrisint i2t_ASN1_OBJECT(char *buf,int buf_len,ASN1_OBJECT *a);
76855714Skris
76955714Skrisint a2d_ASN1_OBJECT(unsigned char *out,int olen, const char *buf, int num);
77055714SkrisASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data,int len,
77155714Skris	char *sn, char *ln);
77255714Skris
77355714Skrisint ASN1_INTEGER_set(ASN1_INTEGER *a, long v);
77455714Skrislong ASN1_INTEGER_get(ASN1_INTEGER *a);
77555714SkrisASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai);
77655714SkrisBIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai,BIGNUM *bn);
77755714Skris
77855714Skrisint ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
77955714Skrislong ASN1_ENUMERATED_get(ASN1_ENUMERATED *a);
78055714SkrisASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai);
78155714SkrisBIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai,BIGNUM *bn);
78255714Skris
78355714Skris/* General */
78455714Skris/* given a string, return the correct type, max is the maximum length */
78555714Skrisint ASN1_PRINTABLE_type(unsigned char *s, int max);
78655714Skris
78755714Skrisint i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass);
78855714SkrisASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp,
78955714Skris	long length, int Ptag, int Pclass);
79055714Skris/* type is one or more of the B_ASN1_ values. */
79155714SkrisASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a,unsigned char **pp,
79255714Skris		long length,int type);
79355714Skris
79455714Skris/* PARSING */
79555714Skrisint asn1_Finish(ASN1_CTX *c);
79655714Skris
79755714Skris/* SPECIALS */
79855714Skrisint ASN1_get_object(unsigned char **pp, long *plength, int *ptag,
79955714Skris	int *pclass, long omax);
80055714Skrisint ASN1_check_infinite_end(unsigned char **p,long len);
80155714Skrisvoid ASN1_put_object(unsigned char **pp, int constructed, int length,
80255714Skris	int tag, int xclass);
80355714Skrisint ASN1_object_size(int constructed, int length, int tag);
80455714Skris
80555714Skris/* Used to implement other functions */
80655714Skrischar *ASN1_dup(int (*i2d)(),char *(*d2i)(),char *x);
80755714Skris
80855714Skris#ifndef NO_FP_API
80955714Skrischar *ASN1_d2i_fp(char *(*xnew)(),char *(*d2i)(),FILE *fp,unsigned char **x);
81055714Skrisint ASN1_i2d_fp(int (*i2d)(),FILE *out,unsigned char *x);
81168651Skrisint ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags);
81255714Skris#endif
81355714Skris
81468651Skrisint ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in);
81568651Skris
81668651Skris#ifndef NO_BIO
81755714Skrischar *ASN1_d2i_bio(char *(*xnew)(),char *(*d2i)(),BIO *bp,unsigned char **x);
81855714Skrisint ASN1_i2d_bio(int (*i2d)(),BIO *out,unsigned char *x);
81955714Skrisint ASN1_UTCTIME_print(BIO *fp,ASN1_UTCTIME *a);
82055714Skrisint ASN1_GENERALIZEDTIME_print(BIO *fp,ASN1_GENERALIZEDTIME *a);
82155714Skrisint ASN1_TIME_print(BIO *fp,ASN1_TIME *a);
82255714Skrisint ASN1_STRING_print(BIO *bp,ASN1_STRING *v);
82368651Skrisint ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags);
82455714Skrisint ASN1_parse(BIO *bp,unsigned char *pp,long len,int indent);
82568651Skrisint ASN1_parse_dump(BIO *bp,unsigned char *pp,long len,int indent,int dump);
82655714Skris#endif
82759191Skrisconst char *ASN1_tag2str(int tag);
82855714Skris
82955714Skris/* Used to load and write netscape format cert/key */
83055714Skrisint i2d_ASN1_HEADER(ASN1_HEADER *a,unsigned char **pp);
83155714SkrisASN1_HEADER *d2i_ASN1_HEADER(ASN1_HEADER **a,unsigned char **pp, long length);
83255714SkrisASN1_HEADER *ASN1_HEADER_new(void );
83355714Skrisvoid ASN1_HEADER_free(ASN1_HEADER *a);
83455714Skris
83555714Skrisint ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s);
83655714Skris
83755714Skrisvoid ERR_load_ASN1_strings(void);
83855714Skris
83955714Skris/* Not used that much at this point, except for the first two */
84055714SkrisASN1_METHOD *X509_asn1_meth(void);
84155714SkrisASN1_METHOD *RSAPrivateKey_asn1_meth(void);
84255714SkrisASN1_METHOD *ASN1_IA5STRING_asn1_meth(void);
84355714SkrisASN1_METHOD *ASN1_BIT_STRING_asn1_meth(void);
84455714Skris
84555714Skrisint ASN1_TYPE_set_octetstring(ASN1_TYPE *a,
84655714Skris	unsigned char *data, int len);
84755714Skrisint ASN1_TYPE_get_octetstring(ASN1_TYPE *a,
84855714Skris	unsigned char *data, int max_len);
84955714Skrisint ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num,
85055714Skris	unsigned char *data, int len);
85155714Skrisint ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a,long *num,
85255714Skris	unsigned char *data, int max_len);
85355714Skris
85455714SkrisSTACK *ASN1_seq_unpack(unsigned char *buf, int len, char *(*d2i)(),
85568651Skris						 void (*free_func)(void *) );
85655714Skrisunsigned char *ASN1_seq_pack(STACK *safes, int (*i2d)(), unsigned char **buf,
85768651Skris			     int *len );
85855714Skrisvoid *ASN1_unpack_string(ASN1_STRING *oct, char *(*d2i)());
85955714SkrisASN1_STRING *ASN1_pack_string(void *obj, int (*i2d)(), ASN1_OCTET_STRING **oct);
86055714Skris
86159191Skrisvoid ASN1_STRING_set_default_mask(unsigned long mask);
86259191Skrisint ASN1_STRING_set_default_mask_asc(char *p);
86359191Skrisunsigned long ASN1_STRING_get_default_mask(void);
86459191Skrisint ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,
86559191Skris					int inform, unsigned long mask);
86659191Skrisint ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
86759191Skris					int inform, unsigned long mask,
86859191Skris					long minsize, long maxsize);
86959191Skris
87059191SkrisASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
87159191Skris		const unsigned char *in, int inlen, int inform, int nid);
87259191SkrisASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);
87359191Skrisint ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long);
87459191Skrisvoid ASN1_STRING_TABLE_cleanup(void);
87559191Skris
87655714Skris/* BEGIN ERROR CODES */
87755714Skris/* The following lines are auto generated by the script mkerr.pl. Any changes
87855714Skris * made after this point may be overwritten when the script is next run.
87955714Skris */
88055714Skris
88155714Skris/* Error codes for the ASN1 functions. */
88255714Skris
88355714Skris/* Function codes. */
88455714Skris#define ASN1_F_A2D_ASN1_OBJECT				 100
88555714Skris#define ASN1_F_A2I_ASN1_ENUMERATED			 236
88655714Skris#define ASN1_F_A2I_ASN1_INTEGER				 101
88755714Skris#define ASN1_F_A2I_ASN1_STRING				 102
88859191Skris#define ASN1_F_ACCESS_DESCRIPTION_NEW			 291
88955714Skris#define ASN1_F_ASN1_COLLATE_PRIMITIVE			 103
89055714Skris#define ASN1_F_ASN1_D2I_BIO				 104
89155714Skris#define ASN1_F_ASN1_D2I_FP				 105
89255714Skris#define ASN1_F_ASN1_DUP					 106
89355714Skris#define ASN1_F_ASN1_ENUMERATED_SET			 232
89455714Skris#define ASN1_F_ASN1_ENUMERATED_TO_BN			 233
89555714Skris#define ASN1_F_ASN1_GENERALIZEDTIME_NEW			 222
89655714Skris#define ASN1_F_ASN1_GET_OBJECT				 107
89755714Skris#define ASN1_F_ASN1_HEADER_NEW				 108
89855714Skris#define ASN1_F_ASN1_I2D_BIO				 109
89955714Skris#define ASN1_F_ASN1_I2D_FP				 110
90055714Skris#define ASN1_F_ASN1_INTEGER_SET				 111
90155714Skris#define ASN1_F_ASN1_INTEGER_TO_BN			 112
90259191Skris#define ASN1_F_ASN1_MBSTRING_COPY			 282
90355714Skris#define ASN1_F_ASN1_OBJECT_NEW				 113
90455714Skris#define ASN1_F_ASN1_PACK_STRING				 245
90555714Skris#define ASN1_F_ASN1_PBE_SET				 253
90655714Skris#define ASN1_F_ASN1_SEQ_PACK				 246
90755714Skris#define ASN1_F_ASN1_SEQ_UNPACK				 247
90855714Skris#define ASN1_F_ASN1_SIGN				 114
90955714Skris#define ASN1_F_ASN1_STRING_NEW				 115
91059191Skris#define ASN1_F_ASN1_STRING_TABLE_ADD			 283
91155714Skris#define ASN1_F_ASN1_STRING_TYPE_NEW			 116
91255714Skris#define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING		 117
91355714Skris#define ASN1_F_ASN1_TYPE_GET_OCTETSTRING		 118
91455714Skris#define ASN1_F_ASN1_TYPE_NEW				 119
91555714Skris#define ASN1_F_ASN1_UNPACK_STRING			 248
91655714Skris#define ASN1_F_ASN1_UTCTIME_NEW				 120
91755714Skris#define ASN1_F_ASN1_VERIFY				 121
91855714Skris#define ASN1_F_AUTHORITY_KEYID_NEW			 237
91955714Skris#define ASN1_F_BASIC_CONSTRAINTS_NEW			 226
92055714Skris#define ASN1_F_BN_TO_ASN1_ENUMERATED			 234
92155714Skris#define ASN1_F_BN_TO_ASN1_INTEGER			 122
92259191Skris#define ASN1_F_D2I_ACCESS_DESCRIPTION			 284
92355714Skris#define ASN1_F_D2I_ASN1_BIT_STRING			 123
92455714Skris#define ASN1_F_D2I_ASN1_BMPSTRING			 124
92555714Skris#define ASN1_F_D2I_ASN1_BOOLEAN				 125
92655714Skris#define ASN1_F_D2I_ASN1_BYTES				 126
92755714Skris#define ASN1_F_D2I_ASN1_ENUMERATED			 235
92855714Skris#define ASN1_F_D2I_ASN1_GENERALIZEDTIME			 223
92955714Skris#define ASN1_F_D2I_ASN1_HEADER				 127
93055714Skris#define ASN1_F_D2I_ASN1_INTEGER				 128
93159191Skris#define ASN1_F_D2I_ASN1_NULL				 292
93255714Skris#define ASN1_F_D2I_ASN1_OBJECT				 129
93355714Skris#define ASN1_F_D2I_ASN1_OCTET_STRING			 130
93455714Skris#define ASN1_F_D2I_ASN1_PRINT_TYPE			 131
93555714Skris#define ASN1_F_D2I_ASN1_SET				 132
93655714Skris#define ASN1_F_D2I_ASN1_TIME				 224
93755714Skris#define ASN1_F_D2I_ASN1_TYPE				 133
93855714Skris#define ASN1_F_D2I_ASN1_TYPE_BYTES			 134
93955714Skris#define ASN1_F_D2I_ASN1_UINTEGER			 280
94055714Skris#define ASN1_F_D2I_ASN1_UTCTIME				 135
94155714Skris#define ASN1_F_D2I_ASN1_UTF8STRING			 266
94255714Skris#define ASN1_F_D2I_ASN1_VISIBLESTRING			 267
94355714Skris#define ASN1_F_D2I_AUTHORITY_KEYID			 238
94455714Skris#define ASN1_F_D2I_BASIC_CONSTRAINTS			 227
94555714Skris#define ASN1_F_D2I_DHPARAMS				 136
94655714Skris#define ASN1_F_D2I_DIST_POINT				 276
94755714Skris#define ASN1_F_D2I_DIST_POINT_NAME			 277
94855714Skris#define ASN1_F_D2I_DSAPARAMS				 137
94955714Skris#define ASN1_F_D2I_DSAPRIVATEKEY			 138
95055714Skris#define ASN1_F_D2I_DSAPUBLICKEY				 139
95155714Skris#define ASN1_F_D2I_GENERAL_NAME				 230
95255714Skris#define ASN1_F_D2I_NETSCAPE_CERT_SEQUENCE		 228
95355714Skris#define ASN1_F_D2I_NETSCAPE_PKEY			 140
95455714Skris#define ASN1_F_D2I_NETSCAPE_RSA				 141
95555714Skris#define ASN1_F_D2I_NETSCAPE_RSA_2			 142
95655714Skris#define ASN1_F_D2I_NETSCAPE_SPKAC			 143
95755714Skris#define ASN1_F_D2I_NETSCAPE_SPKI			 144
95855714Skris#define ASN1_F_D2I_NOTICEREF				 268
95959191Skris#define ASN1_F_D2I_OTHERNAME				 287
96055714Skris#define ASN1_F_D2I_PBE2PARAM				 262
96155714Skris#define ASN1_F_D2I_PBEPARAM				 249
96255714Skris#define ASN1_F_D2I_PBKDF2PARAM				 263
96355714Skris#define ASN1_F_D2I_PKCS12				 254
96455714Skris#define ASN1_F_D2I_PKCS12_BAGS				 255
96555714Skris#define ASN1_F_D2I_PKCS12_MAC_DATA			 256
96655714Skris#define ASN1_F_D2I_PKCS12_SAFEBAG			 257
96755714Skris#define ASN1_F_D2I_PKCS7				 145
96855714Skris#define ASN1_F_D2I_PKCS7_DIGEST				 146
96955714Skris#define ASN1_F_D2I_PKCS7_ENCRYPT			 147
97055714Skris#define ASN1_F_D2I_PKCS7_ENC_CONTENT			 148
97155714Skris#define ASN1_F_D2I_PKCS7_ENVELOPE			 149
97255714Skris#define ASN1_F_D2I_PKCS7_ISSUER_AND_SERIAL		 150
97355714Skris#define ASN1_F_D2I_PKCS7_RECIP_INFO			 151
97455714Skris#define ASN1_F_D2I_PKCS7_SIGNED				 152
97555714Skris#define ASN1_F_D2I_PKCS7_SIGNER_INFO			 153
97655714Skris#define ASN1_F_D2I_PKCS7_SIGN_ENVELOPE			 154
97755714Skris#define ASN1_F_D2I_PKCS8_PRIV_KEY_INFO			 250
97855714Skris#define ASN1_F_D2I_PKEY_USAGE_PERIOD			 239
97955714Skris#define ASN1_F_D2I_POLICYINFO				 269
98055714Skris#define ASN1_F_D2I_POLICYQUALINFO			 270
98155714Skris#define ASN1_F_D2I_PRIVATEKEY				 155
98255714Skris#define ASN1_F_D2I_PUBLICKEY				 156
98355714Skris#define ASN1_F_D2I_RSAPRIVATEKEY			 157
98455714Skris#define ASN1_F_D2I_RSAPUBLICKEY				 158
98555714Skris#define ASN1_F_D2I_SXNET				 241
98655714Skris#define ASN1_F_D2I_SXNETID				 243
98755714Skris#define ASN1_F_D2I_USERNOTICE				 271
98855714Skris#define ASN1_F_D2I_X509					 159
98955714Skris#define ASN1_F_D2I_X509_ALGOR				 160
99055714Skris#define ASN1_F_D2I_X509_ATTRIBUTE			 161
99159191Skris#define ASN1_F_D2I_X509_CERT_AUX			 285
99255714Skris#define ASN1_F_D2I_X509_CINF				 162
99355714Skris#define ASN1_F_D2I_X509_CRL				 163
99455714Skris#define ASN1_F_D2I_X509_CRL_INFO			 164
99555714Skris#define ASN1_F_D2I_X509_EXTENSION			 165
99655714Skris#define ASN1_F_D2I_X509_KEY				 166
99755714Skris#define ASN1_F_D2I_X509_NAME				 167
99855714Skris#define ASN1_F_D2I_X509_NAME_ENTRY			 168
99955714Skris#define ASN1_F_D2I_X509_PKEY				 169
100055714Skris#define ASN1_F_D2I_X509_PUBKEY				 170
100155714Skris#define ASN1_F_D2I_X509_REQ				 171
100255714Skris#define ASN1_F_D2I_X509_REQ_INFO			 172
100355714Skris#define ASN1_F_D2I_X509_REVOKED				 173
100455714Skris#define ASN1_F_D2I_X509_SIG				 174
100555714Skris#define ASN1_F_D2I_X509_VAL				 175
100655714Skris#define ASN1_F_DIST_POINT_NAME_NEW			 278
100755714Skris#define ASN1_F_DIST_POINT_NEW				 279
100855714Skris#define ASN1_F_GENERAL_NAME_NEW				 231
100955714Skris#define ASN1_F_I2D_ASN1_HEADER				 176
101055714Skris#define ASN1_F_I2D_ASN1_TIME				 225
101155714Skris#define ASN1_F_I2D_DHPARAMS				 177
101255714Skris#define ASN1_F_I2D_DSAPARAMS				 178
101355714Skris#define ASN1_F_I2D_DSAPRIVATEKEY			 179
101455714Skris#define ASN1_F_I2D_DSAPUBLICKEY				 180
101559191Skris#define ASN1_F_I2D_DSA_PUBKEY				 290
101655714Skris#define ASN1_F_I2D_NETSCAPE_RSA				 181
101755714Skris#define ASN1_F_I2D_PKCS7				 182
101855714Skris#define ASN1_F_I2D_PRIVATEKEY				 183
101955714Skris#define ASN1_F_I2D_PUBLICKEY				 184
102055714Skris#define ASN1_F_I2D_RSAPRIVATEKEY			 185
102155714Skris#define ASN1_F_I2D_RSAPUBLICKEY				 186
102259191Skris#define ASN1_F_I2D_RSA_PUBKEY				 289
102355714Skris#define ASN1_F_I2D_X509_ATTRIBUTE			 187
102455714Skris#define ASN1_F_I2T_ASN1_OBJECT				 188
102555714Skris#define ASN1_F_NETSCAPE_CERT_SEQUENCE_NEW		 229
102655714Skris#define ASN1_F_NETSCAPE_PKEY_NEW			 189
102755714Skris#define ASN1_F_NETSCAPE_SPKAC_NEW			 190
102855714Skris#define ASN1_F_NETSCAPE_SPKI_NEW			 191
102955714Skris#define ASN1_F_NOTICEREF_NEW				 272
103059191Skris#define ASN1_F_OTHERNAME_NEW				 288
103155714Skris#define ASN1_F_PBE2PARAM_NEW				 264
103255714Skris#define ASN1_F_PBEPARAM_NEW				 251
103355714Skris#define ASN1_F_PBKDF2PARAM_NEW				 265
103455714Skris#define ASN1_F_PKCS12_BAGS_NEW				 258
103555714Skris#define ASN1_F_PKCS12_MAC_DATA_NEW			 259
103655714Skris#define ASN1_F_PKCS12_NEW				 260
103755714Skris#define ASN1_F_PKCS12_SAFEBAG_NEW			 261
103855714Skris#define ASN1_F_PKCS5_PBE2_SET				 281
103955714Skris#define ASN1_F_PKCS7_DIGEST_NEW				 192
104055714Skris#define ASN1_F_PKCS7_ENCRYPT_NEW			 193
104155714Skris#define ASN1_F_PKCS7_ENC_CONTENT_NEW			 194
104255714Skris#define ASN1_F_PKCS7_ENVELOPE_NEW			 195
104355714Skris#define ASN1_F_PKCS7_ISSUER_AND_SERIAL_NEW		 196
104455714Skris#define ASN1_F_PKCS7_NEW				 197
104555714Skris#define ASN1_F_PKCS7_RECIP_INFO_NEW			 198
104655714Skris#define ASN1_F_PKCS7_SIGNED_NEW				 199
104755714Skris#define ASN1_F_PKCS7_SIGNER_INFO_NEW			 200
104855714Skris#define ASN1_F_PKCS7_SIGN_ENVELOPE_NEW			 201
104955714Skris#define ASN1_F_PKCS8_PRIV_KEY_INFO_NEW			 252
105055714Skris#define ASN1_F_PKEY_USAGE_PERIOD_NEW			 240
105155714Skris#define ASN1_F_POLICYINFO_NEW				 273
105255714Skris#define ASN1_F_POLICYQUALINFO_NEW			 274
105355714Skris#define ASN1_F_SXNETID_NEW				 244
105455714Skris#define ASN1_F_SXNET_NEW				 242
105555714Skris#define ASN1_F_USERNOTICE_NEW				 275
105655714Skris#define ASN1_F_X509_ALGOR_NEW				 202
105755714Skris#define ASN1_F_X509_ATTRIBUTE_NEW			 203
105859191Skris#define ASN1_F_X509_CERT_AUX_NEW			 286
105955714Skris#define ASN1_F_X509_CINF_NEW				 204
106055714Skris#define ASN1_F_X509_CRL_INFO_NEW			 205
106155714Skris#define ASN1_F_X509_CRL_NEW				 206
106255714Skris#define ASN1_F_X509_DHPARAMS_NEW			 207
106355714Skris#define ASN1_F_X509_EXTENSION_NEW			 208
106455714Skris#define ASN1_F_X509_INFO_NEW				 209
106555714Skris#define ASN1_F_X509_KEY_NEW				 210
106655714Skris#define ASN1_F_X509_NAME_ENTRY_NEW			 211
106755714Skris#define ASN1_F_X509_NAME_NEW				 212
106855714Skris#define ASN1_F_X509_NEW					 213
106955714Skris#define ASN1_F_X509_PKEY_NEW				 214
107055714Skris#define ASN1_F_X509_PUBKEY_NEW				 215
107155714Skris#define ASN1_F_X509_REQ_INFO_NEW			 216
107255714Skris#define ASN1_F_X509_REQ_NEW				 217
107355714Skris#define ASN1_F_X509_REVOKED_NEW				 218
107455714Skris#define ASN1_F_X509_SIG_NEW				 219
107555714Skris#define ASN1_F_X509_VAL_FREE				 220
107655714Skris#define ASN1_F_X509_VAL_NEW				 221
107755714Skris
107855714Skris/* Reason codes. */
107955714Skris#define ASN1_R_BAD_CLASS				 100
108055714Skris#define ASN1_R_BAD_OBJECT_HEADER			 101
108155714Skris#define ASN1_R_BAD_PASSWORD_READ			 102
108255714Skris#define ASN1_R_BAD_PKCS7_CONTENT			 103
108355714Skris#define ASN1_R_BAD_PKCS7_TYPE				 104
108455714Skris#define ASN1_R_BAD_TAG					 105
108555714Skris#define ASN1_R_BAD_TYPE					 106
108655714Skris#define ASN1_R_BN_LIB					 107
108755714Skris#define ASN1_R_BOOLEAN_IS_WRONG_LENGTH			 108
108855714Skris#define ASN1_R_BUFFER_TOO_SMALL				 109
108959191Skris#define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER		 166
109055714Skris#define ASN1_R_DATA_IS_WRONG				 110
109155714Skris#define ASN1_R_DECODE_ERROR				 155
109255714Skris#define ASN1_R_DECODING_ERROR				 111
109355714Skris#define ASN1_R_ENCODE_ERROR				 156
109455714Skris#define ASN1_R_ERROR_PARSING_SET_ELEMENT		 112
109555714Skris#define ASN1_R_ERROR_SETTING_CIPHER_PARAMS		 157
109655714Skris#define ASN1_R_EXPECTING_AN_ENUMERATED			 154
109755714Skris#define ASN1_R_EXPECTING_AN_INTEGER			 113
109855714Skris#define ASN1_R_EXPECTING_AN_OBJECT			 114
109955714Skris#define ASN1_R_EXPECTING_AN_OCTET_STRING		 115
110055714Skris#define ASN1_R_EXPECTING_A_BIT_STRING			 116
110155714Skris#define ASN1_R_EXPECTING_A_BOOLEAN			 117
110255714Skris#define ASN1_R_EXPECTING_A_GENERALIZEDTIME		 151
110359191Skris#define ASN1_R_EXPECTING_A_NULL				 164
110455714Skris#define ASN1_R_EXPECTING_A_TIME				 152
110555714Skris#define ASN1_R_EXPECTING_A_UTCTIME			 118
110655714Skris#define ASN1_R_FIRST_NUM_TOO_LARGE			 119
110755714Skris#define ASN1_R_GENERALIZEDTIME_TOO_LONG			 153
110855714Skris#define ASN1_R_HEADER_TOO_LONG				 120
110959191Skris#define ASN1_R_ILLEGAL_CHARACTERS			 158
111059191Skris#define ASN1_R_INVALID_BMPSTRING_LENGTH			 159
111155714Skris#define ASN1_R_INVALID_DIGIT				 121
111255714Skris#define ASN1_R_INVALID_SEPARATOR			 122
111355714Skris#define ASN1_R_INVALID_TIME_FORMAT			 123
111459191Skris#define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH		 160
111559191Skris#define ASN1_R_INVALID_UTF8STRING			 161
111655714Skris#define ASN1_R_IV_TOO_LARGE				 124
111755714Skris#define ASN1_R_LENGTH_ERROR				 125
111855714Skris#define ASN1_R_MISSING_SECOND_NUMBER			 126
111955714Skris#define ASN1_R_NON_HEX_CHARACTERS			 127
112055714Skris#define ASN1_R_NOT_ENOUGH_DATA				 128
112159191Skris#define ASN1_R_NULL_IS_WRONG_LENGTH			 165
112255714Skris#define ASN1_R_ODD_NUMBER_OF_CHARS			 129
112355714Skris#define ASN1_R_PARSING					 130
112455714Skris#define ASN1_R_PRIVATE_KEY_HEADER_MISSING		 131
112555714Skris#define ASN1_R_SECOND_NUMBER_TOO_LARGE			 132
112655714Skris#define ASN1_R_SHORT_LINE				 133
112759191Skris#define ASN1_R_STRING_TOO_LONG				 163
112855714Skris#define ASN1_R_STRING_TOO_SHORT				 134
112955714Skris#define ASN1_R_TAG_VALUE_TOO_HIGH			 135
113055714Skris#define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 136
113155714Skris#define ASN1_R_TOO_LONG					 137
113255714Skris#define ASN1_R_UNABLE_TO_DECODE_RSA_KEY			 138
113355714Skris#define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY		 139
113455714Skris#define ASN1_R_UNKNOWN_ATTRIBUTE_TYPE			 140
113559191Skris#define ASN1_R_UNKNOWN_FORMAT				 162
113655714Skris#define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM		 141
113755714Skris#define ASN1_R_UNKNOWN_OBJECT_TYPE			 142
113855714Skris#define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE			 143
113955714Skris#define ASN1_R_UNSUPPORTED_CIPHER			 144
114055714Skris#define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM		 145
114155714Skris#define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE		 146
114255714Skris#define ASN1_R_UTCTIME_TOO_LONG				 147
114355714Skris#define ASN1_R_WRONG_PRINTABLE_TYPE			 148
114455714Skris#define ASN1_R_WRONG_TAG				 149
114555714Skris#define ASN1_R_WRONG_TYPE				 150
114655714Skris
114755714Skris#ifdef  __cplusplus
114855714Skris}
114955714Skris#endif
115055714Skris#endif
115155714Skris
1152