diff options
author | Pauli <paul.dale@oracle.com> | 2020-09-07 11:58:03 +1000 |
---|---|---|
committer | Pauli <paul.dale@oracle.com> | 2020-09-12 16:46:20 +1000 |
commit | eab7b4240dc87e27d8b12b5af23d3cf20dd06f55 (patch) | |
tree | 6cf21b1522dd15ab0b961d5c4a0250d2bc354b09 | |
parent | 5e8cd0a4f48f06df2542e7c74dcbb4310bce7c4c (diff) |
provider: add an 'is_running' call to all providers.
It can be accessed (read only) via the status parameter.
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/12801)
-rw-r--r-- | providers/baseprov.c | 4 | ||||
-rw-r--r-- | providers/build.info | 4 | ||||
-rw-r--r-- | providers/common/include/prov/providercommon.h | 2 | ||||
-rw-r--r-- | providers/defltprov.c | 3 | ||||
-rw-r--r-- | providers/legacyprov.c | 4 | ||||
-rw-r--r-- | providers/nullprov.c | 8 | ||||
-rw-r--r-- | providers/prov_running.c | 16 |
7 files changed, 35 insertions, 6 deletions
diff --git a/providers/baseprov.c b/providers/baseprov.c index e9502f68cd..0904e46333 100644 --- a/providers/baseprov.c +++ b/providers/baseprov.c @@ -38,6 +38,7 @@ static const OSSL_PARAM base_param_types[] = { OSSL_PARAM_DEFN(OSSL_PROV_PARAM_NAME, OSSL_PARAM_UTF8_PTR, NULL, 0), OSSL_PARAM_DEFN(OSSL_PROV_PARAM_VERSION, OSSL_PARAM_UTF8_PTR, NULL, 0), OSSL_PARAM_DEFN(OSSL_PROV_PARAM_BUILDINFO, OSSL_PARAM_UTF8_PTR, NULL, 0), + OSSL_PARAM_DEFN(OSSL_PROV_PARAM_STATUS, OSSL_PARAM_INTEGER, NULL, 0), OSSL_PARAM_END }; @@ -60,6 +61,9 @@ static int base_get_params(void *provctx, OSSL_PARAM params[]) p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_BUILDINFO); if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_FULL_VERSION_STR)) return 0; + p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS); + if (p != NULL && !OSSL_PARAM_set_int(p, ossl_prov_is_running())) + return 0; return 1; } diff --git a/providers/build.info b/providers/build.info index 8d82d3f911..f2e0d433c9 100644 --- a/providers/build.info +++ b/providers/build.info @@ -188,6 +188,6 @@ ENDIF # Because the null provider is built in, it means that libcrypto must # include all the object files that are needed. $NULLGOAL=../libcrypto -SOURCE[$NULLGOAL]=nullprov.c - +SOURCE[$NULLGOAL]=nullprov.c prov_running.c +SOURCE[$LIBNONFIPS]=prov_running.c diff --git a/providers/common/include/prov/providercommon.h b/providers/common/include/prov/providercommon.h index f39d2e313f..f6d27dabab 100644 --- a/providers/common/include/prov/providercommon.h +++ b/providers/common/include/prov/providercommon.h @@ -18,3 +18,5 @@ int cipher_capable_aes_cbc_hmac_sha1(void); int cipher_capable_aes_cbc_hmac_sha256(void); OSSL_FUNC_provider_get_capabilities_fn provider_get_capabilities; + +int ossl_prov_is_running(void); diff --git a/providers/defltprov.c b/providers/defltprov.c index 371d942f4a..d95964539b 100644 --- a/providers/defltprov.c +++ b/providers/defltprov.c @@ -41,6 +41,7 @@ static const OSSL_PARAM deflt_param_types[] = { OSSL_PARAM_DEFN(OSSL_PROV_PARAM_NAME, OSSL_PARAM_UTF8_PTR, NULL, 0), OSSL_PARAM_DEFN(OSSL_PROV_PARAM_VERSION, OSSL_PARAM_UTF8_PTR, NULL, 0), OSSL_PARAM_DEFN(OSSL_PROV_PARAM_BUILDINFO, OSSL_PARAM_UTF8_PTR, NULL, 0), + OSSL_PARAM_DEFN(OSSL_PROV_PARAM_STATUS, OSSL_PARAM_INTEGER, NULL, 0), OSSL_PARAM_END }; @@ -63,7 +64,7 @@ static int deflt_get_params(void *provctx, OSSL_PARAM params[]) if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_FULL_VERSION_STR)) return 0; p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS); - if (p != NULL && !OSSL_PARAM_set_uint(p, 1)) + if (p != NULL && !OSSL_PARAM_set_int(p, ossl_prov_is_running())) return 0; return 1; } diff --git a/providers/legacyprov.c b/providers/legacyprov.c index 549906a68a..50c4479b38 100644 --- a/providers/legacyprov.c +++ b/providers/legacyprov.c @@ -15,6 +15,7 @@ #include <openssl/params.h> #include "prov/provider_ctx.h" #include "prov/implementations.h" +#include "prov/providercommon.h" /* * Forward declarations to ensure that interface functions are correctly @@ -40,6 +41,7 @@ static const OSSL_PARAM legacy_param_types[] = { OSSL_PARAM_DEFN(OSSL_PROV_PARAM_NAME, OSSL_PARAM_UTF8_PTR, NULL, 0), OSSL_PARAM_DEFN(OSSL_PROV_PARAM_VERSION, OSSL_PARAM_UTF8_PTR, NULL, 0), OSSL_PARAM_DEFN(OSSL_PROV_PARAM_BUILDINFO, OSSL_PARAM_UTF8_PTR, NULL, 0), + OSSL_PARAM_DEFN(OSSL_PROV_PARAM_STATUS, OSSL_PARAM_INTEGER, NULL, 0), OSSL_PARAM_END }; @@ -62,7 +64,7 @@ static int legacy_get_params(void *provctx, OSSL_PARAM params[]) if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_FULL_VERSION_STR)) return 0; p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS); - if (p != NULL && !OSSL_PARAM_set_uint(p, 1)) + if (p != NULL && !OSSL_PARAM_set_int(p, ossl_prov_is_running())) return 0; return 1; } diff --git a/providers/nullprov.c b/providers/nullprov.c index bdad5f15e6..537c90b78f 100644 --- a/providers/nullprov.c +++ b/providers/nullprov.c @@ -14,6 +14,7 @@ #include <openssl/core_names.h> #include <openssl/params.h> #include "prov/implementations.h" +#include "prov/providercommon.h" OSSL_provider_init_fn ossl_null_provider_init; @@ -22,6 +23,7 @@ static const OSSL_ITEM null_param_types[] = { { OSSL_PARAM_UTF8_PTR, OSSL_PROV_PARAM_NAME }, { OSSL_PARAM_UTF8_PTR, OSSL_PROV_PARAM_VERSION }, { OSSL_PARAM_UTF8_PTR, OSSL_PROV_PARAM_BUILDINFO }, + { OSSL_PARAM_INTEGER, OSSL_PROV_PARAM_STATUS }, { 0, NULL } }; @@ -30,7 +32,7 @@ static const OSSL_ITEM *null_gettable_params(const OSSL_PROVIDER *prov) return null_param_types; } -static int null_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]) +static int null_get_params(const OSSL_PROVIDER *provctx, OSSL_PARAM params[]) { OSSL_PARAM *p; @@ -43,7 +45,9 @@ static int null_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]) p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_BUILDINFO); if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_FULL_VERSION_STR)) return 0; - + p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS); + if (p != NULL && !OSSL_PARAM_set_int(p, ossl_prov_is_running())) + return 0; return 1; } diff --git a/providers/prov_running.c b/providers/prov_running.c new file mode 100644 index 0000000000..a65e4978d0 --- /dev/null +++ b/providers/prov_running.c @@ -0,0 +1,16 @@ +/* + * Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include <openssl/e_os2.h> +#include "prov/providercommon.h" + +int ossl_prov_is_running(void) +{ + return 1; +} |