x509v3.h 33.5 KB
Newer Older
1
/* x509v3.h */
2
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 4 5
 * project 1999.
 */
/* ====================================================================
6
 * Copyright (c) 1999-2004 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 75
#ifdef OPENSSL_SYS_WIN32
/* Under Win32 these are defined in wincrypt.h */
#undef X509_NAME
#undef X509_CERT_PAIR
#undef X509_EXTENSIONS
#endif

76 77 78 79 80 81
/* Forward reference */
struct v3_ext_method;
struct v3_ext_ctx;

/* Useful typedefs */

82 83
typedef void * (*X509V3_EXT_NEW)(void);
typedef void (*X509V3_EXT_FREE)(void *);
84
typedef void * (*X509V3_EXT_D2I)(void *, const unsigned char ** , long);
85
typedef int (*X509V3_EXT_I2D)(void *, unsigned char **);
86 87 88 89 90 91 92 93 94 95 96 97 98
typedef STACK_OF(CONF_VALUE) *
  (*X509V3_EXT_I2V)(const struct v3_ext_method *method, void *ext,
		    STACK_OF(CONF_VALUE) *extlist);
typedef void * (*X509V3_EXT_V2I)(const struct v3_ext_method *method,
				 struct v3_ext_ctx *ctx,
				 STACK_OF(CONF_VALUE) *values);
typedef char * (*X509V3_EXT_I2S)(const struct v3_ext_method *method, void *ext);
typedef void * (*X509V3_EXT_S2I)(const struct v3_ext_method *method,
				 struct v3_ext_ctx *ctx, const char *str);
typedef int (*X509V3_EXT_I2R)(const struct v3_ext_method *method, void *ext,
			      BIO *out, int indent);
typedef void * (*X509V3_EXT_R2I)(const struct v3_ext_method *method,
				 struct v3_ext_ctx *ctx, const char *str);
99 100 101 102 103 104

/* V3 extension structure */

struct v3_ext_method {
int ext_nid;
int ext_flags;
D
 
Dr. Stephen Henson 已提交
105
/* If this is set the following four fields are ignored */
106
ASN1_ITEM_EXP *it;
D
 
Dr. Stephen Henson 已提交
107
/* Old style ASN1 calls */
108 109 110 111 112 113 114 115 116 117 118 119 120
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;

121
/* The following are used for raw extensions */
122
X509V3_EXT_I2R i2r;
123
X509V3_EXT_R2I r2i;
124

125
void *usr_data;	/* Any extension specific data */
126 127
};

128 129
typedef struct X509V3_CONF_METHOD_st {
char * (*get_string)(void *db, char *section, char *value);
130
STACK_OF(CONF_VALUE) * (*get_section)(void *db, char *section);
131
void (*free_string)(void *db, char * string);
132
void (*free_section)(void *db, STACK_OF(CONF_VALUE) *section);
133
} X509V3_CONF_METHOD;
134

135
/* Context specific info */
136
struct v3_ext_ctx {
137
#define CTX_TEST 0x1
138
#define X509V3_CTX_REPLACE 0x2
139
int flags;
140 141 142
X509 *issuer_cert;
X509 *subject_cert;
X509_REQ *subject_req;
143
X509_CRL *crl;
144 145
X509V3_CONF_METHOD *db_meth;
void *db;
146 147 148 149 150
/* Maybe more here */
};

typedef struct v3_ext_method X509V3_EXT_METHOD;

151 152
DECLARE_STACK_OF(X509V3_EXT_METHOD)

153
/* ext_flags values */
154 155 156
#define X509V3_EXT_DYNAMIC	0x1
#define X509V3_EXT_CTX_DEP	0x2
#define X509V3_EXT_MULTILINE	0x4
157

158 159
typedef BIT_STRING_BITNAME ENUMERATED_NAMES;

160
typedef struct BASIC_CONSTRAINTS_st {
161 162 163 164
int ca;
ASN1_INTEGER *pathlen;
} BASIC_CONSTRAINTS;

165

166
typedef struct PKEY_USAGE_PERIOD_st {
167 168 169 170
ASN1_GENERALIZEDTIME *notBefore;
ASN1_GENERALIZEDTIME *notAfter;
} PKEY_USAGE_PERIOD;

171 172 173 174 175
typedef struct otherName_st {
ASN1_OBJECT *type_id;
ASN1_TYPE *value;
} OTHERNAME;

D
 
Dr. Stephen Henson 已提交
176 177 178 179 180
typedef struct EDIPartyName_st {
	ASN1_STRING *nameAssigner;
	ASN1_STRING *partyName;
} EDIPARTYNAME;

181
typedef struct GENERAL_NAME_st {
182

D
 
Dr. Stephen Henson 已提交
183 184 185 186 187 188 189 190 191
#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
192 193 194 195

int type;
union {
	char *ptr;
D
 
Dr. Stephen Henson 已提交
196 197 198 199 200 201 202 203 204 205 206
	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 */
207 208
	ASN1_OCTET_STRING *ip; /* iPAddress */
	X509_NAME *dirn;		/* dirn */
D
 
Dr. Stephen Henson 已提交
209
	ASN1_IA5STRING *ia5;/* rfc822Name, dNSName, uniformResourceIdentifier */
210
	ASN1_OBJECT *rid; /* registeredID */
D
 
Dr. Stephen Henson 已提交
211
	ASN1_TYPE *other; /* x400Address */
212 213 214
} d;
} GENERAL_NAME;

D
 
Dr. Stephen Henson 已提交
215 216
typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;

217
typedef struct ACCESS_DESCRIPTION_st {
R
Richard Levitte 已提交
218 219
	ASN1_OBJECT *method;
	GENERAL_NAME *location;
220 221
} ACCESS_DESCRIPTION;

D
 
Dr. Stephen Henson 已提交
222 223 224 225
typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;

typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;

226 227 228
DECLARE_STACK_OF(GENERAL_NAME)
DECLARE_ASN1_SET_OF(GENERAL_NAME)

229 230 231
DECLARE_STACK_OF(ACCESS_DESCRIPTION)
DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)

232
typedef struct DIST_POINT_NAME_st {
D
 
Dr. Stephen Henson 已提交
233 234 235 236 237
int type;
union {
	GENERAL_NAMES *fullname;
	STACK_OF(X509_NAME_ENTRY) *relativename;
} name;
238 239
/* If relativename then this contains the full distribution point name */
X509_NAME *dpname;
240
} DIST_POINT_NAME;
241 242
/* All existing reasons */
#define CRLDP_ALL_REASONS	0x807f
243

244 245 246 247 248 249 250 251 252 253 254 255
#define CRL_REASON_NONE				-1
#define CRL_REASON_UNSPECIFIED			0
#define CRL_REASON_KEY_COMPROMISE		1
#define CRL_REASON_CA_COMPROMISE		2
#define CRL_REASON_AFFILIATION_CHANGED		3
#define CRL_REASON_SUPERSEDED			4
#define CRL_REASON_CESSATION_OF_OPERATION	5
#define CRL_REASON_CERTIFICATE_HOLD		6
#define CRL_REASON_REMOVE_FROM_CRL		8
#define CRL_REASON_PRIVILEGE_WITHDRAWN		9
#define CRL_REASON_AA_COMPROMISE		10

256
struct DIST_POINT_st {
257 258
DIST_POINT_NAME	*distpoint;
ASN1_BIT_STRING *reasons;
D
 
Dr. Stephen Henson 已提交
259
GENERAL_NAMES *CRLissuer;
260
int dp_reasons;
261
};
262

D
 
Dr. Stephen Henson 已提交
263 264
typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;

265 266 267
DECLARE_STACK_OF(DIST_POINT)
DECLARE_ASN1_SET_OF(DIST_POINT)

268
struct AUTHORITY_KEYID_st {
269
ASN1_OCTET_STRING *keyid;
D
 
Dr. Stephen Henson 已提交
270
GENERAL_NAMES *issuer;
271
ASN1_INTEGER *serial;
272
};
273

274
/* Strong extranet structures */
275

276
typedef struct SXNET_ID_st {
277 278 279
	ASN1_INTEGER *zone;
	ASN1_OCTET_STRING *user;
} SXNETID;
280

B
Ben Laurie 已提交
281 282 283 284 285 286 287 288
DECLARE_STACK_OF(SXNETID)
DECLARE_ASN1_SET_OF(SXNETID)

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

289 290
typedef struct NOTICEREF_st {
	ASN1_STRING *organization;
B
Ben Laurie 已提交
291
	STACK_OF(ASN1_INTEGER) *noticenos;
292 293 294
} NOTICEREF;

typedef struct USERNOTICE_st {
295
	NOTICEREF *noticeref;
296 297 298 299 300 301 302 303 304 305 306 307 308
	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)
309
DECLARE_ASN1_SET_OF(POLICYQUALINFO)
310 311 312

typedef struct POLICYINFO_st {
	ASN1_OBJECT *policyid;
313
	STACK_OF(POLICYQUALINFO) *qualifiers;
314 315
} POLICYINFO;

D
 
Dr. Stephen Henson 已提交
316 317
typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;

B
Bodo Möller 已提交
318 319
DECLARE_STACK_OF(POLICYINFO)
DECLARE_ASN1_SET_OF(POLICYINFO)
320

D
Dr. Stephen Henson 已提交
321 322 323 324 325 326 327 328 329
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;

330 331 332 333 334 335 336 337
typedef struct GENERAL_SUBTREE_st {
	GENERAL_NAME *base;
	ASN1_INTEGER *minimum;
	ASN1_INTEGER *maximum;
} GENERAL_SUBTREE;

DECLARE_STACK_OF(GENERAL_SUBTREE)

338
struct NAME_CONSTRAINTS_st {
339 340
	STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
	STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
341
};
342

343 344 345 346 347
typedef struct POLICY_CONSTRAINTS_st {
	ASN1_INTEGER *requireExplicitPolicy;
	ASN1_INTEGER *inhibitPolicyMapping;
} POLICY_CONSTRAINTS;

348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
/* Proxy certificate structures, see RFC 3820 */
typedef struct PROXY_POLICY_st
	{
	ASN1_OBJECT *policyLanguage;
	ASN1_OCTET_STRING *policy;
	} PROXY_POLICY;

typedef struct PROXY_CERT_INFO_EXTENSION_st
	{
	ASN1_INTEGER *pcPathLengthConstraint;
	PROXY_POLICY *proxyPolicy;
	} PROXY_CERT_INFO_EXTENSION;

DECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)

364
struct ISSUING_DIST_POINT_st
365 366 367 368 369 370 371
	{
	DIST_POINT_NAME *distpoint;
	int onlyuser;
	int onlyCA;
	ASN1_BIT_STRING *onlysomereasons;
	int indirectCRL;
	int onlyattr;
372
	};
373

374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
/* Values in idp_flags field */
/* IDP present */
#define	IDP_PRESENT	0x1
/* IDP values inconsistent */
#define IDP_INVALID	0x2
/* onlyuser true */
#define	IDP_ONLYUSER	0x4
/* onlyCA true */
#define	IDP_ONLYCA	0x8
/* onlyattr true */
#define IDP_ONLYATTR	0x10
/* indirectCRL true */
#define IDP_INDIRECT	0x20
/* onlysomereasons present */
#define IDP_REASONS	0x40

390 391 392
#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
",name:", val->name, ",value:", val->value);

393 394
#define X509V3_set_ctx_test(ctx) \
			X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
395
#define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;
396

397
#define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
D
 
Dr. Stephen Henson 已提交
398 399
			0,0,0,0, \
			0,0, \
400 401
			(X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
			(X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
402
			NULL, NULL, \
D
 
Dr. Stephen Henson 已提交
403
			table}
404

405
#define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
D
 
Dr. Stephen Henson 已提交
406
			0,0,0,0, \
407 408
			(X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
			(X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
D
 
Dr. Stephen Henson 已提交
409
			0,0,0,0, \
410 411
			NULL}

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

414 415 416 417 418 419 420 421 422

/* X509_PURPOSE stuff */

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

#define EXFLAG_CA		0x10
D
Dr. Stephen Henson 已提交
423 424
/* Really self issued not necessarily self signed */
#define EXFLAG_SI		0x20
425 426 427
#define EXFLAG_V1		0x40
#define EXFLAG_INVALID		0x80
#define EXFLAG_SET		0x100
D
 
Dr. Stephen Henson 已提交
428
#define EXFLAG_CRITICAL		0x200
429
#define EXFLAG_PROXY		0x400
430

431 432
#define EXFLAG_INVALID_POLICY	0x800
#define EXFLAG_FRESHEST		0x1000
433 434
/* Self signed */
#define EXFLAG_SS		0x2000
435

436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
#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 已提交
453
#define NS_ANY_CA		(NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)
454 455 456 457 458 459

#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 已提交
460 461
#define XKU_OCSP_SIGN		0x20
#define XKU_TIMESTAMP		0x40
462
#define XKU_DVCS		0x80
D
Dr. Stephen Henson 已提交
463
#define XKU_ANYEKU		0x100
464

465 466 467
#define X509_PURPOSE_DYNAMIC	0x1
#define X509_PURPOSE_DYNAMIC_NAME	0x2

468
typedef struct x509_purpose_st {
469 470 471
	int purpose;
	int trust;		/* Default trust ID */
	int flags;
472 473
	int (*check_purpose)(const struct x509_purpose_st *,
				const X509 *, int);
474 475
	char *name;
	char *sname;
476
	void *usr_data;
477 478
} X509_PURPOSE;

479 480 481 482 483 484
#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
485
#define X509_PURPOSE_ANY		7
D
 
Dr. Stephen Henson 已提交
486
#define X509_PURPOSE_OCSP_HELPER	8
487
#define X509_PURPOSE_TIMESTAMP_SIGN	9
488

489
#define X509_PURPOSE_MIN		1
490
#define X509_PURPOSE_MAX		9
491

492 493 494 495 496 497 498 499 500 501 502 503
/* 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)

504 505 506 507 508 509 510 511 512 513 514
/* 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

515
DECLARE_STACK_OF(X509_PURPOSE)
516

D
 
Dr. Stephen Henson 已提交
517
DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)
518

D
 
Dr. Stephen Henson 已提交
519 520
DECLARE_ASN1_FUNCTIONS(SXNET)
DECLARE_ASN1_FUNCTIONS(SXNETID)
521

B
Ben Laurie 已提交
522 523 524
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); 
525 526 527 528 529

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 已提交
530 531 532 533 534
DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)

DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)

DECLARE_ASN1_FUNCTIONS(GENERAL_NAME)
535 536 537
GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a);
int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);

D
 
Dr. Stephen Henson 已提交
538

539 540 541 542 543 544

ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
				X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
				ASN1_BIT_STRING *bits,
				STACK_OF(CONF_VALUE) *extlist);
545 546 547 548
char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
		ASN1_IA5STRING *ia5);
ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
		X509V3_CTX *ctx, char *str);
549

D
 
Dr. Stephen Henson 已提交
550
STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, STACK_OF(CONF_VALUE) *ret);
551
int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);
552

D
 
Dr. Stephen Henson 已提交
553
DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)
554

555
STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
D
 
Dr. Stephen Henson 已提交
556
		GENERAL_NAMES *gen, STACK_OF(CONF_VALUE) *extlist);
557 558
GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
				 X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
559

D
 
Dr. Stephen Henson 已提交
560 561
DECLARE_ASN1_FUNCTIONS(OTHERNAME)
DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
562
int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);
D
Dr. Stephen Henson 已提交
563 564 565 566 567 568
void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);
void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype);
int GENERAL_NAME_set0_othername(GENERAL_NAME *gen,
				ASN1_OBJECT *oid, ASN1_TYPE *value);
int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, 
				ASN1_OBJECT **poid, ASN1_TYPE **pvalue);
569

570 571
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);
572

D
 
Dr. Stephen Henson 已提交
573
DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
574
int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a);
575

D
 
Dr. Stephen Henson 已提交
576 577 578 579 580
DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
DECLARE_ASN1_FUNCTIONS(POLICYINFO)
DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
DECLARE_ASN1_FUNCTIONS(USERNOTICE)
DECLARE_ASN1_FUNCTIONS(NOTICEREF)
581

D
 
Dr. Stephen Henson 已提交
582 583 584
DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
DECLARE_ASN1_FUNCTIONS(DIST_POINT)
DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
585
DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT)
586

587 588
int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname);

589 590
int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);

D
 
Dr. Stephen Henson 已提交
591 592
DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
593

D
Dr. Stephen Henson 已提交
594
DECLARE_ASN1_ITEM(POLICY_MAPPING)
595
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
D
Dr. Stephen Henson 已提交
596 597
DECLARE_ASN1_ITEM(POLICY_MAPPINGS)

598 599 600 601 602 603
DECLARE_ASN1_ITEM(GENERAL_SUBTREE)
DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)

DECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)

604 605 606
DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)

607
GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
608 609
			       const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
			       int gen_type, char *value, int is_nc);
610

611
#ifdef HEADER_CONF_H
612 613 614 615 616
GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
			       CONF_VALUE *cnf);
GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
				  const X509V3_EXT_METHOD *method,
				  X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc);
617
void X509V3_conf_free(CONF_VALUE *val);
D
 
Dr. Stephen Henson 已提交
618 619 620 621 622 623 624 625

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);

B
Ben Laurie 已提交
626 627 628 629 630 631 632 633 634 635
X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
				    int ext_nid, char *value);
X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
				char *name, char *value);
int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
			char *section, X509 *cert);
int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
			    char *section, X509_REQ *req);
int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
			    char *section, X509_CRL *crl);
D
 
Dr. Stephen Henson 已提交
636

637
int X509V3_add_value_bool_nf(char *name, int asn1_bool,
B
Ben Laurie 已提交
638
			     STACK_OF(CONF_VALUE) **extlist);
639 640
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 已提交
641
void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
B
Ben Laurie 已提交
642
void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);
643 644
#endif

645
char * X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
646
STACK_OF(CONF_VALUE) * X509V3_get_section(X509V3_CTX *ctx, char *section);
647
void X509V3_string_free(X509V3_CTX *ctx, char *str);
648
void X509V3_section_free( X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
649 650 651
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
				 X509_REQ *req, X509_CRL *crl, int flags);

652 653
int X509V3_add_value(const char *name, const char *value,
						STACK_OF(CONF_VALUE) **extlist);
B
Ben Laurie 已提交
654
int X509V3_add_value_uchar(const char *name, const unsigned char *value,
655 656 657 658 659
						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);
660
char * i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
661
ASN1_INTEGER * s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
662 663
char * i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
char * i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
664
int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
665
int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
666 667 668
int X509V3_EXT_add_alias(int nid_to, int nid_from);
void X509V3_EXT_cleanup(void);

669 670
const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
671
int X509V3_add_standard_extensions(void);
D
 
Dr. Stephen Henson 已提交
672
STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
673
void *X509V3_EXT_d2i(X509_EXTENSION *ext);
674 675
void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx);

676

677
X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
678
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags);
679

D
Dr. Stephen Henson 已提交
680 681
char *hex_to_string(const unsigned char *buffer, long len);
unsigned char *string_to_hex(const char *str, long *len);
B
Ben Laurie 已提交
682
int name_cmp(const char *name, const char *cmp);
683

684 685
void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
								 int ml);
686
int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent);
687
int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
688

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

691
int X509_check_ca(X509 *x);
692
int X509_check_purpose(X509 *x, int id, int ca);
D
 
Dr. Stephen Henson 已提交
693
int X509_supported_extension(X509_EXTENSION *ex);
D
 
Dr. Stephen Henson 已提交
694
int X509_PURPOSE_set(int *p, int purpose);
695
int X509_check_issued(X509 *issuer, X509 *subject);
696
int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid);
697
int X509_PURPOSE_get_count(void);
698
X509_PURPOSE * X509_PURPOSE_get0(int idx);
699 700
int X509_PURPOSE_get_by_sname(char *sname);
int X509_PURPOSE_get_by_id(int id);
701
int X509_PURPOSE_add(int id, int trust, int flags,
702
			int (*ck)(const X509_PURPOSE *, const X509 *, int),
703
				char *name, char *sname, void *arg);
704 705
char *X509_PURPOSE_get0_name(X509_PURPOSE *xp);
char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp);
706
int X509_PURPOSE_get_trust(X509_PURPOSE *xp);
707
void X509_PURPOSE_cleanup(void);
708 709
int X509_PURPOSE_get_id(X509_PURPOSE *);

D
Dr. Stephen Henson 已提交
710 711 712 713
STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
714 715 716 717
/* Flags for X509_check_* functions */

/* Always check subject name for host match even if subject alt names present */
#define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT	0x1
V
Viktor Dukhovni 已提交
718
/* Disable wildcard matching for dnsName fields and common name. */
D
Dr. Stephen Henson 已提交
719
#define X509_CHECK_FLAG_NO_WILDCARDS	0x2
V
Viktor Dukhovni 已提交
720 721 722 723
/* Wildcards must not match a partial label. */
#define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
/* Allow (non-partial) wildcards to match multiple labels. */
#define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
724 725 726 727 728 729 730 731
/* Constraint verifier subdomain patterns to match a single labels. */
#define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
/*
 * Match reference identifiers starting with "." to any sub-domain.
 * This is a non-public flag, turned on implicitly when the subject
 * reference identity is a DNS name.
 */
#define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000
732

733
int X509_check_host(X509 *x, const char *chk, size_t chklen,
734
					unsigned int flags, char **peername);
735
int X509_check_email(X509 *x, const char *chk, size_t chklen,
736 737 738 739
					unsigned int flags);
int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
					unsigned int flags);
int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);
740

741
ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
742
ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
B
Ben Laurie 已提交
743
int a2i_ipadd(unsigned char *ipout, const char *ipasc);
744 745
int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE)*dn_sk,
						unsigned long chtype);
746

747
void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
D
Dr. Stephen Henson 已提交
748
DECLARE_STACK_OF(X509_POLICY_NODE)
749

750
#ifndef OPENSSL_NO_RFC3779
B
Ben Laurie 已提交
751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896

typedef struct ASRange_st {
  ASN1_INTEGER *min, *max;
} ASRange;

#define	ASIdOrRange_id		0
#define	ASIdOrRange_range	1

typedef struct ASIdOrRange_st {
  int type;
  union {
    ASN1_INTEGER *id;
    ASRange      *range;
  } u;
} ASIdOrRange;

typedef STACK_OF(ASIdOrRange) ASIdOrRanges;
DECLARE_STACK_OF(ASIdOrRange)

#define	ASIdentifierChoice_inherit		0
#define	ASIdentifierChoice_asIdsOrRanges	1

typedef struct ASIdentifierChoice_st {
  int type;
  union {
    ASN1_NULL    *inherit;
    ASIdOrRanges *asIdsOrRanges;
  } u;
} ASIdentifierChoice;

typedef struct ASIdentifiers_st {
  ASIdentifierChoice *asnum, *rdi;
} ASIdentifiers;

DECLARE_ASN1_FUNCTIONS(ASRange)
DECLARE_ASN1_FUNCTIONS(ASIdOrRange)
DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
DECLARE_ASN1_FUNCTIONS(ASIdentifiers)


typedef struct IPAddressRange_st {
  ASN1_BIT_STRING	*min, *max;
} IPAddressRange;

#define	IPAddressOrRange_addressPrefix	0
#define	IPAddressOrRange_addressRange	1

typedef struct IPAddressOrRange_st {
  int type;
  union {
    ASN1_BIT_STRING	*addressPrefix;
    IPAddressRange	*addressRange;
  } u;
} IPAddressOrRange;

typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
DECLARE_STACK_OF(IPAddressOrRange)

#define	IPAddressChoice_inherit			0
#define	IPAddressChoice_addressesOrRanges	1

typedef struct IPAddressChoice_st {
  int type;
  union {
    ASN1_NULL		*inherit;
    IPAddressOrRanges	*addressesOrRanges;
  } u;
} IPAddressChoice;

typedef struct IPAddressFamily_st {
  ASN1_OCTET_STRING	*addressFamily;
  IPAddressChoice	*ipAddressChoice;
} IPAddressFamily;

typedef STACK_OF(IPAddressFamily) IPAddrBlocks;
DECLARE_STACK_OF(IPAddressFamily)

DECLARE_ASN1_FUNCTIONS(IPAddressRange)
DECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
DECLARE_ASN1_FUNCTIONS(IPAddressChoice)
DECLARE_ASN1_FUNCTIONS(IPAddressFamily)

/*
 * API tag for elements of the ASIdentifer SEQUENCE.
 */
#define	V3_ASID_ASNUM	0
#define	V3_ASID_RDI	1

/*
 * AFI values, assigned by IANA.  It'd be nice to make the AFI
 * handling code totally generic, but there are too many little things
 * that would need to be defined for other address families for it to
 * be worth the trouble.
 */
#define	IANA_AFI_IPV4	1
#define	IANA_AFI_IPV6	2

/*
 * Utilities to construct and extract values from RFC3779 extensions,
 * since some of the encodings (particularly for IP address prefixes
 * and ranges) are a bit tedious to work with directly.
 */
int v3_asid_add_inherit(ASIdentifiers *asid, int which);
int v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
			    ASN1_INTEGER *min, ASN1_INTEGER *max);
int v3_addr_add_inherit(IPAddrBlocks *addr,
			const unsigned afi, const unsigned *safi);
int v3_addr_add_prefix(IPAddrBlocks *addr,
		       const unsigned afi, const unsigned *safi,
		       unsigned char *a, const int prefixlen);
int v3_addr_add_range(IPAddrBlocks *addr,
		      const unsigned afi, const unsigned *safi,
		      unsigned char *min, unsigned char *max);
unsigned v3_addr_get_afi(const IPAddressFamily *f);
int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
		      unsigned char *min, unsigned char *max,
		      const int length);

/*
 * Canonical forms.
 */
int v3_asid_is_canonical(ASIdentifiers *asid);
int v3_addr_is_canonical(IPAddrBlocks *addr);
int v3_asid_canonize(ASIdentifiers *asid);
int v3_addr_canonize(IPAddrBlocks *addr);

/*
 * Tests for inheritance and containment.
 */
int v3_asid_inherits(ASIdentifiers *asid);
int v3_addr_inherits(IPAddrBlocks *addr);
int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);

/*
 * Check whether RFC 3779 extensions nest properly in chains.
 */
int v3_asid_validate_path(X509_STORE_CTX *);
int v3_addr_validate_path(X509_STORE_CTX *);
int v3_asid_validate_resource_set(STACK_OF(X509) *chain,
				  ASIdentifiers *ext,
				  int allow_inheritance);
int v3_addr_validate_resource_set(STACK_OF(X509) *chain,
				  IPAddrBlocks *ext,
				  int allow_inheritance);

897
#endif /* OPENSSL_NO_RFC3779 */
B
Ben Laurie 已提交
898

899
/* BEGIN ERROR CODES */
900 901 902
/* 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 已提交
903
void ERR_load_X509V3_strings(void);
904

905 906 907
/* Error codes for the X509V3 functions. */

/* Function codes. */
908
#define X509V3_F_A2I_GENERAL_NAME			 164
B
Ben Laurie 已提交
909 910
#define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE		 161
#define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL	 162
911 912
#define X509V3_F_COPY_EMAIL				 122
#define X509V3_F_COPY_ISSUER				 123
913
#define X509V3_F_DO_DIRNAME				 144
914
#define X509V3_F_DO_EXT_CONF				 124
915
#define X509V3_F_DO_EXT_I2D				 135
B
Bodo Möller 已提交
916
#define X509V3_F_DO_EXT_NCONF				 151
917
#define X509V3_F_DO_I2V_NAME_CONSTRAINTS		 148
918
#define X509V3_F_GNAMES_FROM_SECTNAME			 156
919
#define X509V3_F_HEX_TO_STRING				 111
920
#define X509V3_F_I2S_ASN1_ENUMERATED			 121
921
#define X509V3_F_I2S_ASN1_IA5STRING			 149
922
#define X509V3_F_I2S_ASN1_INTEGER			 120
923
#define X509V3_F_I2V_AUTHORITY_INFO_ACCESS		 138
924 925 926
#define X509V3_F_NOTICE_SECTION				 132
#define X509V3_F_NREF_NOS				 133
#define X509V3_F_POLICY_SECTION				 131
B
Bodo Möller 已提交
927
#define X509V3_F_PROCESS_PCI_VALUE			 150
928
#define X509V3_F_R2I_CERTPOL				 130
929
#define X509V3_F_R2I_PCI				 155
930
#define X509V3_F_S2I_ASN1_IA5STRING			 100
931
#define X509V3_F_S2I_ASN1_INTEGER			 108
932 933
#define X509V3_F_S2I_ASN1_OCTET_STRING			 112
#define X509V3_F_S2I_ASN1_SKEY_ID			 114
B
Bodo Möller 已提交
934
#define X509V3_F_S2I_SKEY_ID				 115
935
#define X509V3_F_SET_DIST_POINT_NAME			 158
936
#define X509V3_F_STRING_TO_HEX				 113
B
Bodo Möller 已提交
937
#define X509V3_F_SXNET_ADD_ID_ASC			 125
938 939 940 941
#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
B
Ben Laurie 已提交
942
#define X509V3_F_V2I_ASIDENTIFIERS			 163
943
#define X509V3_F_V2I_ASN1_BIT_STRING			 101
B
Bodo Möller 已提交
944
#define X509V3_F_V2I_AUTHORITY_INFO_ACCESS		 139
945
#define X509V3_F_V2I_AUTHORITY_KEYID			 119
946
#define X509V3_F_V2I_BASIC_CONSTRAINTS			 102
947
#define X509V3_F_V2I_CRLD				 134
B
Bodo Möller 已提交
948
#define X509V3_F_V2I_EXTENDED_KEY_USAGE			 103
949
#define X509V3_F_V2I_GENERAL_NAMES			 118
B
Bodo Möller 已提交
950
#define X509V3_F_V2I_GENERAL_NAME_EX			 117
951
#define X509V3_F_V2I_IDP				 157
B
Ben Laurie 已提交
952
#define X509V3_F_V2I_IPADDRBLOCKS			 159
B
Bodo Möller 已提交
953
#define X509V3_F_V2I_ISSUER_ALT				 153
954
#define X509V3_F_V2I_NAME_CONSTRAINTS			 147
955
#define X509V3_F_V2I_POLICY_CONSTRAINTS			 146
D
Dr. Stephen Henson 已提交
956
#define X509V3_F_V2I_POLICY_MAPPINGS			 145
B
Bodo Möller 已提交
957
#define X509V3_F_V2I_SUBJECT_ALT			 154
B
Ben Laurie 已提交
958
#define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL		 160
D
Dr. Stephen Henson 已提交
959
#define X509V3_F_V3_GENERIC_EXTENSION			 116
B
Bodo Möller 已提交
960
#define X509V3_F_X509V3_ADD1_I2D			 140
961
#define X509V3_F_X509V3_ADD_VALUE			 105
962
#define X509V3_F_X509V3_EXT_ADD				 104
963 964
#define X509V3_F_X509V3_EXT_ADD_ALIAS			 106
#define X509V3_F_X509V3_EXT_CONF			 107
965
#define X509V3_F_X509V3_EXT_I2D				 136
B
Bodo Möller 已提交
966
#define X509V3_F_X509V3_EXT_NCONF			 152
967 968
#define X509V3_F_X509V3_GET_SECTION			 142
#define X509V3_F_X509V3_GET_STRING			 143
969
#define X509V3_F_X509V3_GET_VALUE_BOOL			 110
970
#define X509V3_F_X509V3_PARSE_LIST			 109
971
#define X509V3_F_X509_PURPOSE_ADD			 137
D
 
Dr. Stephen Henson 已提交
972
#define X509V3_F_X509_PURPOSE_SET			 141
973 974

/* Reason codes. */
975 976
#define X509V3_R_BAD_IP_ADDRESS				 118
#define X509V3_R_BAD_OBJECT				 119
977 978
#define X509V3_R_BN_DEC2BN_ERROR			 100
#define X509V3_R_BN_TO_ASN1_INTEGER_ERROR		 101
979
#define X509V3_R_DIRNAME_ERROR				 149
980
#define X509V3_R_DISTPOINT_ALREADY_SET			 160
981 982
#define X509V3_R_DUPLICATE_ZONE_ID			 133
#define X509V3_R_ERROR_CONVERTING_ZONE			 131
983
#define X509V3_R_ERROR_CREATING_EXTENSION		 144
984
#define X509V3_R_ERROR_IN_EXTENSION			 128
985
#define X509V3_R_EXPECTED_A_SECTION_NAME		 137
986
#define X509V3_R_EXTENSION_EXISTS			 145
D
Dr. Stephen Henson 已提交
987
#define X509V3_R_EXTENSION_NAME_ERROR			 115
988 989
#define X509V3_R_EXTENSION_NOT_FOUND			 102
#define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED	 103
D
Dr. Stephen Henson 已提交
990
#define X509V3_R_EXTENSION_VALUE_ERROR			 116
991
#define X509V3_R_ILLEGAL_EMPTY_EXTENSION		 151
992
#define X509V3_R_ILLEGAL_HEX_DIGIT			 113
993
#define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG		 152
994
#define X509V3_R_INVALID_MULTIPLE_RDNS			 161
B
Ben Laurie 已提交
995 996
#define X509V3_R_INVALID_ASNUMBER			 162
#define X509V3_R_INVALID_ASRANGE			 163
997 998
#define X509V3_R_INVALID_BOOLEAN_STRING			 104
#define X509V3_R_INVALID_EXTENSION_STRING		 105
B
Ben Laurie 已提交
999 1000
#define X509V3_R_INVALID_INHERITANCE			 165
#define X509V3_R_INVALID_IPADDRESS			 166
1001 1002 1003 1004
#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
1005 1006
#define X509V3_R_INVALID_NUMBER				 140
#define X509V3_R_INVALID_NUMBERS			 141
1007
#define X509V3_R_INVALID_OBJECT_IDENTIFIER		 110
1008
#define X509V3_R_INVALID_OPTION				 138
1009
#define X509V3_R_INVALID_POLICY_IDENTIFIER		 134
1010
#define X509V3_R_INVALID_PROXY_POLICY_SETTING		 153
D
 
Dr. Stephen Henson 已提交
1011
#define X509V3_R_INVALID_PURPOSE			 146
B
Ben Laurie 已提交
1012
#define X509V3_R_INVALID_SAFI				 164
1013
#define X509V3_R_INVALID_SECTION			 135
1014
#define X509V3_R_INVALID_SYNTAX				 143
1015 1016
#define X509V3_R_ISSUER_DECODE_ERROR			 126
#define X509V3_R_MISSING_VALUE				 124
1017
#define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS		 142
1018
#define X509V3_R_NO_CONFIG_DATABASE			 136
1019
#define X509V3_R_NO_ISSUER_CERTIFICATE			 121
1020
#define X509V3_R_NO_ISSUER_DETAILS			 127
1021
#define X509V3_R_NO_POLICY_IDENTIFIER			 139
1022
#define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED	 154
1023
#define X509V3_R_NO_PUBLIC_KEY				 114
1024
#define X509V3_R_NO_SUBJECT_DETAILS			 125
1025
#define X509V3_R_ODD_NUMBER_OF_DIGITS			 112
1026
#define X509V3_R_OPERATION_NOT_DEFINED			 148
D
 
Dr. Stephen Henson 已提交
1027
#define X509V3_R_OTHERNAME_ERROR			 147
1028
#define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED	 155
1029
#define X509V3_R_POLICY_PATH_LENGTH			 156
1030
#define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED	 157
1031
#define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED	 158
1032
#define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159
1033
#define X509V3_R_SECTION_NOT_FOUND			 150
1034 1035
#define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS		 122
#define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID		 123
1036
#define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT		 111
1037 1038
#define X509V3_R_UNKNOWN_EXTENSION			 129
#define X509V3_R_UNKNOWN_EXTENSION_NAME			 130
1039
#define X509V3_R_UNKNOWN_OPTION				 120
1040
#define X509V3_R_UNSUPPORTED_OPTION			 117
1041
#define X509V3_R_UNSUPPORTED_TYPE			 167
1042
#define X509V3_R_USER_TOO_LONG				 132
1043

1044 1045 1046 1047
#ifdef  __cplusplus
}
#endif
#endif