summaryrefslogtreecommitdiffstats
path: root/include/internal/provider.h
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2019-01-20 13:14:58 +0100
committerRichard Levitte <levitte@openssl.org>2019-03-11 20:40:13 +0100
commit4c2883a9bf59c5ee31e8e2e101b3894a16c06950 (patch)
tree5a46bea7ea5815cfa540b0ca81d2a063c9a27aea /include/internal/provider.h
parent3f4e8d6604842db4f416d029e9bbeddf90976c00 (diff)
Replumbing: Add the Provider Object, type OSSL_PROVIDER
The OSSL_PROVIDER is the core object involved in loading a provider module, initialize a provider and do the initial communication of provider wide and core wide dispatch tables. Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/8287)
Diffstat (limited to 'include/internal/provider.h')
-rw-r--r--include/internal/provider.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/include/internal/provider.h b/include/internal/provider.h
new file mode 100644
index 0000000000..44d1d70461
--- /dev/null
+++ b/include/internal/provider.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2019 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
+ */
+
+#ifndef OSSL_INTERNAL_PROVIDER_H
+# define OSSL_INTERNAL_PROVIDER_H
+
+# include <openssl/core.h>
+# include "internal/dso.h"
+# include "internal/symhacks.h"
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/*
+ * namespaces:
+ *
+ * ossl_provider_ Provider Object internal API
+ * OSSL_PROVIDER Provider Object
+ */
+
+/* Provider Object finder, constructor and destructor */
+OSSL_PROVIDER *ossl_provider_find(OPENSSL_CTX *libctx, const char *name);
+OSSL_PROVIDER *ossl_provider_new(OPENSSL_CTX *libctx, const char *name,
+ OSSL_provider_init_fn *init_function);
+int ossl_provider_upref(OSSL_PROVIDER *prov);
+void ossl_provider_free(OSSL_PROVIDER *prov);
+
+/* Setters */
+int ossl_provider_add_module_location(OSSL_PROVIDER *prov, const char *loc);
+
+/*
+ * Activate the Provider
+ * If the Provider is a module, the module will be loaded
+ * Inactivation is done by freeing the Provider
+ */
+int ossl_provider_activate(OSSL_PROVIDER *prov);
+
+/* Getters for other library functions */
+const char *ossl_provider_name(OSSL_PROVIDER *prov);
+const DSO *ossl_provider_dso(OSSL_PROVIDER *prov);
+const char *ossl_provider_module_name(OSSL_PROVIDER *prov);
+const char *ossl_provider_module_path(OSSL_PROVIDER *prov);
+
+/* Thin wrappers around calls to the provider */
+void ossl_provider_teardown(const OSSL_PROVIDER *prov);
+const OSSL_ITEM *ossl_provider_get_param_types(const OSSL_PROVIDER *prov);
+int ossl_provider_get_params(const OSSL_PROVIDER *prov,
+ const OSSL_PARAM params[]);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif