📄 x509v3.h
字号:
/* 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. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * 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). * */#ifndef HEADER_X509V3_H#define HEADER_X509V3_H#include <openssl/bio.h>#include <openssl/x509.h>#include <openssl/conf.h>#ifdef __cplusplusextern "C" {#endif/* Forward reference */struct v3_ext_method;struct v3_ext_ctx;/* Useful typedefs */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 **);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);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);/* V3 extension structure */struct v3_ext_method {int ext_nid;int ext_flags;/* If this is set the following four fields are ignored */ASN1_ITEM_EXP *it;/* Old style ASN1 calls */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;/* The following are used for raw extensions */X509V3_EXT_I2R i2r;X509V3_EXT_R2I r2i;void *usr_data; /* Any extension specific data */};typedef struct X509V3_CONF_METHOD_st {char * (*get_string)(void *db, char *section, char *value);STACK_OF(CONF_VALUE) * (*get_section)(void *db, char *section);void (*free_string)(void *db, char * string);void (*free_section)(void *db, STACK_OF(CONF_VALUE) *section);} X509V3_CONF_METHOD;/* Context specific info */struct v3_ext_ctx {#define CTX_TEST 0x1int flags;X509 *issuer_cert;X509 *subject_cert;X509_REQ *subject_req;X509_CRL *crl;X509V3_CONF_METHOD *db_meth;void *db;/* Maybe more here */};typedef struct v3_ext_method X509V3_EXT_METHOD;typedef struct v3_ext_ctx X509V3_CTX;DECLARE_STACK_OF(X509V3_EXT_METHOD)/* ext_flags values */#define X509V3_EXT_DYNAMIC 0x1#define X509V3_EXT_CTX_DEP 0x2#define X509V3_EXT_MULTILINE 0x4typedef BIT_STRING_BITNAME ENUMERATED_NAMES;typedef struct BASIC_CONSTRAINTS_st {int ca;ASN1_INTEGER *pathlen;} BASIC_CONSTRAINTS;typedef struct PKEY_USAGE_PERIOD_st {ASN1_GENERALIZEDTIME *notBefore;ASN1_GENERALIZEDTIME *notAfter;} PKEY_USAGE_PERIOD;typedef struct otherName_st {ASN1_OBJECT *type_id;ASN1_TYPE *value;} OTHERNAME;typedef struct EDIPartyName_st { ASN1_STRING *nameAssigner; ASN1_STRING *partyName;} EDIPARTYNAME;typedef struct GENERAL_NAME_st {#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 8int type;union { char *ptr; 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 */ ASN1_OCTET_STRING *ip; /* iPAddress */ X509_NAME *dirn; /* dirn */ ASN1_IA5STRING *ia5;/* rfc822Name, dNSName, uniformResourceIdentifier */ ASN1_OBJECT *rid; /* registeredID */ ASN1_TYPE *other; /* x400Address */} d;} GENERAL_NAME;typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;typedef struct ACCESS_DESCRIPTION_st { ASN1_OBJECT *method; GENERAL_NAME *location;} ACCESS_DESCRIPTION;typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;DECLARE_STACK_OF(GENERAL_NAME)DECLARE_ASN1_SET_OF(GENERAL_NAME)DECLARE_STACK_OF(ACCESS_DESCRIPTION)DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)typedef struct DIST_POINT_NAME_st {int type;union { GENERAL_NAMES *fullname; STACK_OF(X509_NAME_ENTRY) *relativename;} name;} DIST_POINT_NAME;typedef struct DIST_POINT_st {DIST_POINT_NAME *distpoint;ASN1_BIT_STRING *reasons;GENERAL_NAMES *CRLissuer;} DIST_POINT;typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;DECLARE_STACK_OF(DIST_POINT)DECLARE_ASN1_SET_OF(DIST_POINT)typedef struct AUTHORITY_KEYID_st {ASN1_OCTET_STRING *keyid;GENERAL_NAMES *issuer;ASN1_INTEGER *serial;} AUTHORITY_KEYID;/* Strong extranet structures */typedef struct SXNET_ID_st { ASN1_INTEGER *zone; ASN1_OCTET_STRING *user;} SXNETID;DECLARE_STACK_OF(SXNETID)DECLARE_ASN1_SET_OF(SXNETID)typedef struct SXNET_st { ASN1_INTEGER *version; STACK_OF(SXNETID) *ids;} SXNET;typedef struct NOTICEREF_st { ASN1_STRING *organization; STACK_OF(ASN1_INTEGER) *noticenos;} NOTICEREF;typedef struct USERNOTICE_st { NOTICEREF *noticeref; 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)DECLARE_ASN1_SET_OF(POLICYQUALINFO)typedef struct POLICYINFO_st { ASN1_OBJECT *policyid; STACK_OF(POLICYQUALINFO) *qualifiers;} POLICYINFO;typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;DECLARE_STACK_OF(POLICYINFO)DECLARE_ASN1_SET_OF(POLICYINFO)#define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \",name:", val->name, ",value:", val->value);#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;#define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ 0,0,0,0, \ 0,0, \ (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ NULL, NULL, \ table}#define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ 0,0,0,0, \ (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ 0,0,0,0, \ NULL}#define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}/* 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 EXFLAG_CRITICAL 0x200#define KU_DIGITAL_SIGNATURE 0x0080
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -