x509v3.h 22.5 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 61 62 63 64
#ifndef HEADER_X509V3_H
#define HEADER_X509V3_H

#ifdef __cplusplus
extern "C" {
#endif

65 66
#include <openssl/bio.h>
#include <openssl/x509.h>
67
#include <openssl/conf.h>
68 69 70 71 72 73 74

/* Forward reference */
struct v3_ext_method;
struct v3_ext_ctx;

/* Useful typedefs */

75 76 77 78
typedef void * (*X509V3_EXT_NEW)(void);
typedef void (*X509V3_EXT_FREE)(void *);
typedef void * (*X509V3_EXT_D2I)(void *, unsigned char ** , long);
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 82 83 84
typedef char * (*X509V3_EXT_I2S)(struct v3_ext_method *method, void *ext);
typedef void * (*X509V3_EXT_S2I)(struct v3_ext_method *method, struct v3_ext_ctx *ctx, char *str);
typedef int (*X509V3_EXT_I2R)(struct v3_ext_method *method, void *ext, BIO *out, int indent);
typedef void * (*X509V3_EXT_R2I)(struct v3_ext_method *method, struct v3_ext_ctx *ctx, char *str);
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

/* V3 extension structure */

struct v3_ext_method {
int ext_nid;
int ext_flags;
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;

104
/* The following are used for raw extensions */
105
X509V3_EXT_I2R i2r;
106
X509V3_EXT_R2I r2i;
107

108
void *usr_data;	/* Any extension specific data */
109 110
};

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

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

typedef struct v3_ext_method X509V3_EXT_METHOD;
typedef struct v3_ext_ctx X509V3_CTX;

/* ext_flags values */
135 136 137
#define X509V3_EXT_DYNAMIC	0x1
#define X509V3_EXT_CTX_DEP	0x2
#define X509V3_EXT_MULTILINE	0x4
138

139 140
typedef BIT_STRING_BITNAME ENUMERATED_NAMES;

141
typedef struct BASIC_CONSTRAINTS_st {
142 143 144 145
int ca;
ASN1_INTEGER *pathlen;
} BASIC_CONSTRAINTS;

146

147
typedef struct PKEY_USAGE_PERIOD_st {
148 149 150 151
ASN1_GENERALIZEDTIME *notBefore;
ASN1_GENERALIZEDTIME *notAfter;
} PKEY_USAGE_PERIOD;

152 153 154 155 156
typedef struct otherName_st {
ASN1_OBJECT *type_id;
ASN1_TYPE *value;
} OTHERNAME;

157
typedef struct GENERAL_NAME_st {
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175

#define GEN_OTHERNAME	(0|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_EMAIL	(1|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_DNS		(2|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_X400	(3|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_DIRNAME	(4|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_EDIPARTY	(5|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_URI		(6|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_IPADD	(7|V_ASN1_CONTEXT_SPECIFIC)
#define GEN_RID		(8|V_ASN1_CONTEXT_SPECIFIC)

int type;
union {
	char *ptr;
	ASN1_IA5STRING *ia5;/* rfc822Name, dNSName, uniformResourceIdentifier */
	ASN1_OCTET_STRING *ip; /* iPAddress */
	X509_NAME *dirn;		/* dirn */
	ASN1_OBJECT *rid; /* registeredID */
176 177
	OTHERNAME *otherName; /* otherName */
	ASN1_TYPE *other; /* ediPartyName, x400Address */
178 179 180
} d;
} GENERAL_NAME;

181 182 183 184 185
typedef struct ACCESS_DESCRIPTION_st {
ASN1_OBJECT *method;
GENERAL_NAME *location;
} ACCESS_DESCRIPTION;

186 187 188
DECLARE_STACK_OF(GENERAL_NAME)
DECLARE_ASN1_SET_OF(GENERAL_NAME)

189 190 191
DECLARE_STACK_OF(ACCESS_DESCRIPTION)
DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)

192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
typedef struct DIST_POINT_NAME_st {
/* NB: this is a CHOICE type and only one of these should be set */
STACK_OF(GENERAL_NAME) *fullname;
X509_NAME *relativename;
} DIST_POINT_NAME;

typedef struct DIST_POINT_st {
DIST_POINT_NAME	*distpoint;
ASN1_BIT_STRING *reasons;
STACK_OF(GENERAL_NAME) *CRLissuer;
} DIST_POINT;

DECLARE_STACK_OF(DIST_POINT)
DECLARE_ASN1_SET_OF(DIST_POINT)

207 208 209 210 211 212
typedef struct AUTHORITY_KEYID_st {
ASN1_OCTET_STRING *keyid;
STACK_OF(GENERAL_NAME) *issuer;
ASN1_INTEGER *serial;
} AUTHORITY_KEYID;

213
/* Strong extranet structures */
214

215
typedef struct SXNET_ID_st {
216 217 218
	ASN1_INTEGER *zone;
	ASN1_OCTET_STRING *user;
} SXNETID;
219

B
Ben Laurie 已提交
220 221 222 223 224 225 226 227
DECLARE_STACK_OF(SXNETID)
DECLARE_ASN1_SET_OF(SXNETID)

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

228 229 230 231 232 233
typedef struct NOTICEREF_st {
	ASN1_STRING *organization;
	STACK *noticenos;
} NOTICEREF;

typedef struct USERNOTICE_st {
234
	NOTICEREF *noticeref;
235 236 237 238 239 240 241 242 243 244 245 246 247
	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)
248
DECLARE_ASN1_SET_OF(POLICYQUALINFO)
249 250 251

typedef struct POLICYINFO_st {
	ASN1_OBJECT *policyid;
252
	STACK_OF(POLICYQUALINFO) *qualifiers;
253 254
} POLICYINFO;

B
Bodo Möller 已提交
255 256
DECLARE_STACK_OF(POLICYINFO)
DECLARE_ASN1_SET_OF(POLICYINFO)
257

258 259 260
#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
",name:", val->name, ",value:", val->value);

261 262 263 264
#define X509V3_set_ctx_test(ctx) \
			X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
#define X509V3_set_ctx_nodb(ctx) ctx->db = NULL;

265
#define EXT_BITSTRING(nid, table) { nid, 0, \
266 267
			(X509V3_EXT_NEW)ASN1_BIT_STRING_new, \
			(X509V3_EXT_FREE)ASN1_BIT_STRING_free, \
268
			(X509V3_EXT_D2I)d2i_ASN1_BIT_STRING, \
269
			(X509V3_EXT_I2D)i2d_ASN1_BIT_STRING, \
270 271 272
			NULL, NULL, \
			(X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
			(X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
273
			NULL, NULL, \
274 275 276
			(char *)table}

#define EXT_IA5STRING(nid) { nid, 0, \
277 278
			(X509V3_EXT_NEW)ASN1_IA5STRING_new, \
			(X509V3_EXT_FREE)ASN1_IA5STRING_free, \
279
			(X509V3_EXT_D2I)d2i_ASN1_IA5STRING, \
280
			(X509V3_EXT_I2D)i2d_ASN1_IA5STRING, \
281 282
			(X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
			(X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
283
			NULL, NULL, NULL, NULL, \
284 285 286
			NULL}

#define EXT_END { -1, 0, NULL, NULL, NULL, NULL, NULL, NULL, \
287
			 NULL, NULL, NULL, NULL, \
288 289
			 NULL}

290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327

/* 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

#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

#define XKU_SSL_SERVER		0x1	
#define XKU_SSL_CLIENT		0x2
#define XKU_SMIME		0x4
#define XKU_CODE_SIGN		0x8
#define XKU_SGC			0x10

328 329 330
#define X509_PURPOSE_DYNAMIC	0x1
#define X509_PURPOSE_DYNAMIC_NAME	0x2

331
typedef struct x509_purpose_st {
332 333 334 335 336
	int purpose_id;
	int purpose_flags;
	int (*check_purpose)(struct x509_purpose_st *, X509 *, int);
	char *purpose_name;
	/* void *usr_data; */ /* if we enable this it needs a free function */
337 338 339 340 341 342 343
} X509_PURPOSE;

DECLARE_STACK_OF(X509_PURPOSE)




344 345 346 347 348 349
void ERR_load_X509V3_strings(void);
int i2d_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS *a, unsigned char **pp);
BASIC_CONSTRAINTS *d2i_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS **a, unsigned char **pp, long length);
BASIC_CONSTRAINTS *BASIC_CONSTRAINTS_new(void);
void BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a);

350 351 352 353
int i2d_GENERAL_NAME(GENERAL_NAME *a, unsigned char **pp);
GENERAL_NAME *d2i_GENERAL_NAME(GENERAL_NAME **a, unsigned char **pp, long length);
GENERAL_NAME *GENERAL_NAME_new(void);
void GENERAL_NAME_free(GENERAL_NAME *a);
354
STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, STACK_OF(CONF_VALUE) *ret);
355

356 357 358 359 360 361 362 363 364 365
int i2d_SXNET(SXNET *a, unsigned char **pp);
SXNET *d2i_SXNET(SXNET **a, unsigned char **pp, long length);
SXNET *SXNET_new(void);
void SXNET_free(SXNET *a);

int i2d_SXNETID(SXNETID *a, unsigned char **pp);
SXNETID *d2i_SXNETID(SXNETID **a, unsigned char **pp, long length);
SXNETID *SXNETID_new(void);
void SXNETID_free(SXNETID *a);

B
Ben Laurie 已提交
366 367 368
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); 
369 370 371 372 373

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

374 375 376 377 378
int i2d_AUTHORITY_KEYID(AUTHORITY_KEYID *a, unsigned char **pp);
AUTHORITY_KEYID *d2i_AUTHORITY_KEYID(AUTHORITY_KEYID **a, unsigned char **pp, long length);
AUTHORITY_KEYID *AUTHORITY_KEYID_new(void);
void AUTHORITY_KEYID_free(AUTHORITY_KEYID *a);

379 380 381 382 383
int i2d_PKEY_USAGE_PERIOD(PKEY_USAGE_PERIOD *a, unsigned char **pp);
PKEY_USAGE_PERIOD *d2i_PKEY_USAGE_PERIOD(PKEY_USAGE_PERIOD **a, unsigned char **pp, long length);
PKEY_USAGE_PERIOD *PKEY_USAGE_PERIOD_new(void);
void PKEY_USAGE_PERIOD_free(PKEY_USAGE_PERIOD *a);

384 385 386 387
STACK_OF(GENERAL_NAME) *GENERAL_NAMES_new(void);
void GENERAL_NAMES_free(STACK_OF(GENERAL_NAME) *a);
STACK_OF(GENERAL_NAME) *d2i_GENERAL_NAMES(STACK_OF(GENERAL_NAME) **a, unsigned char **pp, long length);
int i2d_GENERAL_NAMES(STACK_OF(GENERAL_NAME) *a, unsigned char **pp);
388 389 390 391
STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
		STACK_OF(GENERAL_NAME) *gen, STACK_OF(CONF_VALUE) *extlist);
STACK_OF(GENERAL_NAME) *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method,
				X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
392

393 394 395 396 397
int i2d_OTHERNAME(OTHERNAME *a, unsigned char **pp);
OTHERNAME *OTHERNAME_new(void);
OTHERNAME *d2i_OTHERNAME(OTHERNAME **a, unsigned char **pp, long length);
void OTHERNAME_free(OTHERNAME *a);

398 399
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);
400

401 402 403 404 405
int i2d_ext_ku(STACK_OF(ASN1_OBJECT) *a, unsigned char **pp);
STACK_OF(ASN1_OBJECT) *d2i_ext_ku(STACK_OF(ASN1_OBJECT) **a,
					unsigned char **pp, long length);
void ext_ku_free(STACK_OF(ASN1_OBJECT) *a);
STACK_OF(ASN1_OBJECT) *ext_ku_new(void);
B
Ben Laurie 已提交
406

407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
int i2d_CERTIFICATEPOLICIES(STACK_OF(POLICYINFO) *a, unsigned char **pp);
STACK_OF(POLICYINFO) *CERTIFICATEPOLICIES_new(void);
void CERTIFICATEPOLICIES_free(STACK_OF(POLICYINFO) *a);
STACK_OF(POLICYINFO) *d2i_CERTIFICATEPOLICIES(STACK_OF(POLICYINFO) **a, unsigned char **pp, long length);

int i2d_POLICYINFO(POLICYINFO *a, unsigned char **pp);
POLICYINFO *POLICYINFO_new(void);
POLICYINFO *d2i_POLICYINFO(POLICYINFO **a, unsigned char **pp, long length);
void POLICYINFO_free(POLICYINFO *a);

int i2d_POLICYQUALINFO(POLICYQUALINFO *a, unsigned char **pp);
POLICYQUALINFO *POLICYQUALINFO_new(void);
POLICYQUALINFO *d2i_POLICYQUALINFO(POLICYQUALINFO **a, unsigned char **pp,
								 long length);
void POLICYQUALINFO_free(POLICYQUALINFO *a);

int i2d_USERNOTICE(USERNOTICE *a, unsigned char **pp);
USERNOTICE *USERNOTICE_new(void);
USERNOTICE *d2i_USERNOTICE(USERNOTICE **a, unsigned char **pp, long length);
void USERNOTICE_free(USERNOTICE *a);

int i2d_NOTICEREF(NOTICEREF *a, unsigned char **pp);
NOTICEREF *NOTICEREF_new(void);
NOTICEREF *d2i_NOTICEREF(NOTICEREF **a, unsigned char **pp, long length);
void NOTICEREF_free(NOTICEREF *a);

433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449
int i2d_CRL_DIST_POINTS(STACK_OF(DIST_POINT) *a, unsigned char **pp);
STACK_OF(DIST_POINT) *CRL_DIST_POINTS_new(void);
void CRL_DIST_POINTS_free(STACK_OF(DIST_POINT) *a);
STACK_OF(DIST_POINT) *d2i_CRL_DIST_POINTS(STACK_OF(DIST_POINT) **a,
                unsigned char **pp,long length);

int i2d_DIST_POINT(DIST_POINT *a, unsigned char **pp);
DIST_POINT *DIST_POINT_new(void);
DIST_POINT *d2i_DIST_POINT(DIST_POINT **a, unsigned char **pp, long length);
void DIST_POINT_free(DIST_POINT *a);

int i2d_DIST_POINT_NAME(DIST_POINT_NAME *a, unsigned char **pp);
DIST_POINT_NAME *DIST_POINT_NAME_new(void);
void DIST_POINT_NAME_free(DIST_POINT_NAME *a);
DIST_POINT_NAME *d2i_DIST_POINT_NAME(DIST_POINT_NAME **a, unsigned char **pp,
             long length);

450 451 452 453 454 455 456 457 458 459 460 461 462 463
int i2d_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION *a, unsigned char **pp);
ACCESS_DESCRIPTION *ACCESS_DESCRIPTION_new(void);
void ACCESS_DESCRIPTION_free(ACCESS_DESCRIPTION *a);
ACCESS_DESCRIPTION *d2i_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION **a, unsigned char **pp,
             long length);

STACK_OF(ACCESS_DESCRIPTION) *AUTHORITY_INFO_ACCESS_new();
void AUTHORITY_INFO_ACCESS_free(STACK_OF(ACCESS_DESCRIPTION) *a);
STACK_OF(ACCESS_DESCRIPTION) *d2i_AUTHORITY_INFO_ACCESS(STACK_OF(ACCESS_DESCRIPTION) **a,
					 unsigned char **pp, long length);
int i2d_AUTHORITY_INFO_ACCESS(STACK_OF(ACCESS_DESCRIPTION) *a, unsigned char **pp);



464
#ifdef HEADER_CONF_H
465
GENERAL_NAME *v2i_GENERAL_NAME(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf);
466 467 468 469
void X509V3_conf_free(CONF_VALUE *val);
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);
470
int X509V3_EXT_REQ_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509_REQ *req);
471
int X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509_CRL *crl);
472 473
int X509V3_add_value_bool_nf(char *name, int asn1_bool,
						STACK_OF(CONF_VALUE) **extlist);
474 475
int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);
int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);
476
void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH *lhash);
477 478
#endif

479
char * X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
480
STACK_OF(CONF_VALUE) * X509V3_get_section(X509V3_CTX *ctx, char *section);
481
void X509V3_string_free(X509V3_CTX *ctx, char *str);
482
void X509V3_section_free( X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
483 484 485
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
				 X509_REQ *req, X509_CRL *crl, int flags);

486 487
int X509V3_add_value(const char *name, const char *value,
						STACK_OF(CONF_VALUE) **extlist);
B
Ben Laurie 已提交
488
int X509V3_add_value_uchar(const char *name, const unsigned char *value,
489 490 491 492 493
						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);
494
char * i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
495
ASN1_INTEGER * s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
496 497
char * i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
char * i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
498
int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
499
int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
500 501 502 503 504 505
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);
506
STACK_OF(CONF_VALUE) *X509V3_parse_list(char *line);
507
void *X509V3_EXT_d2i(X509_EXTENSION *ext);
508 509 510 511 512
void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx);
void *X509V3_X509_get_d2i(X509 *x, int nid, int *crit, int *idx);
void *X509V3_CRL_get_d2i(X509_CRL *x, int nid, int *crit, int *idx);
void *X509V3_REVOKED_get_d2i(X509_REVOKED *x, int nid, int *crit, int *idx);

513
X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
514

515 516
char *hex_to_string(unsigned char *buffer, long len);
unsigned char *string_to_hex(char *str, long *len);
B
Ben Laurie 已提交
517
int name_cmp(const char *name, const char *cmp);
518

519 520
void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
								 int ml);
521 522
int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, int flag, int indent);
int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
523

524 525
int X509_check_purpose(X509 *x, int id, int ca);
int X509_PURPOSE_add(X509_PURPOSE *xp);
526
void X509_PURPOSE_cleanup(void);
527 528 529 530 531
void X509_PURPOSE_add_standard(void);
int X509_PURPOSE_enum(int (*efunc)(X509_PURPOSE *, void *), void *usr);
int X509_PURPOSE_get_id(X509_PURPOSE *);
char * X509_PURPOSE_get_name(X509_PURPOSE *);

532
/* BEGIN ERROR CODES */
533 534 535 536
/* 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.
 */

537 538 539
/* Error codes for the X509V3 functions. */

/* Function codes. */
540 541 542
#define X509V3_F_COPY_EMAIL				 122
#define X509V3_F_COPY_ISSUER				 123
#define X509V3_F_DO_EXT_CONF				 124
543
#define X509V3_F_DO_EXT_I2D				 135
544
#define X509V3_F_HEX_TO_STRING				 111
545
#define X509V3_F_I2S_ASN1_ENUMERATED			 121
546
#define X509V3_F_I2S_ASN1_INTEGER			 120
547
#define X509V3_F_I2V_AUTHORITY_INFO_ACCESS		 138
548 549 550
#define X509V3_F_NOTICE_SECTION				 132
#define X509V3_F_NREF_NOS				 133
#define X509V3_F_POLICY_SECTION				 131
551
#define X509V3_F_R2I_CERTPOL				 130
552
#define X509V3_F_S2I_ASN1_IA5STRING			 100
553
#define X509V3_F_S2I_ASN1_INTEGER			 108
554 555 556 557
#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
558 559 560 561 562
#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
563
#define X509V3_F_V2I_ACCESS_DESCRIPTION			 139
564
#define X509V3_F_V2I_ASN1_BIT_STRING			 101
565
#define X509V3_F_V2I_AUTHORITY_KEYID			 119
566
#define X509V3_F_V2I_BASIC_CONSTRAINTS			 102
567
#define X509V3_F_V2I_CRLD				 134
568
#define X509V3_F_V2I_EXT_KU				 103
569 570
#define X509V3_F_V2I_GENERAL_NAME			 117
#define X509V3_F_V2I_GENERAL_NAMES			 118
D
Dr. Stephen Henson 已提交
571
#define X509V3_F_V3_GENERIC_EXTENSION			 116
572
#define X509V3_F_X509V3_ADD_VALUE			 105
573
#define X509V3_F_X509V3_EXT_ADD				 104
574 575
#define X509V3_F_X509V3_EXT_ADD_ALIAS			 106
#define X509V3_F_X509V3_EXT_CONF			 107
576
#define X509V3_F_X509V3_EXT_I2D				 136
577
#define X509V3_F_X509V3_GET_VALUE_BOOL			 110
578
#define X509V3_F_X509V3_PARSE_LIST			 109
579
#define X509V3_F_X509_PURPOSE_ADD			 137
580 581

/* Reason codes. */
582 583
#define X509V3_R_BAD_IP_ADDRESS				 118
#define X509V3_R_BAD_OBJECT				 119
584 585
#define X509V3_R_BN_DEC2BN_ERROR			 100
#define X509V3_R_BN_TO_ASN1_INTEGER_ERROR		 101
586 587
#define X509V3_R_DUPLICATE_ZONE_ID			 133
#define X509V3_R_ERROR_CONVERTING_ZONE			 131
588
#define X509V3_R_ERROR_IN_EXTENSION			 128
589
#define X509V3_R_EXPECTED_A_SECTION_NAME		 137
D
Dr. Stephen Henson 已提交
590
#define X509V3_R_EXTENSION_NAME_ERROR			 115
591 592
#define X509V3_R_EXTENSION_NOT_FOUND			 102
#define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED	 103
D
Dr. Stephen Henson 已提交
593
#define X509V3_R_EXTENSION_VALUE_ERROR			 116
594
#define X509V3_R_ILLEGAL_HEX_DIGIT			 113
595 596 597 598 599 600
#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
601 602
#define X509V3_R_INVALID_NUMBER				 140
#define X509V3_R_INVALID_NUMBERS			 141
603
#define X509V3_R_INVALID_OBJECT_IDENTIFIER		 110
604
#define X509V3_R_INVALID_OPTION				 138
605 606
#define X509V3_R_INVALID_POLICY_IDENTIFIER		 134
#define X509V3_R_INVALID_SECTION			 135
607
#define X509V3_R_INVALID_SYNTAX				 143
608 609
#define X509V3_R_ISSUER_DECODE_ERROR			 126
#define X509V3_R_MISSING_VALUE				 124
610
#define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS		 142
611
#define X509V3_R_NO_CONFIG_DATABASE			 136
612
#define X509V3_R_NO_ISSUER_CERTIFICATE			 121
613
#define X509V3_R_NO_ISSUER_DETAILS			 127
614
#define X509V3_R_NO_POLICY_IDENTIFIER			 139
615
#define X509V3_R_NO_PUBLIC_KEY				 114
616
#define X509V3_R_NO_SUBJECT_DETAILS			 125
617
#define X509V3_R_ODD_NUMBER_OF_DIGITS			 112
618 619
#define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS		 122
#define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID		 123
620
#define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT		 111
621 622
#define X509V3_R_UNKNOWN_EXTENSION			 129
#define X509V3_R_UNKNOWN_EXTENSION_NAME			 130
623
#define X509V3_R_UNKNOWN_OPTION				 120
624
#define X509V3_R_UNSUPPORTED_OPTION			 117
625
#define X509V3_R_USER_TOO_LONG				 132
626

627 628 629 630 631
#ifdef  __cplusplus
}
#endif
#endif