x509v3.h 23.3 KB
Newer Older
1 2 3 4 5 6
/* x509v3.h */
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
 * project 1999.
 */
/* ====================================================================
 * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
7 8 9 10
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
11 12 13 14
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
15
 * 2. Redistributions in binary form must reproduce the above copyright
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. All advertising materials mentioning features or use of this
 *    software must display the following acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
 *
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 *    endorse or promote products derived from this software without
 *    prior written permission. For written permission, please contact
 *    licensing@OpenSSL.org.
 *
 * 5. Products derived from this software may not be called "OpenSSL"
 *    nor may "OpenSSL" appear in their names without prior written
 *    permission of the OpenSSL Project.
 *
 * 6. Redistributions of any form whatsoever must retain the following
 *    acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
 *
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 * ====================================================================
 *
 * This product includes cryptographic software written by Eric Young
 * (eay@cryptsoft.com).  This product includes software written by Tim
 * Hudson (tjh@cryptsoft.com).
 *
57
 */
58 59 60
#ifndef HEADER_X509V3_H
#define HEADER_X509V3_H

61 62
#include <openssl/bio.h>
#include <openssl/x509.h>
63
#include <openssl/conf.h>
64

65 66 67 68
#ifdef __cplusplus
extern "C" {
#endif

69 70 71 72 73 74
/* Forward reference */
struct v3_ext_method;
struct v3_ext_ctx;

/* Useful typedefs */

75 76
typedef void * (*X509V3_EXT_NEW)(void);
typedef void (*X509V3_EXT_FREE)(void *);
77
typedef void * (*X509V3_EXT_D2I)(void *, const unsigned char ** , long);
78
typedef int (*X509V3_EXT_I2D)(void *, unsigned char **);
79 80
typedef STACK_OF(CONF_VALUE) * (*X509V3_EXT_I2V)(struct v3_ext_method *method, void *ext, STACK_OF(CONF_VALUE) *extlist);
typedef void * (*X509V3_EXT_V2I)(struct v3_ext_method *method, struct v3_ext_ctx *ctx, STACK_OF(CONF_VALUE) *values);
81
typedef char * (*X509V3_EXT_I2S)(struct v3_ext_method *method, void *ext);
82
typedef void * (*X509V3_EXT_S2I)(struct v3_ext_method *method, struct v3_ext_ctx *ctx, const char *str);
83
typedef int (*X509V3_EXT_I2R)(struct v3_ext_method *method, void *ext, BIO *out, int indent);
84
typedef void * (*X509V3_EXT_R2I)(struct v3_ext_method *method, struct v3_ext_ctx *ctx, const char *str);
85 86 87 88 89 90

/* V3 extension structure */

struct v3_ext_method {
int ext_nid;
int ext_flags;
D
 
Dr. Stephen Henson 已提交
91
/* If this is set the following four fields are ignored */
92
ASN1_ITEM_EXP *it;
D
 
Dr. Stephen Henson 已提交
93
/* Old style ASN1 calls */
94 95 96 97 98 99 100 101 102 103 104 105 106
X509V3_EXT_NEW ext_new;
X509V3_EXT_FREE ext_free;
X509V3_EXT_D2I d2i;
X509V3_EXT_I2D i2d;

/* The following pair is used for string extensions */
X509V3_EXT_I2S i2s;
X509V3_EXT_S2I s2i;

/* The following pair is used for multi-valued extensions */
X509V3_EXT_I2V i2v;
X509V3_EXT_V2I v2i;

107
/* The following are used for raw extensions */
108
X509V3_EXT_I2R i2r;
109
X509V3_EXT_R2I r2i;
110

111
void *usr_data;	/* Any extension specific data */
112 113
};

114 115
typedef struct X509V3_CONF_METHOD_st {
char * (*get_string)(void *db, char *section, char *value);
116
STACK_OF(CONF_VALUE) * (*get_section)(void *db, char *section);
117
void (*free_string)(void *db, char * string);
118
void (*free_section)(void *db, STACK_OF(CONF_VALUE) *section);
119
} X509V3_CONF_METHOD;
120

121
/* Context specific info */
122
struct v3_ext_ctx {
123 124
#define CTX_TEST 0x1
int flags;
125 126 127
X509 *issuer_cert;
X509 *subject_cert;
X509_REQ *subject_req;
128
X509_CRL *crl;
129 130
X509V3_CONF_METHOD *db_meth;
void *db;
131 132 133 134 135
/* Maybe more here */
};

typedef struct v3_ext_method X509V3_EXT_METHOD;

136 137
DECLARE_STACK_OF(X509V3_EXT_METHOD)

138
/* ext_flags values */
139 140 141
#define X509V3_EXT_DYNAMIC	0x1
#define X509V3_EXT_CTX_DEP	0x2
#define X509V3_EXT_MULTILINE	0x4
142

143 144
typedef BIT_STRING_BITNAME ENUMERATED_NAMES;

145
typedef struct BASIC_CONSTRAINTS_st {
146 147 148 149
int ca;
ASN1_INTEGER *pathlen;
} BASIC_CONSTRAINTS;

150

151
typedef struct PKEY_USAGE_PERIOD_st {
152 153 154 155
ASN1_GENERALIZEDTIME *notBefore;
ASN1_GENERALIZEDTIME *notAfter;
} PKEY_USAGE_PERIOD;

156 157 158 159 160
typedef struct otherName_st {
ASN1_OBJECT *type_id;
ASN1_TYPE *value;
} OTHERNAME;

D
 
Dr. Stephen Henson 已提交
161 162 163 164 165
typedef struct EDIPartyName_st {
	ASN1_STRING *nameAssigner;
	ASN1_STRING *partyName;
} EDIPARTYNAME;

166
typedef struct GENERAL_NAME_st {
167

D
 
Dr. Stephen Henson 已提交
168 169 170 171 172 173 174 175 176
#define GEN_OTHERNAME	0
#define GEN_EMAIL	1
#define GEN_DNS		2
#define GEN_X400	3
#define GEN_DIRNAME	4
#define GEN_EDIPARTY	5
#define GEN_URI		6
#define GEN_IPADD	7
#define GEN_RID		8
177 178 179 180

int type;
union {
	char *ptr;
D
 
Dr. Stephen Henson 已提交
181 182 183 184 185 186 187 188 189 190 191
	OTHERNAME *otherName; /* otherName */
	ASN1_IA5STRING *rfc822Name;
	ASN1_IA5STRING *dNSName;
	ASN1_TYPE *x400Address;
	X509_NAME *directoryName;
	EDIPARTYNAME *ediPartyName;
	ASN1_IA5STRING *uniformResourceIdentifier;
	ASN1_OCTET_STRING *iPAddress;
	ASN1_OBJECT *registeredID;

	/* Old names */
192 193
	ASN1_OCTET_STRING *ip; /* iPAddress */
	X509_NAME *dirn;		/* dirn */
D
 
Dr. Stephen Henson 已提交
194
	ASN1_IA5STRING *ia5;/* rfc822Name, dNSName, uniformResourceIdentifier */
195
	ASN1_OBJECT *rid; /* registeredID */
D
 
Dr. Stephen Henson 已提交
196
	ASN1_TYPE *other; /* x400Address */
197 198 199
} d;
} GENERAL_NAME;

D
 
Dr. Stephen Henson 已提交
200 201
typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;

202
typedef struct ACCESS_DESCRIPTION_st {
R
Richard Levitte 已提交
203 204
	ASN1_OBJECT *method;
	GENERAL_NAME *location;
205 206
} ACCESS_DESCRIPTION;

D
 
Dr. Stephen Henson 已提交
207 208 209 210
typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;

typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;

211 212 213
DECLARE_STACK_OF(GENERAL_NAME)
DECLARE_ASN1_SET_OF(GENERAL_NAME)

214 215 216
DECLARE_STACK_OF(ACCESS_DESCRIPTION)
DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)

217
typedef struct DIST_POINT_NAME_st {
D
 
Dr. Stephen Henson 已提交
218 219 220 221 222
int type;
union {
	GENERAL_NAMES *fullname;
	STACK_OF(X509_NAME_ENTRY) *relativename;
} name;
223 224 225 226 227
} DIST_POINT_NAME;

typedef struct DIST_POINT_st {
DIST_POINT_NAME	*distpoint;
ASN1_BIT_STRING *reasons;
D
 
Dr. Stephen Henson 已提交
228
GENERAL_NAMES *CRLissuer;
229 230
} DIST_POINT;

D
 
Dr. Stephen Henson 已提交
231 232
typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;

233 234 235
DECLARE_STACK_OF(DIST_POINT)
DECLARE_ASN1_SET_OF(DIST_POINT)

236 237
typedef struct AUTHORITY_KEYID_st {
ASN1_OCTET_STRING *keyid;
D
 
Dr. Stephen Henson 已提交
238
GENERAL_NAMES *issuer;
239 240 241
ASN1_INTEGER *serial;
} AUTHORITY_KEYID;

242
/* Strong extranet structures */
243

244
typedef struct SXNET_ID_st {
245 246 247
	ASN1_INTEGER *zone;
	ASN1_OCTET_STRING *user;
} SXNETID;
248

B
Ben Laurie 已提交
249 250 251 252 253 254 255 256
DECLARE_STACK_OF(SXNETID)
DECLARE_ASN1_SET_OF(SXNETID)

typedef struct SXNET_st {
	ASN1_INTEGER *version;
	STACK_OF(SXNETID) *ids;
} SXNET;

257 258
typedef struct NOTICEREF_st {
	ASN1_STRING *organization;
B
Ben Laurie 已提交
259
	STACK_OF(ASN1_INTEGER) *noticenos;
260 261 262
} NOTICEREF;

typedef struct USERNOTICE_st {
263
	NOTICEREF *noticeref;
264 265 266 267 268 269 270 271 272 273 274 275 276
	ASN1_STRING *exptext;
} USERNOTICE;

typedef struct POLICYQUALINFO_st {
	ASN1_OBJECT *pqualid;
	union {
		ASN1_IA5STRING *cpsuri;
		USERNOTICE *usernotice;
		ASN1_TYPE *other;
	} d;
} POLICYQUALINFO;

DECLARE_STACK_OF(POLICYQUALINFO)
277
DECLARE_ASN1_SET_OF(POLICYQUALINFO)
278 279 280

typedef struct POLICYINFO_st {
	ASN1_OBJECT *policyid;
281
	STACK_OF(POLICYQUALINFO) *qualifiers;
282 283
} POLICYINFO;

D
 
Dr. Stephen Henson 已提交
284 285
typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;

B
Bodo Möller 已提交
286 287
DECLARE_STACK_OF(POLICYINFO)
DECLARE_ASN1_SET_OF(POLICYINFO)
288

D
Dr. Stephen Henson 已提交
289 290 291 292 293 294 295 296 297
typedef struct POLICY_MAPPING_st {
	ASN1_OBJECT *issuerDomainPolicy;
	ASN1_OBJECT *subjectDomainPolicy;
} POLICY_MAPPING;

DECLARE_STACK_OF(POLICY_MAPPING)

typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;

298 299 300 301 302 303 304 305 306 307 308 309 310
typedef struct GENERAL_SUBTREE_st {
	GENERAL_NAME *base;
	ASN1_INTEGER *minimum;
	ASN1_INTEGER *maximum;
} GENERAL_SUBTREE;

DECLARE_STACK_OF(GENERAL_SUBTREE)

typedef struct NAME_CONSTRAINTS_st {
	STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
	STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
} NAME_CONSTRAINTS;

311 312 313 314 315
typedef struct POLICY_CONSTRAINTS_st {
	ASN1_INTEGER *requireExplicitPolicy;
	ASN1_INTEGER *inhibitPolicyMapping;
} POLICY_CONSTRAINTS;

316 317 318
#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
",name:", val->name, ",value:", val->value);

319 320
#define X509V3_set_ctx_test(ctx) \
			X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
321
#define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;
322

323
#define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
D
 
Dr. Stephen Henson 已提交
324 325
			0,0,0,0, \
			0,0, \
326 327
			(X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
			(X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
328
			NULL, NULL, \
D
 
Dr. Stephen Henson 已提交
329
			table}
330

331
#define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
D
 
Dr. Stephen Henson 已提交
332
			0,0,0,0, \
333 334
			(X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
			(X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
D
 
Dr. Stephen Henson 已提交
335
			0,0,0,0, \
336 337
			NULL}

D
 
Dr. Stephen Henson 已提交
338
#define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
339

340 341 342 343 344 345 346 347 348 349 350 351 352

/* X509_PURPOSE stuff */

#define EXFLAG_BCONS		0x1
#define EXFLAG_KUSAGE		0x2
#define EXFLAG_XKUSAGE		0x4
#define EXFLAG_NSCERT		0x8

#define EXFLAG_CA		0x10
#define EXFLAG_SS		0x20
#define EXFLAG_V1		0x40
#define EXFLAG_INVALID		0x80
#define EXFLAG_SET		0x100
D
 
Dr. Stephen Henson 已提交
353
#define EXFLAG_CRITICAL		0x200
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371

#define KU_DIGITAL_SIGNATURE	0x0080
#define KU_NON_REPUDIATION	0x0040
#define KU_KEY_ENCIPHERMENT	0x0020
#define KU_DATA_ENCIPHERMENT	0x0010
#define KU_KEY_AGREEMENT	0x0008
#define KU_KEY_CERT_SIGN	0x0004
#define KU_CRL_SIGN		0x0002
#define KU_ENCIPHER_ONLY	0x0001
#define KU_DECIPHER_ONLY	0x8000

#define NS_SSL_CLIENT		0x80
#define NS_SSL_SERVER		0x40
#define NS_SMIME		0x20
#define NS_OBJSIGN		0x10
#define NS_SSL_CA		0x04
#define NS_SMIME_CA		0x02
#define NS_OBJSIGN_CA		0x01
D
 
Dr. Stephen Henson 已提交
372
#define NS_ANY_CA		(NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)
373 374 375 376 377 378

#define XKU_SSL_SERVER		0x1	
#define XKU_SSL_CLIENT		0x2
#define XKU_SMIME		0x4
#define XKU_CODE_SIGN		0x8
#define XKU_SGC			0x10
D
 
Dr. Stephen Henson 已提交
379 380
#define XKU_OCSP_SIGN		0x20
#define XKU_TIMESTAMP		0x40
381
#define XKU_DVCS		0x80
382

383 384 385
#define X509_PURPOSE_DYNAMIC	0x1
#define X509_PURPOSE_DYNAMIC_NAME	0x2

386
typedef struct x509_purpose_st {
387 388 389
	int purpose;
	int trust;		/* Default trust ID */
	int flags;
390 391
	int (*check_purpose)(const struct x509_purpose_st *,
				const X509 *, int);
392 393
	char *name;
	char *sname;
394
	void *usr_data;
395 396
} X509_PURPOSE;

397 398 399 400 401 402
#define X509_PURPOSE_SSL_CLIENT		1
#define X509_PURPOSE_SSL_SERVER		2
#define X509_PURPOSE_NS_SSL_SERVER	3
#define X509_PURPOSE_SMIME_SIGN		4
#define X509_PURPOSE_SMIME_ENCRYPT	5
#define X509_PURPOSE_CRL_SIGN		6
403
#define X509_PURPOSE_ANY		7
D
 
Dr. Stephen Henson 已提交
404
#define X509_PURPOSE_OCSP_HELPER	8
405

406
#define X509_PURPOSE_MIN		1
D
 
Dr. Stephen Henson 已提交
407
#define X509_PURPOSE_MAX		8
408

409 410 411 412 413 414 415 416 417 418 419 420
/* Flags for X509V3_EXT_print() */

#define X509V3_EXT_UNKNOWN_MASK		(0xfL << 16)
/* Return error for unknown extensions */
#define X509V3_EXT_DEFAULT		0
/* Print error for unknown extensions */
#define X509V3_EXT_ERROR_UNKNOWN	(1L << 16)
/* ASN1 parse unknown extensions */
#define X509V3_EXT_PARSE_UNKNOWN	(2L << 16)
/* BIO_dump unknown extensions */
#define X509V3_EXT_DUMP_UNKNOWN		(3L << 16)

421 422 423 424 425 426 427 428 429 430 431
/* Flags for X509V3_add1_i2d */

#define X509V3_ADD_OP_MASK		0xfL
#define X509V3_ADD_DEFAULT		0L
#define X509V3_ADD_APPEND		1L
#define X509V3_ADD_REPLACE		2L
#define X509V3_ADD_REPLACE_EXISTING	3L
#define X509V3_ADD_KEEP_EXISTING	4L
#define X509V3_ADD_DELETE		5L
#define X509V3_ADD_SILENT		0x10

432
DECLARE_STACK_OF(X509_PURPOSE)
433

D
 
Dr. Stephen Henson 已提交
434
DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)
435

D
 
Dr. Stephen Henson 已提交
436 437
DECLARE_ASN1_FUNCTIONS(SXNET)
DECLARE_ASN1_FUNCTIONS(SXNETID)
438

B
Ben Laurie 已提交
439 440 441
int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen); 
int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, int userlen); 
int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user, int userlen); 
442 443 444 445 446

ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone);
ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);
ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);

D
 
Dr. Stephen Henson 已提交
447 448 449 450 451 452 453
DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)

DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)

DECLARE_ASN1_FUNCTIONS(GENERAL_NAME)

STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, STACK_OF(CONF_VALUE) *ret);
454
int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);
455

D
 
Dr. Stephen Henson 已提交
456
DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)
457

458
STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
D
 
Dr. Stephen Henson 已提交
459 460
		GENERAL_NAMES *gen, STACK_OF(CONF_VALUE) *extlist);
GENERAL_NAMES *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method,
461
				X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
462

D
 
Dr. Stephen Henson 已提交
463 464
DECLARE_ASN1_FUNCTIONS(OTHERNAME)
DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
465

466 467
char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *ia5);
ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str);
468

D
 
Dr. Stephen Henson 已提交
469
DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
470
int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a);
471

D
 
Dr. Stephen Henson 已提交
472 473 474 475 476
DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
DECLARE_ASN1_FUNCTIONS(POLICYINFO)
DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
DECLARE_ASN1_FUNCTIONS(USERNOTICE)
DECLARE_ASN1_FUNCTIONS(NOTICEREF)
477

D
 
Dr. Stephen Henson 已提交
478 479 480
DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
DECLARE_ASN1_FUNCTIONS(DIST_POINT)
DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
481

D
 
Dr. Stephen Henson 已提交
482 483
DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
484

D
Dr. Stephen Henson 已提交
485
DECLARE_ASN1_ITEM(POLICY_MAPPING)
486
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
D
Dr. Stephen Henson 已提交
487 488
DECLARE_ASN1_ITEM(POLICY_MAPPINGS)

489 490 491 492 493 494
DECLARE_ASN1_ITEM(GENERAL_SUBTREE)
DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)

DECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)

495 496 497
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)

498
#ifdef HEADER_CONF_H
499 500 501 502
GENERAL_NAME *v2i_GENERAL_NAME(X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
							CONF_VALUE *cnf);
GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, X509V3_EXT_METHOD *method,
				X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc);
503
void X509V3_conf_free(CONF_VALUE *val);
D
 
Dr. Stephen Henson 已提交
504 505 506 507 508 509 510 511

X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, char *value);
X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name, char *value);
int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section, STACK_OF(X509_EXTENSION) **sk);
int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, X509 *cert);
int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, X509_REQ *req);
int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, X509_CRL *crl);

512 513 514
X509_EXTENSION *X509V3_EXT_conf_nid(LHASH *conf, X509V3_CTX *ctx, int ext_nid, char *value);
X509_EXTENSION *X509V3_EXT_conf(LHASH *conf, X509V3_CTX *ctx, char *name, char *value);
int X509V3_EXT_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509 *cert);
515
int X509V3_EXT_REQ_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509_REQ *req);
516
int X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509_CRL *crl);
D
 
Dr. Stephen Henson 已提交
517

518 519
int X509V3_add_value_bool_nf(char *name, int asn1_bool,
						STACK_OF(CONF_VALUE) **extlist);
520 521
int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);
int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);
D
 
Dr. Stephen Henson 已提交
522
void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
523
void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH *lhash);
524 525
#endif

526
char * X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
527
STACK_OF(CONF_VALUE) * X509V3_get_section(X509V3_CTX *ctx, char *section);
528
void X509V3_string_free(X509V3_CTX *ctx, char *str);
529
void X509V3_section_free( X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
530 531 532
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
				 X509_REQ *req, X509_CRL *crl, int flags);

533 534
int X509V3_add_value(const char *name, const char *value,
						STACK_OF(CONF_VALUE) **extlist);
B
Ben Laurie 已提交
535
int X509V3_add_value_uchar(const char *name, const unsigned char *value,
536 537 538 539 540
						STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_bool(const char *name, int asn1_bool,
						STACK_OF(CONF_VALUE) **extlist);
int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,
						STACK_OF(CONF_VALUE) **extlist);
541
char * i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
542
ASN1_INTEGER * s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
543 544
char * i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
char * i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
545
int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
546
int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
547 548 549 550 551 552
int X509V3_EXT_add_alias(int nid_to, int nid_from);
void X509V3_EXT_cleanup(void);

X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
int X509V3_add_standard_extensions(void);
D
 
Dr. Stephen Henson 已提交
553
STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
554
void *X509V3_EXT_d2i(X509_EXTENSION *ext);
555 556
void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx);

557

558
X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
559
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags);
560

561 562
char *hex_to_string(unsigned char *buffer, long len);
unsigned char *string_to_hex(char *str, long *len);
B
Ben Laurie 已提交
563
int name_cmp(const char *name, const char *cmp);
564

565 566
void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
								 int ml);
567
int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent);
568
int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
569

570 571
int X509V3_extensions_print(BIO *out, char *title, STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent);

572
int X509_check_purpose(X509 *x, int id, int ca);
D
 
Dr. Stephen Henson 已提交
573
int X509_supported_extension(X509_EXTENSION *ex);
D
 
Dr. Stephen Henson 已提交
574
int X509_PURPOSE_set(int *p, int purpose);
575
int X509_check_issued(X509 *issuer, X509 *subject);
576
int X509_PURPOSE_get_count(void);
577
X509_PURPOSE * X509_PURPOSE_get0(int idx);
578 579
int X509_PURPOSE_get_by_sname(char *sname);
int X509_PURPOSE_get_by_id(int id);
580
int X509_PURPOSE_add(int id, int trust, int flags,
581
			int (*ck)(const X509_PURPOSE *, const X509 *, int),
582
				char *name, char *sname, void *arg);
583 584
char *X509_PURPOSE_get0_name(X509_PURPOSE *xp);
char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp);
585
int X509_PURPOSE_get_trust(X509_PURPOSE *xp);
586
void X509_PURPOSE_cleanup(void);
587 588
int X509_PURPOSE_get_id(X509_PURPOSE *);

589 590 591 592
STACK *X509_get1_email(X509 *x);
STACK *X509_REQ_get1_email(X509_REQ *x);
void X509_email_free(STACK *sk);

593
ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
594
ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
595 596
int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE)*dn_sk,
						unsigned long chtype);
597

598
/* BEGIN ERROR CODES */
599 600 601
/* The following lines are auto generated by the script mkerr.pl. Any changes
 * made after this point may be overwritten when the script is next run.
 */
D
 
Dr. Stephen Henson 已提交
602
void ERR_load_X509V3_strings(void);
603

604 605 606
/* Error codes for the X509V3 functions. */

/* Function codes. */
607 608
#define X509V3_F_COPY_EMAIL				 122
#define X509V3_F_COPY_ISSUER				 123
609
#define X509V3_F_DO_DIRNAME				 144
610
#define X509V3_F_DO_EXT_CONF				 124
611
#define X509V3_F_DO_EXT_I2D				 135
612
#define X509V3_F_DO_I2V_NAME_CONSTRAINTS		 148
613
#define X509V3_F_HEX_TO_STRING				 111
614
#define X509V3_F_I2S_ASN1_ENUMERATED			 121
615
#define X509V3_F_I2S_ASN1_INTEGER			 120
616
#define X509V3_F_I2V_AUTHORITY_INFO_ACCESS		 138
617 618 619
#define X509V3_F_NOTICE_SECTION				 132
#define X509V3_F_NREF_NOS				 133
#define X509V3_F_POLICY_SECTION				 131
620
#define X509V3_F_R2I_CERTPOL				 130
621
#define X509V3_F_S2I_ASN1_IA5STRING			 100
622
#define X509V3_F_S2I_ASN1_INTEGER			 108
623 624 625 626
#define X509V3_F_S2I_ASN1_OCTET_STRING			 112
#define X509V3_F_S2I_ASN1_SKEY_ID			 114
#define X509V3_F_S2I_S2I_SKEY_ID			 115
#define X509V3_F_STRING_TO_HEX				 113
627 628 629 630 631
#define X509V3_F_SXNET_ADD_ASC				 125
#define X509V3_F_SXNET_ADD_ID_INTEGER			 126
#define X509V3_F_SXNET_ADD_ID_ULONG			 127
#define X509V3_F_SXNET_GET_ID_ASC			 128
#define X509V3_F_SXNET_GET_ID_ULONG			 129
632
#define X509V3_F_V2I_ACCESS_DESCRIPTION			 139
633
#define X509V3_F_V2I_ASN1_BIT_STRING			 101
634
#define X509V3_F_V2I_AUTHORITY_KEYID			 119
635
#define X509V3_F_V2I_BASIC_CONSTRAINTS			 102
636
#define X509V3_F_V2I_CRLD				 134
637
#define X509V3_F_V2I_EXT_KU				 103
638 639
#define X509V3_F_V2I_GENERAL_NAME			 117
#define X509V3_F_V2I_GENERAL_NAMES			 118
640
#define X509V3_F_V2I_NAME_CONSTRAINTS			 147
641
#define X509V3_F_V2I_POLICY_CONSTRAINTS			 146
D
Dr. Stephen Henson 已提交
642
#define X509V3_F_V2I_POLICY_MAPPINGS			 145
D
Dr. Stephen Henson 已提交
643
#define X509V3_F_V3_GENERIC_EXTENSION			 116
644
#define X509V3_F_X509V3_ADD_I2D				 140
645
#define X509V3_F_X509V3_ADD_VALUE			 105
646
#define X509V3_F_X509V3_EXT_ADD				 104
647 648
#define X509V3_F_X509V3_EXT_ADD_ALIAS			 106
#define X509V3_F_X509V3_EXT_CONF			 107
649
#define X509V3_F_X509V3_EXT_I2D				 136
650 651
#define X509V3_F_X509V3_GET_SECTION			 142
#define X509V3_F_X509V3_GET_STRING			 143
652
#define X509V3_F_X509V3_GET_VALUE_BOOL			 110
653
#define X509V3_F_X509V3_PARSE_LIST			 109
654
#define X509V3_F_X509_PURPOSE_ADD			 137
D
 
Dr. Stephen Henson 已提交
655
#define X509V3_F_X509_PURPOSE_SET			 141
656 657

/* Reason codes. */
658 659
#define X509V3_R_BAD_IP_ADDRESS				 118
#define X509V3_R_BAD_OBJECT				 119
660 661
#define X509V3_R_BN_DEC2BN_ERROR			 100
#define X509V3_R_BN_TO_ASN1_INTEGER_ERROR		 101
662
#define X509V3_R_DIRNAME_ERROR				 149
663 664
#define X509V3_R_DUPLICATE_ZONE_ID			 133
#define X509V3_R_ERROR_CONVERTING_ZONE			 131
665
#define X509V3_R_ERROR_CREATING_EXTENSION		 144
666
#define X509V3_R_ERROR_IN_EXTENSION			 128
667
#define X509V3_R_EXPECTED_A_SECTION_NAME		 137
668
#define X509V3_R_EXTENSION_EXISTS			 145
D
Dr. Stephen Henson 已提交
669
#define X509V3_R_EXTENSION_NAME_ERROR			 115
670 671
#define X509V3_R_EXTENSION_NOT_FOUND			 102
#define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED	 103
D
Dr. Stephen Henson 已提交
672
#define X509V3_R_EXTENSION_VALUE_ERROR			 116
673
#define X509V3_R_ILLEGAL_EMPTY_EXTENSION		 151
674
#define X509V3_R_ILLEGAL_HEX_DIGIT			 113
675 676 677 678 679 680
#define X509V3_R_INVALID_BOOLEAN_STRING			 104
#define X509V3_R_INVALID_EXTENSION_STRING		 105
#define X509V3_R_INVALID_NAME				 106
#define X509V3_R_INVALID_NULL_ARGUMENT			 107
#define X509V3_R_INVALID_NULL_NAME			 108
#define X509V3_R_INVALID_NULL_VALUE			 109
681 682
#define X509V3_R_INVALID_NUMBER				 140
#define X509V3_R_INVALID_NUMBERS			 141
683
#define X509V3_R_INVALID_OBJECT_IDENTIFIER		 110
684
#define X509V3_R_INVALID_OPTION				 138
685
#define X509V3_R_INVALID_POLICY_IDENTIFIER		 134
D
 
Dr. Stephen Henson 已提交
686
#define X509V3_R_INVALID_PURPOSE			 146
687
#define X509V3_R_INVALID_SECTION			 135
688
#define X509V3_R_INVALID_SYNTAX				 143
689 690
#define X509V3_R_ISSUER_DECODE_ERROR			 126
#define X509V3_R_MISSING_VALUE				 124
691
#define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS		 142
692
#define X509V3_R_NO_CONFIG_DATABASE			 136
693
#define X509V3_R_NO_ISSUER_CERTIFICATE			 121
694
#define X509V3_R_NO_ISSUER_DETAILS			 127
695
#define X509V3_R_NO_POLICY_IDENTIFIER			 139
696
#define X509V3_R_NO_PUBLIC_KEY				 114
697
#define X509V3_R_NO_SUBJECT_DETAILS			 125
698
#define X509V3_R_ODD_NUMBER_OF_DIGITS			 112
699
#define X509V3_R_OPERATION_NOT_DEFINED			 148
D
 
Dr. Stephen Henson 已提交
700
#define X509V3_R_OTHERNAME_ERROR			 147
701
#define X509V3_R_SECTION_NOT_FOUND			 150
702 703
#define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS		 122
#define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID		 123
704
#define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT		 111
705 706
#define X509V3_R_UNKNOWN_EXTENSION			 129
#define X509V3_R_UNKNOWN_EXTENSION_NAME			 130
707
#define X509V3_R_UNKNOWN_OPTION				 120
708
#define X509V3_R_UNSUPPORTED_OPTION			 117
709
#define X509V3_R_USER_TOO_LONG				 132
710

711 712 713 714
#ifdef  __cplusplus
}
#endif
#endif