x509v3.h 19.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 65 66 67 68 69 70 71 72 73 74 75 76 77
#ifndef HEADER_X509V3_H
#define HEADER_X509V3_H

#ifdef __cplusplus
extern "C" {
#endif

#include "bio.h"
#include "x509.h"

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

/* Useful typedefs */

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

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

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

char *usr_data;	/* Any extension specific data */
};

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

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

typedef struct v3_ext_method X509V3_EXT_METHOD;
typedef struct v3_ext_ctx X509V3_CTX;

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

138
typedef struct BIT_STRING_BITNAME_st {
139
int bitnum;
B
Ben Laurie 已提交
140 141
const char *lname;
const char *sname;
142 143
} BIT_STRING_BITNAME;

144 145
typedef BIT_STRING_BITNAME ENUMERATED_NAMES;

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

151
typedef struct AUTHORITY_KEYID_st {
152 153 154 155 156
ASN1_OCTET_STRING *keyid;
STACK *issuer;
ASN1_INTEGER *serial;
} AUTHORITY_KEYID;

157
typedef struct PKEY_USAGE_PERIOD_st {
158 159 160 161
ASN1_GENERALIZEDTIME *notBefore;
ASN1_GENERALIZEDTIME *notAfter;
} PKEY_USAGE_PERIOD;

162
typedef struct GENERAL_NAME_st {
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184

#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 */
	ASN1_TYPE *other; /* otherName, ediPartyName, x400Address */
} d;
} GENERAL_NAME;

185
/* Strong extranet structures */
186

187
typedef struct SXNET_ID_st {
188 189 190
	ASN1_INTEGER *zone;
	ASN1_OCTET_STRING *user;
} SXNETID;
191

B
Ben Laurie 已提交
192 193 194 195 196 197 198 199
DECLARE_STACK_OF(SXNETID)
DECLARE_ASN1_SET_OF(SXNETID)

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

200 201 202 203 204 205
typedef struct NOTICEREF_st {
	ASN1_STRING *organization;
	STACK *noticenos;
} NOTICEREF;

typedef struct USERNOTICE_st {
206
	NOTICEREF *noticeref;
207 208 209 210 211 212 213 214 215 216 217 218 219
	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)
220
DECLARE_ASN1_SET_OF(POLICYQUALINFO)
221 222 223

typedef struct POLICYINFO_st {
	ASN1_OBJECT *policyid;
224
	STACK_OF(POLICYQUALINFO) *qualifiers;
225 226
} POLICYINFO;

B
Bodo Möller 已提交
227 228
DECLARE_STACK_OF(POLICYINFO)
DECLARE_ASN1_SET_OF(POLICYINFO)
229

230 231 232
#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
",name:", val->name, ",value:", val->value);

233 234 235 236
#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;

237 238 239 240 241 242 243
#define EXT_BITSTRING(nid, table) { nid, 0, \
			(X509V3_EXT_NEW)asn1_bit_string_new, ASN1_STRING_free, \
			(X509V3_EXT_D2I)d2i_ASN1_BIT_STRING, \
			i2d_ASN1_BIT_STRING, \
			NULL, NULL, \
			(X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
			(X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
244
			NULL, NULL, \
245 246 247 248 249 250 251 252
			(char *)table}

#define EXT_IA5STRING(nid) { nid, 0, \
			(X509V3_EXT_NEW)ia5string_new, ASN1_STRING_free, \
			(X509V3_EXT_D2I)d2i_ASN1_IA5STRING, \
			i2d_ASN1_IA5STRING, \
			(X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
			(X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
253
			NULL, NULL, NULL, NULL, \
254 255 256
			NULL}

#define EXT_END { -1, 0, NULL, NULL, NULL, NULL, NULL, NULL, \
257
			 NULL, NULL, NULL, NULL, \
258 259 260 261 262 263 264 265 266
			 NULL}

#ifndef NOPROTO
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);

267 268 269 270
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);
271
STACK *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, STACK *ret);
272

273 274 275 276 277 278 279 280 281 282
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);

283 284 285 286 287 288 289 290
int SXNET_add_id_asc(SXNET **psx, char *zone, unsigned char *user, int userlen); 
int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, unsigned char *user, int userlen); 
int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, unsigned char *user, int userlen); 

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

291 292 293 294 295
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);

296 297 298 299 300
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);

301 302 303 304
STACK *GENERAL_NAMES_new(void);
void GENERAL_NAMES_free(STACK *a);
STACK *d2i_GENERAL_NAMES(STACK **a, unsigned char **pp, long length);
int i2d_GENERAL_NAMES(STACK *a, unsigned char **pp);
305
STACK *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, STACK *gen, STACK *extlist);
306
STACK *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK *nval);
307

308 309
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);
310

311 312 313 314
int i2d_ext_ku(STACK *a, unsigned char **pp);
STACK *d2i_ext_ku(STACK **a, unsigned char **pp, long length);
void ext_ku_free(STACK *a);
STACK *ext_ku_new(void);
B
Ben Laurie 已提交
315

316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
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);

342
#ifdef HEADER_CONF_H
343
GENERAL_NAME *v2i_GENERAL_NAME(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf);
344 345 346 347
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);
348
int X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509_CRL *crl);
349 350
int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);
int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);
351
void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH *lhash);
352 353
#endif

354 355
char * X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);
STACK * X509V3_get_section(X509V3_CTX *ctx, char *section);
356 357
void X509V3_string_free(X509V3_CTX *ctx, char *str);
void X509V3_section_free( X509V3_CTX *ctx, STACK *section);
358 359 360
void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
				 X509_REQ *req, X509_CRL *crl, int flags);

B
Ben Laurie 已提交
361 362 363
int X509V3_add_value(const char *name, const char *value, STACK **extlist);
int X509V3_add_value_bool(const char *name, int asn1_bool, STACK **extlist);
int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, STACK **extlist);
364
char * i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);
365
ASN1_INTEGER * s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);
366 367
char * i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
char * i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);
368 369 370 371 372 373 374 375
int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
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);
STACK *X509V3_parse_list(char *line);
376
char *X509V3_EXT_d2i(X509_EXTENSION *ext);
377

378 379
char *hex_to_string(unsigned char *buffer, long len);
unsigned char *string_to_hex(char *str, long *len);
B
Ben Laurie 已提交
380
int name_cmp(const char *name, const char *cmp);
381

382 383
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);
384 385 386 387 388 389 390 391 392

#else

void ERR_load_X509V3_strings();
int i2d_BASIC_CONSTRAINTS();
BASIC_CONSTRAINTS *d2i_BASIC_CONSTRAINTS();
BASIC_CONSTRAINTS *BASIC_CONSTRAINTS_new();
void BASIC_CONSTRAINTS_free();

393 394 395 396
int i2d_GENERAL_NAME();
GENERAL_NAME *d2i_GENERAL_NAME();
GENERAL_NAME *GENERAL_NAME_new();
void GENERAL_NAME_free();
397 398
STACK *i2v_GENERAL_NAME();
GENERAL_NAME *v2i_GENERAL_NAME();
399

400 401 402 403 404 405 406 407 408
int i2d_SXNET();
SXNET *d2i_SXNET();
SXNET *SXNET_new();
void SXNET_free();

int i2d_SXNETID();
SXNETID *d2i_SXNETID();
SXNETID *SXNETID_new();
void SXNETID_free();
409 410 411 412 413 414
int SXNET_add_id_asc();
int SXNET_add_id_ulong();
int SXNET_add_id_INTEGER();
ASN1_OCTET_STRING *SXNET_get_id_asc();
ASN1_OCTET_STRING *SXNET_get_id_ulong();
ASN1_OCTET_STRING *SXNET_get_id_INTEGER();
415

416 417 418 419 420
int i2d_AUTHORITY_KEYID();
AUTHORITY_KEYID *d2i_AUTHORITY_KEYID();
AUTHORITY_KEYID *AUTHORITY_KEYID_new();
void AUTHORITY_KEYID_free();

421 422 423 424 425
int i2d_PKEY_USAGE_PERIOD();
PKEY_USAGE_PERIOD *d2i_PKEY_USAGE_PERIOD();
PKEY_USAGE_PERIOD *PKEY_USAGE_PERIOD_new();
void PKEY_USAGE_PERIOD_free();

426 427
STACK *GENERAL_NAMES_new();
void GENERAL_NAMES_free();
428 429
STACK *d2i_GENERAL_NAMES();
int i2d_GENERAL_NAMES();
430
STACK *i2v_GENERAL_NAMES();
431
STACK *v2i_GENERAL_NAMES();
432 433 434

char *i2s_ASN1_OCTET_STRING();
ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING();
435

436 437 438 439 440 441 442 443 444 445 446 447
int i2d_ext_ku();
STACK *d2i_ext_ku();
void ext_ku_free();
STACK *ext_ku_new();

#ifdef HEADER_CONF_H
void X509V3_conf_free();
X509_EXTENSION *X509V3_EXT_conf_nid();
X509_EXTENSION *X509V3_EXT_conf();
int X509V3_EXT_add_conf();
int X509V3_get_value_bool();
int X509V3_get_value_int();
448
void X509V3_set_conf_lhash();
449 450
#endif

451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475
int i2d_CERTIFICATEPOLICIES();
STACK *CERTIFICATEPOLICIES_new();
void CERTIFICATEPOLICIES_free();
STACK *d2i_CERTIFICATEPOLICIES();

int i2d_POLICYINFO();
POLICYINFO *POLICYINFO_new();
POLICYINFO *d2i_POLICYINFO();
void POLICYINFO_free();

int i2d_POLICYQUALINFO();
POLICYQUALINFO *POLICYQUALINFO_new();
POLICYQUALINFO *d2i_POLICYQUALINFO();
void POLICYQUALINFO_free();

int i2d_USERNOTICE();
USERNOTICE *USERNOTICE_new();
USERNOTICE *d2i_USERNOTICE();
void USERNOTICE_free();

int i2d_NOTICEREF();
NOTICEREF *NOTICEREF_new();
NOTICEREF *d2i_NOTICEREF();
void NOTICEREF_free();

476 477
char * X509V3_get_string();
STACK * X509V3_get_section();
478 479
void X509V3_string_free();
void X509V3_section_free();
480 481
void X509V3_set_ctx();

482 483 484
int X509V3_add_value();
int X509V3_add_value_bool();
int X509V3_add_value_int();
485
char *i2s_ASN1_INTEGER();
486
ASN1_INTEGER * s2i_ASN1_INTEGER();
487 488
char * i2s_ASN1_ENUMERATED();
char * i2s_ASN1_ENUMERATED_TABLE();
489
int X509V3_EXT_add();
490
int X509V3_EXT_CRL_add_conf();
491 492 493 494 495 496 497
int X509V3_EXT_add_alias();
void X509V3_EXT_cleanup();

X509V3_EXT_METHOD *X509V3_EXT_get();
X509V3_EXT_METHOD *X509V3_EXT_get_nid();
int X509V3_add_standard_extensions();
STACK *X509V3_parse_list();
498
char *X509V3_EXT_d2i();
499

500 501
char *hex_to_string();
unsigned char *string_to_hex();
502
int name_cmp();
503

504 505 506 507 508 509 510 511
int X509V3_EXT_print();
int X509V3_EXT_print_fp();
#endif

/* BEGIN ERROR CODES */
/* Error codes for the X509V3 functions. */

/* Function codes. */
512 513 514
#define X509V3_F_COPY_EMAIL				 122
#define X509V3_F_COPY_ISSUER				 123
#define X509V3_F_DO_EXT_CONF				 124
515
#define X509V3_F_HEX_TO_STRING				 111
516
#define X509V3_F_I2S_ASN1_ENUMERATED			 121
517
#define X509V3_F_I2S_ASN1_INTEGER			 120
518
#define X509V3_F_R2I_CERTPOL				 130
519
#define X509V3_F_S2I_ASN1_IA5STRING			 100
520
#define X509V3_F_S2I_ASN1_INTEGER			 108
521 522 523 524
#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
525 526 527 528 529
#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
530
#define X509V3_F_V2I_ASN1_BIT_STRING			 101
531
#define X509V3_F_V2I_AUTHORITY_KEYID			 119
532 533
#define X509V3_F_V2I_BASIC_CONSTRAINTS			 102
#define X509V3_F_V2I_EXT_KU				 103
534 535
#define X509V3_F_V2I_GENERAL_NAME			 117
#define X509V3_F_V2I_GENERAL_NAMES			 118
D
Dr. Stephen Henson 已提交
536
#define X509V3_F_V3_GENERIC_EXTENSION			 116
537
#define X509V3_F_X509V3_ADD_VALUE			 105
538
#define X509V3_F_X509V3_EXT_ADD				 104
539 540
#define X509V3_F_X509V3_EXT_ADD_ALIAS			 106
#define X509V3_F_X509V3_EXT_CONF			 107
541
#define X509V3_F_X509V3_GET_VALUE_BOOL			 110
542
#define X509V3_F_X509V3_PARSE_LIST			 109
543 544

/* Reason codes. */
545 546
#define X509V3_R_BAD_IP_ADDRESS				 118
#define X509V3_R_BAD_OBJECT				 119
547 548
#define X509V3_R_BN_DEC2BN_ERROR			 100
#define X509V3_R_BN_TO_ASN1_INTEGER_ERROR		 101
549 550
#define X509V3_R_DUPLICATE_ZONE_ID			 133
#define X509V3_R_ERROR_CONVERTING_ZONE			 131
551
#define X509V3_R_ERROR_IN_EXTENSION			 128
D
Dr. Stephen Henson 已提交
552
#define X509V3_R_EXTENSION_NAME_ERROR			 115
553 554
#define X509V3_R_EXTENSION_NOT_FOUND			 102
#define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED	 103
D
Dr. Stephen Henson 已提交
555
#define X509V3_R_EXTENSION_VALUE_ERROR			 116
556
#define X509V3_R_ILLEGAL_HEX_DIGIT			 113
557 558 559 560 561 562 563
#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
#define X509V3_R_INVALID_OBJECT_IDENTIFIER		 110
564 565
#define X509V3_R_INVALID_POLICY_IDENTIFIER		 134
#define X509V3_R_INVALID_SECTION			 135
566 567
#define X509V3_R_ISSUER_DECODE_ERROR			 126
#define X509V3_R_MISSING_VALUE				 124
568
#define X509V3_R_NO_CONFIG_DATABASE			 136
569
#define X509V3_R_NO_ISSUER_CERTIFICATE			 121
570
#define X509V3_R_NO_ISSUER_DETAILS			 127
571
#define X509V3_R_NO_PUBLIC_KEY				 114
572
#define X509V3_R_NO_SUBJECT_DETAILS			 125
573
#define X509V3_R_ODD_NUMBER_OF_DIGITS			 112
574 575
#define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS		 122
#define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID		 123
576
#define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT		 111
577 578
#define X509V3_R_UNKNOWN_EXTENSION			 129
#define X509V3_R_UNKNOWN_EXTENSION_NAME			 130
579
#define X509V3_R_UNKNOWN_OPTION				 120
580
#define X509V3_R_UNSUPPORTED_OPTION			 117
581
#define X509V3_R_USER_TOO_LONG				 132
582 583 584 585 586 587
 
#ifdef  __cplusplus
}
#endif
#endif