1e1051a39Sopenharmony_ci/* 2e1051a39Sopenharmony_ci * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci * 4e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci * this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci */ 9e1051a39Sopenharmony_ci 10e1051a39Sopenharmony_ci#include <stdio.h> 11e1051a39Sopenharmony_ci#include "internal/cryptlib.h" 12e1051a39Sopenharmony_ci#include <openssl/crypto.h> 13e1051a39Sopenharmony_ci#include <openssl/x509.h> 14e1051a39Sopenharmony_ci 15e1051a39Sopenharmony_ciint X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, 16e1051a39Sopenharmony_ci const char *propq) 17e1051a39Sopenharmony_ci{ 18e1051a39Sopenharmony_ci X509_LOOKUP *lookup; 19e1051a39Sopenharmony_ci 20e1051a39Sopenharmony_ci lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_file()); 21e1051a39Sopenharmony_ci if (lookup == NULL) 22e1051a39Sopenharmony_ci return 0; 23e1051a39Sopenharmony_ci X509_LOOKUP_load_file_ex(lookup, NULL, X509_FILETYPE_DEFAULT, libctx, propq); 24e1051a39Sopenharmony_ci 25e1051a39Sopenharmony_ci lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_hash_dir()); 26e1051a39Sopenharmony_ci if (lookup == NULL) 27e1051a39Sopenharmony_ci return 0; 28e1051a39Sopenharmony_ci X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); 29e1051a39Sopenharmony_ci 30e1051a39Sopenharmony_ci lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_store()); 31e1051a39Sopenharmony_ci if (lookup == NULL) 32e1051a39Sopenharmony_ci return 0; 33e1051a39Sopenharmony_ci X509_LOOKUP_add_store_ex(lookup, NULL, libctx, propq); 34e1051a39Sopenharmony_ci 35e1051a39Sopenharmony_ci /* clear any errors */ 36e1051a39Sopenharmony_ci ERR_clear_error(); 37e1051a39Sopenharmony_ci 38e1051a39Sopenharmony_ci return 1; 39e1051a39Sopenharmony_ci} 40e1051a39Sopenharmony_ciint X509_STORE_set_default_paths(X509_STORE *ctx) 41e1051a39Sopenharmony_ci{ 42e1051a39Sopenharmony_ci return X509_STORE_set_default_paths_ex(ctx, NULL, NULL); 43e1051a39Sopenharmony_ci} 44e1051a39Sopenharmony_ci 45e1051a39Sopenharmony_ciint X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, 46e1051a39Sopenharmony_ci OSSL_LIB_CTX *libctx, const char *propq) 47e1051a39Sopenharmony_ci{ 48e1051a39Sopenharmony_ci X509_LOOKUP *lookup; 49e1051a39Sopenharmony_ci 50e1051a39Sopenharmony_ci if (file == NULL 51e1051a39Sopenharmony_ci || (lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_file())) == NULL 52e1051a39Sopenharmony_ci || X509_LOOKUP_load_file_ex(lookup, file, X509_FILETYPE_PEM, libctx, 53e1051a39Sopenharmony_ci propq) <= 0) 54e1051a39Sopenharmony_ci return 0; 55e1051a39Sopenharmony_ci 56e1051a39Sopenharmony_ci return 1; 57e1051a39Sopenharmony_ci} 58e1051a39Sopenharmony_ci 59e1051a39Sopenharmony_ciint X509_STORE_load_file(X509_STORE *ctx, const char *file) 60e1051a39Sopenharmony_ci{ 61e1051a39Sopenharmony_ci return X509_STORE_load_file_ex(ctx, file, NULL, NULL); 62e1051a39Sopenharmony_ci} 63e1051a39Sopenharmony_ci 64e1051a39Sopenharmony_ciint X509_STORE_load_path(X509_STORE *ctx, const char *path) 65e1051a39Sopenharmony_ci{ 66e1051a39Sopenharmony_ci X509_LOOKUP *lookup; 67e1051a39Sopenharmony_ci 68e1051a39Sopenharmony_ci if (path == NULL 69e1051a39Sopenharmony_ci || (lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_hash_dir())) == NULL 70e1051a39Sopenharmony_ci || X509_LOOKUP_add_dir(lookup, path, X509_FILETYPE_PEM) <= 0) 71e1051a39Sopenharmony_ci return 0; 72e1051a39Sopenharmony_ci 73e1051a39Sopenharmony_ci return 1; 74e1051a39Sopenharmony_ci} 75e1051a39Sopenharmony_ci 76e1051a39Sopenharmony_ciint X509_STORE_load_store_ex(X509_STORE *ctx, const char *uri, 77e1051a39Sopenharmony_ci OSSL_LIB_CTX *libctx, const char *propq) 78e1051a39Sopenharmony_ci{ 79e1051a39Sopenharmony_ci X509_LOOKUP *lookup; 80e1051a39Sopenharmony_ci 81e1051a39Sopenharmony_ci if (uri == NULL 82e1051a39Sopenharmony_ci || (lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_store())) == NULL 83e1051a39Sopenharmony_ci || X509_LOOKUP_add_store_ex(lookup, uri, libctx, propq) == 0) 84e1051a39Sopenharmony_ci return 0; 85e1051a39Sopenharmony_ci 86e1051a39Sopenharmony_ci return 1; 87e1051a39Sopenharmony_ci} 88e1051a39Sopenharmony_ci 89e1051a39Sopenharmony_ciint X509_STORE_load_store(X509_STORE *ctx, const char *uri) 90e1051a39Sopenharmony_ci{ 91e1051a39Sopenharmony_ci return X509_STORE_load_store_ex(ctx, uri, NULL, NULL); 92e1051a39Sopenharmony_ci} 93e1051a39Sopenharmony_ci 94e1051a39Sopenharmony_ciint X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, 95e1051a39Sopenharmony_ci const char *path, OSSL_LIB_CTX *libctx, 96e1051a39Sopenharmony_ci const char *propq) 97e1051a39Sopenharmony_ci{ 98e1051a39Sopenharmony_ci if (file == NULL && path == NULL) 99e1051a39Sopenharmony_ci return 0; 100e1051a39Sopenharmony_ci if (file != NULL && !X509_STORE_load_file_ex(ctx, file, libctx, propq)) 101e1051a39Sopenharmony_ci return 0; 102e1051a39Sopenharmony_ci if (path != NULL && !X509_STORE_load_path(ctx, path)) 103e1051a39Sopenharmony_ci return 0; 104e1051a39Sopenharmony_ci return 1; 105e1051a39Sopenharmony_ci} 106e1051a39Sopenharmony_ci 107e1051a39Sopenharmony_ciint X509_STORE_load_locations(X509_STORE *ctx, const char *file, 108e1051a39Sopenharmony_ci const char *path) 109e1051a39Sopenharmony_ci{ 110e1051a39Sopenharmony_ci return X509_STORE_load_locations_ex(ctx, file, path, NULL, NULL); 111e1051a39Sopenharmony_ci} 112