1 | /*
|
---|
2 | * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved.
|
---|
3 | *
|
---|
4 | * Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
5 | * this file except in compliance with the License. You can obtain a copy
|
---|
6 | * in the file LICENSE in the source distribution or at
|
---|
7 | * https://www.openssl.org/source/license.html
|
---|
8 | */
|
---|
9 |
|
---|
10 | #ifndef OSSL_INTERNAL_PROVIDER_H
|
---|
11 | # define OSSL_INTERNAL_PROVIDER_H
|
---|
12 | # ifndef RT_WITHOUT_PRAGMA_ONCE /* VBOX */
|
---|
13 | # pragma once
|
---|
14 | # endif /* VBOX */
|
---|
15 |
|
---|
16 | # include <openssl/core.h>
|
---|
17 | # include <openssl/core_dispatch.h>
|
---|
18 | # include "internal/dso.h"
|
---|
19 | # include "internal/symhacks.h"
|
---|
20 |
|
---|
21 | # ifdef __cplusplus
|
---|
22 | extern "C" {
|
---|
23 | # endif
|
---|
24 |
|
---|
25 | /*
|
---|
26 | * namespaces:
|
---|
27 | *
|
---|
28 | * ossl_provider_ Provider Object internal API
|
---|
29 | * OSSL_PROVIDER Provider Object
|
---|
30 | */
|
---|
31 |
|
---|
32 | /* Provider Object finder, constructor and destructor */
|
---|
33 | OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name,
|
---|
34 | int noconfig);
|
---|
35 | OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name,
|
---|
36 | OSSL_provider_init_fn *init_function,
|
---|
37 | int noconfig);
|
---|
38 | int ossl_provider_up_ref(OSSL_PROVIDER *prov);
|
---|
39 | void ossl_provider_free(OSSL_PROVIDER *prov);
|
---|
40 |
|
---|
41 | /* Setters */
|
---|
42 | int ossl_provider_set_module_path(OSSL_PROVIDER *prov, const char *module_path);
|
---|
43 | int ossl_provider_add_parameter(OSSL_PROVIDER *prov, const char *name,
|
---|
44 | const char *value);
|
---|
45 |
|
---|
46 | int ossl_provider_is_child(const OSSL_PROVIDER *prov);
|
---|
47 | int ossl_provider_set_child(OSSL_PROVIDER *prov, const OSSL_CORE_HANDLE *handle);
|
---|
48 | const OSSL_CORE_HANDLE *ossl_provider_get_parent(OSSL_PROVIDER *prov);
|
---|
49 | int ossl_provider_up_ref_parent(OSSL_PROVIDER *prov, int activate);
|
---|
50 | int ossl_provider_free_parent(OSSL_PROVIDER *prov, int deactivate);
|
---|
51 | int ossl_provider_default_props_update(OSSL_LIB_CTX *libctx, const char *props);
|
---|
52 |
|
---|
53 | /* Disable fallback loading */
|
---|
54 | int ossl_provider_disable_fallback_loading(OSSL_LIB_CTX *libctx);
|
---|
55 |
|
---|
56 | /*
|
---|
57 | * Activate the Provider
|
---|
58 | * If the Provider is a module, the module will be loaded
|
---|
59 | */
|
---|
60 | int ossl_provider_activate(OSSL_PROVIDER *prov, int upcalls, int aschild);
|
---|
61 | int ossl_provider_deactivate(OSSL_PROVIDER *prov, int removechildren);
|
---|
62 | int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov,
|
---|
63 | int retain_fallbacks);
|
---|
64 |
|
---|
65 | /* Return pointer to the provider's context */
|
---|
66 | void *ossl_provider_ctx(const OSSL_PROVIDER *prov);
|
---|
67 |
|
---|
68 | /* Iterate over all loaded providers */
|
---|
69 | int ossl_provider_doall_activated(OSSL_LIB_CTX *,
|
---|
70 | int (*cb)(OSSL_PROVIDER *provider,
|
---|
71 | void *cbdata),
|
---|
72 | void *cbdata);
|
---|
73 |
|
---|
74 | /* Getters for other library functions */
|
---|
75 | const char *ossl_provider_name(const OSSL_PROVIDER *prov);
|
---|
76 | const DSO *ossl_provider_dso(const OSSL_PROVIDER *prov);
|
---|
77 | const char *ossl_provider_module_name(const OSSL_PROVIDER *prov);
|
---|
78 | const char *ossl_provider_module_path(const OSSL_PROVIDER *prov);
|
---|
79 | void *ossl_provider_prov_ctx(const OSSL_PROVIDER *prov);
|
---|
80 | const OSSL_DISPATCH *ossl_provider_get0_dispatch(const OSSL_PROVIDER *prov);
|
---|
81 | OSSL_LIB_CTX *ossl_provider_libctx(const OSSL_PROVIDER *prov);
|
---|
82 |
|
---|
83 | /* Thin wrappers around calls to the provider */
|
---|
84 | void ossl_provider_teardown(const OSSL_PROVIDER *prov);
|
---|
85 | const OSSL_PARAM *ossl_provider_gettable_params(const OSSL_PROVIDER *prov);
|
---|
86 | int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]);
|
---|
87 | int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov,
|
---|
88 | const char *capability,
|
---|
89 | OSSL_CALLBACK *cb,
|
---|
90 | void *arg);
|
---|
91 | int ossl_provider_self_test(const OSSL_PROVIDER *prov);
|
---|
92 | const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov,
|
---|
93 | int operation_id,
|
---|
94 | int *no_cache);
|
---|
95 | void ossl_provider_unquery_operation(const OSSL_PROVIDER *prov,
|
---|
96 | int operation_id,
|
---|
97 | const OSSL_ALGORITHM *algs);
|
---|
98 |
|
---|
99 | /*
|
---|
100 | * Cache of bits to see if we already added methods for an operation in
|
---|
101 | * the "permanent" method store.
|
---|
102 | * They should never be called for temporary method stores!
|
---|
103 | */
|
---|
104 | int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum);
|
---|
105 | int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum,
|
---|
106 | int *result);
|
---|
107 |
|
---|
108 | /* Configuration */
|
---|
109 | void ossl_provider_add_conf_module(void);
|
---|
110 |
|
---|
111 | /* Child providers */
|
---|
112 | int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx,
|
---|
113 | const OSSL_CORE_HANDLE *handle,
|
---|
114 | const OSSL_DISPATCH *in);
|
---|
115 | void ossl_provider_deinit_child(OSSL_LIB_CTX *ctx);
|
---|
116 |
|
---|
117 | # ifdef __cplusplus
|
---|
118 | }
|
---|
119 | # endif
|
---|
120 |
|
---|
121 | #endif
|
---|