summaryrefslogtreecommitdiffstats
path: root/providers
diff options
context:
space:
mode:
authorPauli <paul.dale@oracle.com>2020-09-07 11:58:03 +1000
committerPauli <paul.dale@oracle.com>2020-09-12 16:46:20 +1000
commiteab7b4240dc87e27d8b12b5af23d3cf20dd06f55 (patch)
tree6cf21b1522dd15ab0b961d5c4a0250d2bc354b09 /providers
parent5e8cd0a4f48f06df2542e7c74dcbb4310bce7c4c (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)
Diffstat (limited to 'providers')
-rw-r--r--providers/baseprov.c4
-rw-r--r--providers/build.info4
-rw-r--r--providers/common/include/prov/providercommon.h2
-rw-r--r--providers/defltprov.c3
-rw-r--r--providers/legacyprov.c4
-rw-r--r--providers/nullprov.c8
-rw-r--r--providers/prov_running.c16
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;
+}