From: Pauli Date: Mon, 7 Sep 2020 01:58:03 +0000 (+1000) Subject: provider: add an 'is_running' call to all providers. X-Git-Tag: openssl-3.0.0-alpha7~291 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eab7b4240dc87e27d8b12b5af23d3cf20dd06f55;p=thirdparty%2Fopenssl.git provider: add an 'is_running' call to all providers. It can be accessed (read only) via the status parameter. Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/12801) --- diff --git a/providers/baseprov.c b/providers/baseprov.c index e9502f68cd2..0904e463334 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 8d82d3f9114..f2e0d433c95 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 f39d2e313f9..f6d27dababd 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 371d942f4a7..d95964539bd 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 549906a68a1..50c4479b382 100644 --- a/providers/legacyprov.c +++ b/providers/legacyprov.c @@ -15,6 +15,7 @@ #include #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 bdad5f15e64..537c90b78f6 100644 --- a/providers/nullprov.c +++ b/providers/nullprov.c @@ -14,6 +14,7 @@ #include #include #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 00000000000..a65e4978d07 --- /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 +#include "prov/providercommon.h" + +int ossl_prov_is_running(void) +{ + return 1; +}