x509v3.h (9443B)
1 /* x509v3.h 2 * 3 * Copyright (C) 2006-2025 wolfSSL Inc. 4 * 5 * This file is part of wolfSSL. 6 * 7 * wolfSSL is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * wolfSSL is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 20 */ 21 22 /* x509v3.h for openSSL */ 23 24 #ifndef WOLFSSL_x509v3_H 25 #define WOLFSSL_x509v3_H 26 27 #include <wolfssl/wolfcrypt/types.h> 28 #include <wolfssl/openssl/compat_types.h> 29 #include <wolfssl/openssl/conf.h> 30 #include <wolfssl/openssl/bio.h> 31 #include <wolfssl/openssl/ssl.h> 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 38 39 #define WOLFSSL_EXFLAG_KUSAGE 0x2 40 #define WOLFSSL_EXFLAG_XKUSAGE 0x4 41 42 #define WOLFSSL_XKU_SSL_SERVER 0x1 43 #define WOLFSSL_XKU_SSL_CLIENT 0x2 44 #define WOLFSSL_XKU_SMIME 0x4 45 #define WOLFSSL_XKU_CODE_SIGN 0x8 46 #define WOLFSSL_XKU_SGC 0x10 47 #define WOLFSSL_XKU_OCSP_SIGN 0x20 48 #define WOLFSSL_XKU_TIMESTAMP 0x40 49 #define WOLFSSL_XKU_DVCS 0x80 50 #define WOLFSSL_XKU_ANYEKU 0x100 51 52 #define WOLFSSL_X509_PURPOSE_SSL_CLIENT 0 53 #define WOLFSSL_X509_PURPOSE_SSL_SERVER 1 54 55 #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x0090801fL 56 typedef void *(*WOLFSSL_X509V3_EXT_D2I)(void *, const unsigned char **, long); 57 #else 58 typedef void *(*WOLFSSL_X509V3_EXT_D2I)(void *, unsigned char **, long); 59 #endif 60 typedef int (*WOLFSSL_X509V3_EXT_I2D) (void *, unsigned char **); 61 typedef WOLF_STACK_OF(CONF_VALUE) *(*WOLFSSL_X509V3_EXT_I2V) ( 62 struct WOLFSSL_v3_ext_method *method, 63 void *ext, WOLF_STACK_OF(CONF_VALUE) *extlist); 64 typedef char *(*WOLFSSL_X509V3_EXT_I2S)(struct WOLFSSL_v3_ext_method *method, void *ext); 65 typedef int (*WOLFSSL_X509V3_EXT_I2R) (struct WOLFSSL_v3_ext_method *method, 66 void *ext, WOLFSSL_BIO *out, int indent); 67 typedef struct WOLFSSL_v3_ext_method WOLFSSL_X509V3_EXT_METHOD; 68 69 struct WOLFSSL_v3_ext_method { 70 int ext_nid; 71 int ext_flags; 72 void *usr_data; 73 WOLFSSL_X509V3_EXT_D2I d2i; 74 WOLFSSL_X509V3_EXT_I2D i2d; 75 WOLFSSL_X509V3_EXT_I2V i2v; 76 WOLFSSL_X509V3_EXT_I2S i2s; 77 WOLFSSL_X509V3_EXT_I2R i2r; 78 }; 79 80 struct WOLFSSL_X509_EXTENSION { 81 WOLFSSL_ASN1_OBJECT *obj; 82 WOLFSSL_ASN1_BOOLEAN crit; 83 WOLFSSL_ASN1_STRING value; /* DER format of extension */ 84 WOLFSSL_v3_ext_method ext_method; 85 WOLFSSL_STACK* ext_sk; /* For extension specific data */ 86 }; 87 88 #define WOLFSSL_ASN1_BOOLEAN int 89 90 #define WOLFSSL_GEN_OTHERNAME 0 91 #define WOLFSSL_GEN_EMAIL 1 92 #define WOLFSSL_GEN_DNS 2 93 #define WOLFSSL_GEN_X400 3 94 #define WOLFSSL_GEN_DIRNAME 4 95 #define WOLFSSL_GEN_EDIPARTY 5 96 #define WOLFSSL_GEN_URI 6 97 #define WOLFSSL_GEN_IPADD 7 98 #define WOLFSSL_GEN_RID 8 99 #define WOLFSSL_GEN_IA5 9 100 101 typedef WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION) WOLFSSL_AUTHORITY_INFO_ACCESS; 102 103 WOLFSSL_API WOLFSSL_BASIC_CONSTRAINTS* wolfSSL_BASIC_CONSTRAINTS_new(void); 104 WOLFSSL_API void wolfSSL_BASIC_CONSTRAINTS_free(WOLFSSL_BASIC_CONSTRAINTS *bc); 105 WOLFSSL_API WOLFSSL_AUTHORITY_KEYID* wolfSSL_AUTHORITY_KEYID_new(void); 106 WOLFSSL_API void wolfSSL_AUTHORITY_KEYID_free(WOLFSSL_AUTHORITY_KEYID *id); 107 #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L 108 WOLFSSL_API const WOLFSSL_v3_ext_method* wolfSSL_X509V3_EXT_get( 109 WOLFSSL_X509_EXTENSION* ex); 110 #else 111 WOLFSSL_API WOLFSSL_v3_ext_method* wolfSSL_X509V3_EXT_get( 112 WOLFSSL_X509_EXTENSION* ex); 113 #endif 114 WOLFSSL_API void* wolfSSL_X509V3_EXT_d2i(WOLFSSL_X509_EXTENSION* ex); 115 WOLFSSL_API char* wolfSSL_i2s_ASN1_STRING(WOLFSSL_v3_ext_method *method, 116 const WOLFSSL_ASN1_STRING *s); 117 WOLFSSL_API int wolfSSL_i2d_ASN1_GENERALSTRING(WOLFSSL_ASN1_STRING* s, 118 unsigned char **pp); 119 WOLFSSL_API int wolfSSL_i2d_ASN1_SEQUENCE(WOLFSSL_ASN1_STRING* s, 120 unsigned char **pp); 121 WOLFSSL_API int wolfSSL_i2d_ASN1_OCTET_STRING(WOLFSSL_ASN1_STRING* s, 122 unsigned char **pp); 123 WOLFSSL_API int wolfSSL_i2d_ASN1_UTF8STRING(WOLFSSL_ASN1_STRING* s, 124 unsigned char **pp); 125 WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_GENERALSTRING( 126 WOLFSSL_ASN1_STRING** out, const byte** src, long len); 127 WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_OCTET_STRING( 128 WOLFSSL_ASN1_STRING** out, const byte** src, long len); 129 WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_UTF8STRING( 130 WOLFSSL_ASN1_STRING** out, const byte** src, long len); 131 WOLFSSL_API int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, 132 WOLFSSL_X509_EXTENSION *ext, unsigned long flag, int indent); 133 WOLFSSL_API int wolfSSL_X509V3_EXT_add_nconf(WOLFSSL_CONF *conf, 134 WOLFSSL_X509V3_CTX *ctx, const char *section, WOLFSSL_X509 *cert); 135 WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_X509v3_get_ext( 136 const WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int loc); 137 WOLFSSL_API int wolfSSL_X509v3_get_ext_by_NID( 138 const WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int nid, int lastpos); 139 140 WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_a2i_IPADDRESS(const char* ipa); 141 142 #ifndef OPENSSL_COEXIST 143 144 #define EXFLAG_KUSAGE WOLFSSL_EXFLAG_KUSAGE 145 #define EXFLAG_XKUSAGE WOLFSSL_EXFLAG_XKUSAGE 146 147 #define KU_DIGITAL_SIGNATURE KEYUSE_DIGITAL_SIG 148 #define KU_NON_REPUDIATION KEYUSE_CONTENT_COMMIT 149 #define KU_KEY_ENCIPHERMENT KEYUSE_KEY_ENCIPHER 150 #define KU_DATA_ENCIPHERMENT KEYUSE_DATA_ENCIPHER 151 #define KU_KEY_AGREEMENT KEYUSE_KEY_AGREE 152 #define KU_KEY_CERT_SIGN KEYUSE_KEY_CERT_SIGN 153 #define KU_CRL_SIGN KEYUSE_CRL_SIGN 154 #define KU_ENCIPHER_ONLY KEYUSE_ENCIPHER_ONLY 155 #define KU_DECIPHER_ONLY KEYUSE_DECIPHER_ONLY 156 157 #define XKU_SSL_SERVER WOLFSSL_XKU_SSL_SERVER 158 #define XKU_SSL_CLIENT WOLFSSL_XKU_SSL_CLIENT 159 #define XKU_SMIME WOLFSSL_XKU_SMIME 160 #define XKU_CODE_SIGN WOLFSSL_XKU_CODE_SIGN 161 #define XKU_SGC WOLFSSL_XKU_SGC 162 #define XKU_OCSP_SIGN WOLFSSL_XKU_OCSP_SIGN 163 #define XKU_TIMESTAMP WOLFSSL_XKU_TIMESTAMP 164 #define XKU_DVCS WOLFSSL_XKU_DVCS 165 #define XKU_ANYEKU WOLFSSL_XKU_ANYEKU 166 167 #define X509_PURPOSE_SSL_CLIENT WOLFSSL_X509_PURPOSE_SSL_CLIENT 168 #define X509_PURPOSE_SSL_SERVER WOLFSSL_X509_PURPOSE_SSL_SERVER 169 170 #define NS_SSL_CLIENT WC_NS_SSL_CLIENT 171 #define NS_SSL_SERVER WC_NS_SSL_SERVER 172 173 /* Forward reference */ 174 175 #define X509V3_EXT_D2I WOLFSSL_X509V3_EXT_D2I 176 #define X509V3_EXT_I2D WOLFSSL_X509V3_EXT_I2D 177 #define X509V3_EXT_I2V WOLFSSL_X509V3_EXT_I2V 178 #define X509V3_EXT_I2S WOLFSSL_X509V3_EXT_I2S 179 #define X509V3_EXT_I2R WOLFSSL_X509V3_EXT_I2R 180 typedef struct WOLFSSL_v3_ext_method X509V3_EXT_METHOD; 181 182 #define GEN_OTHERNAME WOLFSSL_GEN_OTHERNAME 183 #define GEN_EMAIL WOLFSSL_GEN_EMAIL 184 #define GEN_DNS WOLFSSL_GEN_DNS 185 #define GEN_X400 WOLFSSL_GEN_X400 186 #define GEN_DIRNAME WOLFSSL_GEN_DIRNAME 187 #define GEN_EDIPARTY WOLFSSL_GEN_EDIPARTY 188 #define GEN_URI WOLFSSL_GEN_URI 189 #define GEN_IPADD WOLFSSL_GEN_IPADD 190 #define GEN_RID WOLFSSL_GEN_RID 191 #define GEN_IA5 WOLFSSL_GEN_IA5 192 193 #define GENERAL_NAME WOLFSSL_GENERAL_NAME 194 195 #define X509V3_CTX WOLFSSL_X509V3_CTX 196 197 #define CTX_TEST 0x1 198 199 typedef struct WOLFSSL_AUTHORITY_KEYID AUTHORITY_KEYID; 200 typedef struct WOLFSSL_BASIC_CONSTRAINTS BASIC_CONSTRAINTS; 201 typedef struct WOLFSSL_ACCESS_DESCRIPTION ACCESS_DESCRIPTION; 202 203 #define BASIC_CONSTRAINTS_free wolfSSL_BASIC_CONSTRAINTS_free 204 #define AUTHORITY_KEYID_free wolfSSL_AUTHORITY_KEYID_free 205 #define SSL_CTX_get_cert_store(x) wolfSSL_CTX_get_cert_store ((x)) 206 #define ASN1_INTEGER WOLFSSL_ASN1_INTEGER 207 #define ASN1_OCTET_STRING WOLFSSL_ASN1_STRING 208 #define X509V3_EXT_get wolfSSL_X509V3_EXT_get 209 #define X509V3_EXT_d2i wolfSSL_X509V3_EXT_d2i 210 #define X509V3_EXT_add_nconf wolfSSL_X509V3_EXT_add_nconf 211 #ifndef NO_WOLFSSL_STUB 212 #define X509V3_parse_list(line) NULL 213 #endif 214 #define i2s_ASN1_OCTET_STRING wolfSSL_i2s_ASN1_STRING 215 #define a2i_IPADDRESS wolfSSL_a2i_IPADDRESS 216 #define X509V3_EXT_print wolfSSL_X509V3_EXT_print 217 #define X509V3_EXT_conf_nid wolfSSL_X509V3_EXT_conf_nid 218 #define X509V3_set_ctx wolfSSL_X509V3_set_ctx 219 #ifndef NO_WOLFSSL_STUB 220 #define X509V3_set_nconf(ctx, conf) WC_DO_NOTHING 221 #define X509V3_EXT_cleanup() WC_DO_NOTHING 222 #endif 223 #define X509V3_set_ctx_test(ctx) wolfSSL_X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) 224 #define X509V3_set_ctx_nodb wolfSSL_X509V3_set_ctx_nodb 225 #define X509v3_get_ext_count wolfSSL_sk_num 226 #define X509v3_get_ext_by_NID wolfSSL_X509v3_get_ext_by_NID 227 #define X509v3_get_ext wolfSSL_X509v3_get_ext 228 229 #endif /* !OPENSSL_COEXIST */ 230 231 #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */ 232 233 #ifdef __cplusplus 234 } 235 #endif 236 237 #endif