Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/openssl/x509_vfy.h
1 /* 2 * WARNING: do not edit! 3 * Generated by Makefile from ../include/openssl/x509_vfy.h.in 4 * 5 * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. 6 * 7 * Licensed under the Apache License 2.0 (the "License"). You may not use 8 * this file except in compliance with the License. You can obtain a copy 9 * in the file LICENSE in the source distribution or at 10 * https://www.openssl.org/source/license.html 11 */ 12 13 /* clang-format off */ 14 15 /* clang-format on */ 16 17 #ifndef OPENSSL_X509_VFY_H 18 #define OPENSSL_X509_VFY_H 19 #pragma once 20 21 #include <openssl/macros.h> 22 #ifndef OPENSSL_NO_DEPRECATED_3_0 23 #define HEADER_X509_VFY_H 24 #endif 25 26 /* 27 * Protect against recursion, x509.h and x509_vfy.h each include the other. 28 */ 29 #ifndef OPENSSL_X509_H 30 #include <openssl/x509.h> 31 #endif 32 33 #include <openssl/opensslconf.h> 34 #include <openssl/lhash.h> 35 #include <openssl/bio.h> 36 #include <openssl/crypto.h> 37 #include <openssl/symhacks.h> 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 /*- 44 SSL_CTX -> X509_STORE 45 -> X509_LOOKUP 46 ->X509_LOOKUP_METHOD 47 -> X509_LOOKUP 48 ->X509_LOOKUP_METHOD 49 50 SSL -> X509_STORE_CTX 51 ->X509_STORE 52 53 The X509_STORE holds the tables etc for verification stuff. 54 A X509_STORE_CTX is used while validating a single certificate. 55 The X509_STORE has X509_LOOKUPs for looking up certs. 56 The X509_STORE then calls a function to actually verify the 57 certificate chain. 58 */ 59 60 typedef enum { 61 X509_LU_NONE = 0, 62 X509_LU_X509, 63 X509_LU_CRL 64 } X509_LOOKUP_TYPE; 65 66 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 67 #define X509_LU_RETRY -1 68 #define X509_LU_FAIL 0 69 #endif 70 71 /* clang-format off */ 72 SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) 73 #define sk_X509_LOOKUP_num(sk) OPENSSL_sk_num(ossl_check_const_X509_LOOKUP_sk_type(sk)) 74 #define sk_X509_LOOKUP_value(sk, idx) ((X509_LOOKUP *)OPENSSL_sk_value(ossl_check_const_X509_LOOKUP_sk_type(sk), (idx))) 75 #define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp))) 76 #define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_null()) 77 #define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n))) 78 #define sk_X509_LOOKUP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_LOOKUP_sk_type(sk), (n)) 79 #define sk_X509_LOOKUP_free(sk) OPENSSL_sk_free(ossl_check_X509_LOOKUP_sk_type(sk)) 80 #define sk_X509_LOOKUP_zero(sk) OPENSSL_sk_zero(ossl_check_X509_LOOKUP_sk_type(sk)) 81 #define sk_X509_LOOKUP_delete(sk, i) ((X509_LOOKUP *)OPENSSL_sk_delete(ossl_check_X509_LOOKUP_sk_type(sk), (i))) 82 #define sk_X509_LOOKUP_delete_ptr(sk, ptr) ((X509_LOOKUP *)OPENSSL_sk_delete_ptr(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))) 83 #define sk_X509_LOOKUP_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) 84 #define sk_X509_LOOKUP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) 85 #define sk_X509_LOOKUP_pop(sk) ((X509_LOOKUP *)OPENSSL_sk_pop(ossl_check_X509_LOOKUP_sk_type(sk))) 86 #define sk_X509_LOOKUP_shift(sk) ((X509_LOOKUP *)OPENSSL_sk_shift(ossl_check_X509_LOOKUP_sk_type(sk))) 87 #define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk),ossl_check_X509_LOOKUP_freefunc_type(freefunc)) 88 #define sk_X509_LOOKUP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), (idx)) 89 #define sk_X509_LOOKUP_set(sk, idx, ptr) ((X509_LOOKUP *)OPENSSL_sk_set(ossl_check_X509_LOOKUP_sk_type(sk), (idx), ossl_check_X509_LOOKUP_type(ptr))) 90 #define sk_X509_LOOKUP_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) 91 #define sk_X509_LOOKUP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) 92 #define sk_X509_LOOKUP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), pnum) 93 #define sk_X509_LOOKUP_sort(sk) OPENSSL_sk_sort(ossl_check_X509_LOOKUP_sk_type(sk)) 94 #define sk_X509_LOOKUP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_LOOKUP_sk_type(sk)) 95 #define sk_X509_LOOKUP_dup(sk) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_dup(ossl_check_const_X509_LOOKUP_sk_type(sk))) 96 #define sk_X509_LOOKUP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_copyfunc_type(copyfunc), ossl_check_X509_LOOKUP_freefunc_type(freefunc))) 97 #define sk_X509_LOOKUP_set_cmp_func(sk, cmp) ((sk_X509_LOOKUP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_compfunc_type(cmp))) 98 SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) 99 #define sk_X509_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_X509_OBJECT_sk_type(sk)) 100 #define sk_X509_OBJECT_value(sk, idx) ((X509_OBJECT *)OPENSSL_sk_value(ossl_check_const_X509_OBJECT_sk_type(sk), (idx))) 101 #define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp))) 102 #define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_null()) 103 #define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n))) 104 #define sk_X509_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_OBJECT_sk_type(sk), (n)) 105 #define sk_X509_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_X509_OBJECT_sk_type(sk)) 106 #define sk_X509_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_X509_OBJECT_sk_type(sk)) 107 #define sk_X509_OBJECT_delete(sk, i) ((X509_OBJECT *)OPENSSL_sk_delete(ossl_check_X509_OBJECT_sk_type(sk), (i))) 108 #define sk_X509_OBJECT_delete_ptr(sk, ptr) ((X509_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))) 109 #define sk_X509_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) 110 #define sk_X509_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) 111 #define sk_X509_OBJECT_pop(sk) ((X509_OBJECT *)OPENSSL_sk_pop(ossl_check_X509_OBJECT_sk_type(sk))) 112 #define sk_X509_OBJECT_shift(sk) ((X509_OBJECT *)OPENSSL_sk_shift(ossl_check_X509_OBJECT_sk_type(sk))) 113 #define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk),ossl_check_X509_OBJECT_freefunc_type(freefunc)) 114 #define sk_X509_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), (idx)) 115 #define sk_X509_OBJECT_set(sk, idx, ptr) ((X509_OBJECT *)OPENSSL_sk_set(ossl_check_X509_OBJECT_sk_type(sk), (idx), ossl_check_X509_OBJECT_type(ptr))) 116 #define sk_X509_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) 117 #define sk_X509_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) 118 #define sk_X509_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), pnum) 119 #define sk_X509_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_X509_OBJECT_sk_type(sk)) 120 #define sk_X509_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_OBJECT_sk_type(sk)) 121 #define sk_X509_OBJECT_dup(sk) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_X509_OBJECT_sk_type(sk))) 122 #define sk_X509_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_copyfunc_type(copyfunc), ossl_check_X509_OBJECT_freefunc_type(freefunc))) 123 #define sk_X509_OBJECT_set_cmp_func(sk, cmp) ((sk_X509_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_compfunc_type(cmp))) 124 SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_PARAM) 125 #define sk_X509_VERIFY_PARAM_num(sk) OPENSSL_sk_num(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) 126 #define sk_X509_VERIFY_PARAM_value(sk, idx) ((X509_VERIFY_PARAM *)OPENSSL_sk_value(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), (idx))) 127 #define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) 128 #define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_null()) 129 #define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n))) 130 #define sk_X509_VERIFY_PARAM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (n)) 131 #define sk_X509_VERIFY_PARAM_free(sk) OPENSSL_sk_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) 132 #define sk_X509_VERIFY_PARAM_zero(sk) OPENSSL_sk_zero(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) 133 #define sk_X509_VERIFY_PARAM_delete(sk, i) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (i))) 134 #define sk_X509_VERIFY_PARAM_delete_ptr(sk, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete_ptr(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))) 135 #define sk_X509_VERIFY_PARAM_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) 136 #define sk_X509_VERIFY_PARAM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) 137 #define sk_X509_VERIFY_PARAM_pop(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_pop(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) 138 #define sk_X509_VERIFY_PARAM_shift(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_shift(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) 139 #define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk),ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) 140 #define sk_X509_VERIFY_PARAM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), (idx)) 141 #define sk_X509_VERIFY_PARAM_set(sk, idx, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_set(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (idx), ossl_check_X509_VERIFY_PARAM_type(ptr))) 142 #define sk_X509_VERIFY_PARAM_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) 143 #define sk_X509_VERIFY_PARAM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) 144 #define sk_X509_VERIFY_PARAM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), pnum) 145 #define sk_X509_VERIFY_PARAM_sort(sk) OPENSSL_sk_sort(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) 146 #define sk_X509_VERIFY_PARAM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) 147 #define sk_X509_VERIFY_PARAM_dup(sk) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_dup(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk))) 148 #define sk_X509_VERIFY_PARAM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_copyfunc_type(copyfunc), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc))) 149 #define sk_X509_VERIFY_PARAM_set_cmp_func(sk, cmp) ((sk_X509_VERIFY_PARAM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) 150 151 /* clang-format on */ 152 153 /* This is used for a table of trust checking functions */ 154 typedef struct x509_trust_st { 155 int trust; 156 int flags; 157 int (*check_trust)(struct x509_trust_st *, X509 *, int); 158 char *name; 159 int arg1; 160 void *arg2; 161 } X509_TRUST; 162 /* clang-format off */ 163 SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) 164 #define sk_X509_TRUST_num(sk) OPENSSL_sk_num(ossl_check_const_X509_TRUST_sk_type(sk)) 165 #define sk_X509_TRUST_value(sk, idx) ((X509_TRUST *)OPENSSL_sk_value(ossl_check_const_X509_TRUST_sk_type(sk), (idx))) 166 #define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp))) 167 #define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_null()) 168 #define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n))) 169 #define sk_X509_TRUST_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_TRUST_sk_type(sk), (n)) 170 #define sk_X509_TRUST_free(sk) OPENSSL_sk_free(ossl_check_X509_TRUST_sk_type(sk)) 171 #define sk_X509_TRUST_zero(sk) OPENSSL_sk_zero(ossl_check_X509_TRUST_sk_type(sk)) 172 #define sk_X509_TRUST_delete(sk, i) ((X509_TRUST *)OPENSSL_sk_delete(ossl_check_X509_TRUST_sk_type(sk), (i))) 173 #define sk_X509_TRUST_delete_ptr(sk, ptr) ((X509_TRUST *)OPENSSL_sk_delete_ptr(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))) 174 #define sk_X509_TRUST_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) 175 #define sk_X509_TRUST_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) 176 #define sk_X509_TRUST_pop(sk) ((X509_TRUST *)OPENSSL_sk_pop(ossl_check_X509_TRUST_sk_type(sk))) 177 #define sk_X509_TRUST_shift(sk) ((X509_TRUST *)OPENSSL_sk_shift(ossl_check_X509_TRUST_sk_type(sk))) 178 #define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk),ossl_check_X509_TRUST_freefunc_type(freefunc)) 179 #define sk_X509_TRUST_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), (idx)) 180 #define sk_X509_TRUST_set(sk, idx, ptr) ((X509_TRUST *)OPENSSL_sk_set(ossl_check_X509_TRUST_sk_type(sk), (idx), ossl_check_X509_TRUST_type(ptr))) 181 #define sk_X509_TRUST_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) 182 #define sk_X509_TRUST_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) 183 #define sk_X509_TRUST_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), pnum) 184 #define sk_X509_TRUST_sort(sk) OPENSSL_sk_sort(ossl_check_X509_TRUST_sk_type(sk)) 185 #define sk_X509_TRUST_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_TRUST_sk_type(sk)) 186 #define sk_X509_TRUST_dup(sk) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_dup(ossl_check_const_X509_TRUST_sk_type(sk))) 187 #define sk_X509_TRUST_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_copyfunc_type(copyfunc), ossl_check_X509_TRUST_freefunc_type(freefunc))) 188 #define sk_X509_TRUST_set_cmp_func(sk, cmp) ((sk_X509_TRUST_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_compfunc_type(cmp))) 189 190 /* clang-format on */ 191 192 /* standard trust ids */ 193 #define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ 194 #define X509_TRUST_COMPAT 1 195 #define X509_TRUST_SSL_CLIENT 2 196 #define X509_TRUST_SSL_SERVER 3 197 #define X509_TRUST_EMAIL 4 198 #define X509_TRUST_OBJECT_SIGN 5 199 #define X509_TRUST_OCSP_SIGN 6 200 #define X509_TRUST_OCSP_REQUEST 7 201 #define X509_TRUST_TSA 8 202 /* Keep these up to date! */ 203 #define X509_TRUST_MIN 1 204 #define X509_TRUST_MAX 8 205 206 /* trust_flags values */ 207 #define X509_TRUST_DYNAMIC (1U << 0) 208 #define X509_TRUST_DYNAMIC_NAME (1U << 1) 209 /* No compat trust if self-signed, preempts "DO_SS" */ 210 #define X509_TRUST_NO_SS_COMPAT (1U << 2) 211 /* Compat trust if no explicit accepted trust EKUs */ 212 #define X509_TRUST_DO_SS_COMPAT (1U << 3) 213 /* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ 214 #define X509_TRUST_OK_ANY_EKU (1U << 4) 215 216 /* check_trust return codes */ 217 #define X509_TRUST_TRUSTED 1 218 #define X509_TRUST_REJECTED 2 219 #define X509_TRUST_UNTRUSTED 3 220 221 int X509_TRUST_set(int *t, int trust); 222 int X509_TRUST_get_count(void); 223 X509_TRUST *X509_TRUST_get0(int idx); 224 int X509_TRUST_get_by_id(int id); 225 int X509_TRUST_add(int id, int flags, int (*ck)(X509_TRUST *, X509 *, int), 226 const char *name, int arg1, void *arg2); 227 void X509_TRUST_cleanup(void); 228 int X509_TRUST_get_flags(const X509_TRUST *xp); 229 char *X509_TRUST_get0_name(const X509_TRUST *xp); 230 int X509_TRUST_get_trust(const X509_TRUST *xp); 231 232 int X509_trusted(const X509 *x); 233 int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); 234 int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); 235 void X509_trust_clear(X509 *x); 236 void X509_reject_clear(X509 *x); 237 STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); 238 STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); 239 240 int (*X509_TRUST_set_default(int (*trust)(int, X509 *, int)))(int, X509 *, 241 int); 242 int X509_check_trust(X509 *x, int id, int flags); 243 244 int X509_verify_cert(X509_STORE_CTX *ctx); 245 int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); 246 STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, 247 X509_STORE *store, int with_self_signed, 248 OSSL_LIB_CTX *libctx, const char *propq); 249 250 int X509_STORE_set_depth(X509_STORE *store, int depth); 251 252 typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); 253 int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); 254 typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); 255 typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, 256 X509_STORE_CTX *ctx, X509 *x); 257 typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, 258 X509 *x, X509 *issuer); 259 typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); 260 typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, 261 X509_CRL **crl, X509 *x); 262 typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); 263 typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, 264 X509_CRL *crl, X509 *x); 265 typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); 266 typedef STACK_OF(X509) 267 *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, 268 const X509_NAME *nm); 269 typedef STACK_OF(X509_CRL) 270 *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, 271 const X509_NAME *nm); 272 typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); 273 274 void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); 275 276 #define X509_STORE_CTX_set_app_data(ctx, data) \ 277 X509_STORE_CTX_set_ex_data(ctx, 0, data) 278 #define X509_STORE_CTX_get_app_data(ctx) \ 279 X509_STORE_CTX_get_ex_data(ctx, 0) 280 281 #define X509_L_FILE_LOAD 1 282 #define X509_L_ADD_DIR 2 283 #define X509_L_ADD_STORE 3 284 #define X509_L_LOAD_STORE 4 285 286 #define X509_LOOKUP_load_file(x, name, type) \ 287 X509_LOOKUP_ctrl((x), X509_L_FILE_LOAD, (name), (long)(type), NULL) 288 289 #define X509_LOOKUP_add_dir(x, name, type) \ 290 X509_LOOKUP_ctrl((x), X509_L_ADD_DIR, (name), (long)(type), NULL) 291 292 #define X509_LOOKUP_add_store(x, name) \ 293 X509_LOOKUP_ctrl((x), X509_L_ADD_STORE, (name), 0, NULL) 294 295 #define X509_LOOKUP_load_store(x, name) \ 296 X509_LOOKUP_ctrl((x), X509_L_LOAD_STORE, (name), 0, NULL) 297 298 #define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ 299 X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL, \ 300 (libctx), (propq)) 301 302 #define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ 303 X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ 304 (libctx), (propq)) 305 306 #define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ 307 X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ 308 (libctx), (propq)) 309 310 #define X509_V_OK 0 311 #define X509_V_ERR_UNSPECIFIED 1 312 #define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 313 #define X509_V_ERR_UNABLE_TO_GET_CRL 3 314 #define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 315 #define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 316 #define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 317 #define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 318 #define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 319 #define X509_V_ERR_CERT_NOT_YET_VALID 9 320 #define X509_V_ERR_CERT_HAS_EXPIRED 10 321 #define X509_V_ERR_CRL_NOT_YET_VALID 11 322 #define X509_V_ERR_CRL_HAS_EXPIRED 12 323 #define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 324 #define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 325 #define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 326 #define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 327 #define X509_V_ERR_OUT_OF_MEM 17 328 #define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 329 #define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 330 #define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 331 #define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 332 #define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 333 #define X509_V_ERR_CERT_REVOKED 23 334 #define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 335 #define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 336 #define X509_V_ERR_INVALID_PURPOSE 26 337 #define X509_V_ERR_CERT_UNTRUSTED 27 338 #define X509_V_ERR_CERT_REJECTED 28 339 340 /* These are 'informational' when looking for issuer cert */ 341 #define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 342 #define X509_V_ERR_AKID_SKID_MISMATCH 30 343 #define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 344 #define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 345 #define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 346 #define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 347 #define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 348 #define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 349 #define X509_V_ERR_INVALID_NON_CA 37 350 #define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 351 #define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 352 #define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 353 #define X509_V_ERR_INVALID_EXTENSION 41 354 #define X509_V_ERR_INVALID_POLICY_EXTENSION 42 355 #define X509_V_ERR_NO_EXPLICIT_POLICY 43 356 #define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 357 #define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 358 #define X509_V_ERR_UNNESTED_RESOURCE 46 359 #define X509_V_ERR_PERMITTED_VIOLATION 47 360 #define X509_V_ERR_EXCLUDED_VIOLATION 48 361 #define X509_V_ERR_SUBTREE_MINMAX 49 362 /* The application is not happy */ 363 #define X509_V_ERR_APPLICATION_VERIFICATION 50 364 #define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 365 #define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 366 #define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 367 #define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 368 /* Another issuer check debug option */ 369 #define X509_V_ERR_PATH_LOOP 55 370 /* Suite B mode algorithm violation */ 371 #define X509_V_ERR_SUITE_B_INVALID_VERSION 56 372 #define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 373 #define X509_V_ERR_SUITE_B_INVALID_CURVE 58 374 #define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 375 #define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 376 #define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 377 /* Host, email and IP check errors */ 378 #define X509_V_ERR_HOSTNAME_MISMATCH 62 379 #define X509_V_ERR_EMAIL_MISMATCH 63 380 #define X509_V_ERR_IP_ADDRESS_MISMATCH 64 381 /* DANE TLSA errors */ 382 #define X509_V_ERR_DANE_NO_MATCH 65 383 /* security level errors */ 384 #define X509_V_ERR_EE_KEY_TOO_SMALL 66 385 #define X509_V_ERR_CA_KEY_TOO_SMALL 67 386 #define X509_V_ERR_CA_MD_TOO_WEAK 68 387 /* Caller error */ 388 #define X509_V_ERR_INVALID_CALL 69 389 /* Issuer lookup error */ 390 #define X509_V_ERR_STORE_LOOKUP 70 391 /* Certificate transparency */ 392 #define X509_V_ERR_NO_VALID_SCTS 71 393 394 #define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 395 /* OCSP status errors */ 396 #define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ 397 #define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ 398 #define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ 399 400 #define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 401 #define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 402 403 /* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ 404 #define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 405 #define X509_V_ERR_INVALID_CA 79 406 #define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 407 #define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 408 #define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 409 #define X509_V_ERR_ISSUER_NAME_EMPTY 83 410 #define X509_V_ERR_SUBJECT_NAME_EMPTY 84 411 #define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 412 #define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 413 #define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 414 #define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 415 #define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 416 #define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 417 #define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 418 #define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 419 #define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 420 #define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 421 #define X509_V_ERR_RPK_UNTRUSTED 95 422 423 /* Certificate verify flags */ 424 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 425 #define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ 426 #endif 427 /* Use check time instead of current time */ 428 #define X509_V_FLAG_USE_CHECK_TIME 0x2 429 /* Lookup CRLs */ 430 #define X509_V_FLAG_CRL_CHECK 0x4 431 /* Lookup CRLs for whole chain */ 432 #define X509_V_FLAG_CRL_CHECK_ALL 0x8 433 /* Ignore unhandled critical extensions */ 434 #define X509_V_FLAG_IGNORE_CRITICAL 0x10 435 /* Disable workarounds for broken certificates */ 436 #define X509_V_FLAG_X509_STRICT 0x20 437 /* Enable proxy certificate validation */ 438 #define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 439 /* Enable policy checking */ 440 #define X509_V_FLAG_POLICY_CHECK 0x80 441 /* Policy variable require-explicit-policy */ 442 #define X509_V_FLAG_EXPLICIT_POLICY 0x100 443 /* Policy variable inhibit-any-policy */ 444 #define X509_V_FLAG_INHIBIT_ANY 0x200 445 /* Policy variable inhibit-policy-mapping */ 446 #define X509_V_FLAG_INHIBIT_MAP 0x400 447 /* Notify callback that policy is OK */ 448 #define X509_V_FLAG_NOTIFY_POLICY 0x800 449 /* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ 450 #define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 451 /* Delta CRL support */ 452 #define X509_V_FLAG_USE_DELTAS 0x2000 453 /* Check self-signed CA signature */ 454 #define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 455 /* Use trusted store first */ 456 #define X509_V_FLAG_TRUSTED_FIRST 0x8000 457 /* Suite B 128 bit only mode: not normally used */ 458 #define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 459 /* Suite B 192 bit only mode */ 460 #define X509_V_FLAG_SUITEB_192_LOS 0x20000 461 /* Suite B 128 bit mode allowing 192 bit algorithms */ 462 #define X509_V_FLAG_SUITEB_128_LOS 0x30000 463 /* Allow partial chains if at least one certificate is in trusted store */ 464 #define X509_V_FLAG_PARTIAL_CHAIN 0x80000 465 /* 466 * If the initial chain is not trusted, do not attempt to build an alternative 467 * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag 468 * will force the behaviour to match that of previous versions. 469 */ 470 #define X509_V_FLAG_NO_ALT_CHAINS 0x100000 471 /* Do not check certificate/CRL validity against current time */ 472 #define X509_V_FLAG_NO_CHECK_TIME 0x200000 473 474 #define X509_VP_FLAG_DEFAULT 0x1 475 #define X509_VP_FLAG_OVERWRITE 0x2 476 #define X509_VP_FLAG_RESET_FLAGS 0x4 477 #define X509_VP_FLAG_LOCKED 0x8 478 #define X509_VP_FLAG_ONCE 0x10 479 480 /* Internal use: mask of policy related options */ 481 #define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ 482 | X509_V_FLAG_EXPLICIT_POLICY \ 483 | X509_V_FLAG_INHIBIT_ANY \ 484 | X509_V_FLAG_INHIBIT_MAP) 485 486 int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, 487 const X509_NAME *name); 488 X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, 489 X509_LOOKUP_TYPE type, 490 const X509_NAME *name); 491 X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, 492 X509_OBJECT *x); 493 int X509_OBJECT_up_ref_count(X509_OBJECT *a); 494 X509_OBJECT *X509_OBJECT_new(void); 495 void X509_OBJECT_free(X509_OBJECT *a); 496 X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); 497 X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); 498 int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); 499 X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); 500 int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); 501 X509_STORE *X509_STORE_new(void); 502 void X509_STORE_free(X509_STORE *xs); 503 int X509_STORE_lock(X509_STORE *xs); 504 int X509_STORE_unlock(X509_STORE *xs); 505 int X509_STORE_up_ref(X509_STORE *xs); 506 STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs); 507 STACK_OF(X509_OBJECT) *X509_STORE_get1_objects(X509_STORE *xs); 508 STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *xs); 509 STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *xs, 510 const X509_NAME *nm); 511 STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, 512 const X509_NAME *nm); 513 int X509_STORE_set_flags(X509_STORE *xs, unsigned long flags); 514 int X509_STORE_set_purpose(X509_STORE *xs, int purpose); 515 int X509_STORE_set_trust(X509_STORE *xs, int trust); 516 int X509_STORE_set1_param(X509_STORE *xs, const X509_VERIFY_PARAM *pm); 517 X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *xs); 518 519 void X509_STORE_set_verify(X509_STORE *xs, X509_STORE_CTX_verify_fn verify); 520 #define X509_STORE_set_verify_func(ctx, func) \ 521 X509_STORE_set_verify((ctx), (func)) 522 void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, 523 X509_STORE_CTX_verify_fn verify); 524 X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *xs); 525 void X509_STORE_set_verify_cb(X509_STORE *xs, 526 X509_STORE_CTX_verify_cb verify_cb); 527 #define X509_STORE_set_verify_cb_func(ctx, func) \ 528 X509_STORE_set_verify_cb((ctx), (func)) 529 X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *xs); 530 void X509_STORE_set_get_issuer(X509_STORE *xs, 531 X509_STORE_CTX_get_issuer_fn get_issuer); 532 X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *xs); 533 void X509_STORE_set_check_issued(X509_STORE *xs, 534 X509_STORE_CTX_check_issued_fn check_issued); 535 X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *s); 536 void X509_STORE_set_check_revocation(X509_STORE *xs, 537 X509_STORE_CTX_check_revocation_fn check_revocation); 538 X509_STORE_CTX_check_revocation_fn 539 X509_STORE_get_check_revocation(const X509_STORE *xs); 540 void X509_STORE_set_get_crl(X509_STORE *xs, 541 X509_STORE_CTX_get_crl_fn get_crl); 542 X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *xs); 543 void X509_STORE_set_check_crl(X509_STORE *xs, 544 X509_STORE_CTX_check_crl_fn check_crl); 545 X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *xs); 546 void X509_STORE_set_cert_crl(X509_STORE *xs, 547 X509_STORE_CTX_cert_crl_fn cert_crl); 548 X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *xs); 549 void X509_STORE_set_check_policy(X509_STORE *xs, 550 X509_STORE_CTX_check_policy_fn check_policy); 551 X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *s); 552 void X509_STORE_set_lookup_certs(X509_STORE *xs, 553 X509_STORE_CTX_lookup_certs_fn lookup_certs); 554 X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *s); 555 void X509_STORE_set_lookup_crls(X509_STORE *xs, 556 X509_STORE_CTX_lookup_crls_fn lookup_crls); 557 #define X509_STORE_set_lookup_crls_cb(ctx, func) \ 558 X509_STORE_set_lookup_crls((ctx), (func)) 559 X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *xs); 560 void X509_STORE_set_cleanup(X509_STORE *xs, 561 X509_STORE_CTX_cleanup_fn cleanup); 562 X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *xs); 563 564 #define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ 565 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) 566 int X509_STORE_set_ex_data(X509_STORE *xs, int idx, void *data); 567 void *X509_STORE_get_ex_data(const X509_STORE *xs, int idx); 568 569 X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); 570 X509_STORE_CTX *X509_STORE_CTX_new(void); 571 572 int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); 573 574 void X509_STORE_CTX_free(X509_STORE_CTX *ctx); 575 int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, 576 X509 *target, STACK_OF(X509) *untrusted); 577 int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store, 578 EVP_PKEY *rpk); 579 void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); 580 void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); 581 582 X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); 583 X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); 584 EVP_PKEY *X509_STORE_CTX_get0_rpk(const X509_STORE_CTX *ctx); 585 STACK_OF(X509) *X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); 586 void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); 587 void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, 588 X509_STORE_CTX_verify_cb verify); 589 X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); 590 X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); 591 X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); 592 X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); 593 X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); 594 void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx, 595 X509_STORE_CTX_get_crl_fn get_crl); 596 X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); 597 X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); 598 X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); 599 X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); 600 X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); 601 X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); 602 X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); 603 604 #ifndef OPENSSL_NO_DEPRECATED_1_1_0 605 #define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain 606 #define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted 607 #define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack 608 #define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject 609 #define X509_STORE_get1_certs X509_STORE_CTX_get1_certs 610 #define X509_STORE_get1_crls X509_STORE_CTX_get1_crls 611 /* the following macro is misspelled; use X509_STORE_get1_certs instead */ 612 #define X509_STORE_get1_cert X509_STORE_CTX_get1_certs 613 /* the following macro is misspelled; use X509_STORE_get1_crls instead */ 614 #define X509_STORE_get1_crl X509_STORE_CTX_get1_crls 615 #endif 616 617 X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *xs, X509_LOOKUP_METHOD *m); 618 X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); 619 X509_LOOKUP_METHOD *X509_LOOKUP_file(void); 620 X509_LOOKUP_METHOD *X509_LOOKUP_store(void); 621 622 typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, 623 long argl, char **ret); 624 typedef int (*X509_LOOKUP_ctrl_ex_fn)( 625 X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, 626 OSSL_LIB_CTX *libctx, const char *propq); 627 628 typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, 629 X509_LOOKUP_TYPE type, 630 const X509_NAME *name, 631 X509_OBJECT *ret); 632 typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, 633 X509_LOOKUP_TYPE type, 634 const X509_NAME *name, 635 X509_OBJECT *ret, 636 OSSL_LIB_CTX *libctx, 637 const char *propq); 638 typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, 639 X509_LOOKUP_TYPE type, 640 const X509_NAME *name, 641 const ASN1_INTEGER *serial, 642 X509_OBJECT *ret); 643 typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, 644 X509_LOOKUP_TYPE type, 645 const unsigned char *bytes, 646 int len, 647 X509_OBJECT *ret); 648 typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, 649 X509_LOOKUP_TYPE type, 650 const char *str, 651 int len, 652 X509_OBJECT *ret); 653 654 X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); 655 void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); 656 657 int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, 658 int (*new_item)(X509_LOOKUP *ctx)); 659 int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx); 660 661 int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, 662 void (*free_fn)(X509_LOOKUP *ctx)); 663 void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx); 664 665 int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, 666 int (*init)(X509_LOOKUP *ctx)); 667 int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx); 668 669 int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, 670 int (*shutdown)(X509_LOOKUP *ctx)); 671 int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD *method))(X509_LOOKUP *ctx); 672 673 int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, 674 X509_LOOKUP_ctrl_fn ctrl_fn); 675 X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); 676 677 int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, 678 X509_LOOKUP_get_by_subject_fn fn); 679 X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( 680 const X509_LOOKUP_METHOD *method); 681 682 int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, 683 X509_LOOKUP_get_by_issuer_serial_fn fn); 684 X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( 685 const X509_LOOKUP_METHOD *method); 686 687 int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, 688 X509_LOOKUP_get_by_fingerprint_fn fn); 689 X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( 690 const X509_LOOKUP_METHOD *method); 691 692 int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, 693 X509_LOOKUP_get_by_alias_fn fn); 694 X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( 695 const X509_LOOKUP_METHOD *method); 696 697 int X509_STORE_add_cert(X509_STORE *xs, X509 *x); 698 int X509_STORE_add_crl(X509_STORE *xs, X509_CRL *x); 699 700 int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, 701 X509_LOOKUP_TYPE type, 702 const X509_NAME *name, X509_OBJECT *ret); 703 X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, 704 X509_LOOKUP_TYPE type, 705 const X509_NAME *name); 706 707 int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, 708 long argl, char **ret); 709 int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, 710 char **ret, OSSL_LIB_CTX *libctx, const char *propq); 711 712 int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); 713 int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, 714 OSSL_LIB_CTX *libctx, const char *propq); 715 int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); 716 int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); 717 int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, 718 OSSL_LIB_CTX *libctx, const char *propq); 719 720 X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); 721 void X509_LOOKUP_free(X509_LOOKUP *ctx); 722 int X509_LOOKUP_init(X509_LOOKUP *ctx); 723 int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, 724 const X509_NAME *name, X509_OBJECT *ret); 725 int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, 726 const X509_NAME *name, X509_OBJECT *ret, 727 OSSL_LIB_CTX *libctx, const char *propq); 728 int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, 729 const X509_NAME *name, 730 const ASN1_INTEGER *serial, 731 X509_OBJECT *ret); 732 int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, 733 const unsigned char *bytes, int len, 734 X509_OBJECT *ret); 735 int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, 736 const char *str, int len, X509_OBJECT *ret); 737 int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); 738 void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); 739 X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); 740 int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); 741 742 int X509_STORE_load_file(X509_STORE *xs, const char *file); 743 int X509_STORE_load_path(X509_STORE *xs, const char *path); 744 int X509_STORE_load_store(X509_STORE *xs, const char *store); 745 int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir); 746 int X509_STORE_set_default_paths(X509_STORE *xs); 747 748 int X509_STORE_load_file_ex(X509_STORE *xs, const char *file, 749 OSSL_LIB_CTX *libctx, const char *propq); 750 int X509_STORE_load_store_ex(X509_STORE *xs, const char *store, 751 OSSL_LIB_CTX *libctx, const char *propq); 752 int X509_STORE_load_locations_ex(X509_STORE *xs, 753 const char *file, const char *dir, 754 OSSL_LIB_CTX *libctx, const char *propq); 755 int X509_STORE_set_default_paths_ex(X509_STORE *xs, 756 OSSL_LIB_CTX *libctx, const char *propq); 757 758 #define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ 759 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) 760 int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); 761 void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); 762 int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); 763 void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); 764 int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); 765 void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); 766 X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); 767 void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); 768 X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); 769 X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); 770 X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); 771 STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); 772 STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); 773 void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); 774 void X509_STORE_CTX_set0_rpk(X509_STORE_CTX *ctx, EVP_PKEY *target); 775 void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); 776 void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); 777 int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); 778 int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); 779 int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 780 int purpose, int trust); 781 void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); 782 void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, 783 time_t t); 784 void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx, 785 unsigned int current_reasons); 786 787 X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); 788 int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); 789 int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); 790 791 X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); 792 void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); 793 int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); 794 795 /* 796 * Bridge opacity barrier between libcrypt and libssl, also needed to support 797 * offline testing in test/danetest.c 798 */ 799 void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); 800 #define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) 801 802 /* X509_VERIFY_PARAM functions */ 803 804 X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); 805 void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); 806 int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, 807 const X509_VERIFY_PARAM *from); 808 int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, 809 const X509_VERIFY_PARAM *from); 810 int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); 811 int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, 812 unsigned long flags); 813 int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, 814 unsigned long flags); 815 unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); 816 int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); 817 int X509_VERIFY_PARAM_get_purpose(const X509_VERIFY_PARAM *param); 818 int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); 819 void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); 820 void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); 821 time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); 822 void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); 823 int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, 824 ASN1_OBJECT *policy); 825 int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, 826 STACK_OF(ASN1_OBJECT) *policies); 827 828 int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, 829 uint32_t flags); 830 uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); 831 832 char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); 833 int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, 834 const char *name, size_t namelen); 835 int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, 836 const char *name, size_t namelen); 837 void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, 838 unsigned int flags); 839 unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); 840 char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); 841 void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); 842 char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); 843 int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, 844 const char *email, size_t emaillen); 845 char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); 846 int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, 847 const unsigned char *ip, size_t iplen); 848 int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, 849 const char *ipasc); 850 851 int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); 852 int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); 853 const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); 854 855 int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); 856 int X509_VERIFY_PARAM_get_count(void); 857 const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); 858 const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); 859 void X509_VERIFY_PARAM_table_cleanup(void); 860 861 /* Non positive return values are errors */ 862 #define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ 863 #define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ 864 #define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ 865 866 /* 867 * Positive return values form a bit mask, all but the first are internal to 868 * the library and don't appear in results from X509_policy_check(). 869 */ 870 #define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ 871 #define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ 872 #define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ 873 874 int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, 875 STACK_OF(X509) *certs, 876 STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); 877 878 void X509_policy_tree_free(X509_POLICY_TREE *tree); 879 880 int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); 881 X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, 882 int i); 883 884 STACK_OF(X509_POLICY_NODE) 885 *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); 886 887 STACK_OF(X509_POLICY_NODE) 888 *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); 889 890 int X509_policy_level_node_count(X509_POLICY_LEVEL *level); 891 892 X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, 893 int i); 894 895 const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); 896 897 STACK_OF(POLICYQUALINFO) 898 *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); 899 const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); 900 901 #ifdef __cplusplus 902 } 903 #endif 904 #endif