]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/internal/man3/OSSL_METHOD_STORE.pod
Fix Use after free when copying cipher ctx
[thirdparty/openssl.git] / doc / internal / man3 / OSSL_METHOD_STORE.pod
CommitLineData
1bdbdaff
P
1=pod
2
3=head1 NAME
4
4ce738d0
RL
5OSSL_METHOD_STORE, ossl_method_store_new, ossl_method_store_free,
6ossl_method_store_init, ossl_method_store_cleanup,
7ossl_method_store_add, ossl_method_store_remove, ossl_method_store_fetch,
8ossl_method_store_set_global_properties,
1ad2d940 9ossl_method_store_cache_get, ossl_method_store_cache_set
1bdbdaff
P
10- implementation method store and query
11
12=head1 SYNOPSIS
13
14 #include "internal/property.h"
15
16 typedef struct ossl_method_store_st OSSL_METHOD_STORE;
17
25b25b0f 18 OSSL_METHOD_STORE *ossl_method_store_new(OPENSSL_CTX *ctx);
1bdbdaff 19 void ossl_method_store_free(OSSL_METHOD_STORE *store);
25b25b0f
MC
20 int ossl_method_store_init(OPENSSL_CTX *ctx);
21 void ossl_method_store_cleanup(OPENSSL_CTX *ctx);
c1d56231 22 int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov,
b1d40ddf
RL
23 int nid, const char *properties, void *method,
24 int (*method_up_ref)(void *),
25 void (*method_destruct)(void *));
1bdbdaff 26 int ossl_method_store_remove(OSSL_METHOD_STORE *store,
0a79572a 27 int nid, const void *method);
1bdbdaff
P
28 int ossl_method_store_fetch(OSSL_METHOD_STORE *store,
29 int nid, const char *properties,
0a79572a 30 void **method);
1bdbdaff
P
31 int ossl_method_store_set_global_properties(OSSL_METHOD_STORE *store,
32 const char *prop_query);
33 int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, int nid,
0a79572a 34 const char *prop_query, void **method);
1bdbdaff 35 int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, int nid,
0a79572a 36 const char *prop_query, void *method);
1bdbdaff
P
37
38=head1 DESCRIPTION
39
0a79572a
RL
40OSSL_METHOD_STORE stores methods that can be queried using properties and a
41numeric identity (nid).
1bdbdaff 42
0a79572a
RL
43Methods are expected to be library internal structures.
44It's left to the caller to define the exact contents.
45
46Numeric identities are expected to be an algorithm identity for the methods.
47It's left to the caller to define exactly what an algorithm is, and to allocate
48these numeric identities accordingly.
49
50The B<OSSL_METHOD_STORE> also holds an internal query cache, which is accessed
51separately (see L</Cache Functions> below).
52
53=head2 Store Functions
54
25b25b0f 55ossl_method_store_init() initialises the method store subsystem in the scope of
dfabee82 56the library context I<ctx>.
1bdbdaff
P
57
58ossl_method_store_cleanup() cleans up and shuts down the implementation method
dfabee82 59store subsystem in the scope of the library context I<ctx>.
1bdbdaff 60
25b25b0f 61ossl_method_store_new() create a new empty method store using the supplied
dfabee82 62I<ctx> to allow access to the required underlying property data.
1bdbdaff 63
dfabee82 64ossl_method_store_free() frees resources allocated to I<store>.
1bdbdaff 65
dfabee82
RL
66ossl_method_store_add() adds the I<method> constructed from an implementation in
67the provider I<prov> to the I<store> as an instance of an algorithm indicated by
68I<nid> and the property definition I<properties>, unless the I<store> already
69has a method from the same provider with the same I<nid> and I<properties>.
70If the I<method_up_ref> function is given, it's called to increment the
b1d40ddf 71reference count of the method.
dfabee82 72If the I<method_destruct> function is given, it's called when this function
b1d40ddf 73fails to add the method to the store, or later on when it is being released from
dfabee82 74the I<store>.
1bdbdaff 75
dfabee82
RL
76ossl_method_store_remove() removes the I<method> identified by I<nid> from the
77I<store>.
1bdbdaff 78
dfabee82
RL
79ossl_method_store_fetch() queries I<store> for a method identified by I<nid>
80that matches the property query I<prop_query>.
81The result, if any, is returned in I<method>.
1bdbdaff 82
dfabee82
RL
83ossl_method_store_set_global_properties() sets method I<store> wide query
84properties to I<prop_query>.
1bdbdaff 85All subsequent fetches will need to meet both these global query properties
0a79572a
RL
86and the ones passed to the ossl_method_store_free().
87
88=head2 Cache Functions
1bdbdaff 89
dfabee82
RL
90ossl_method_store_cache_get() queries the cache associated with the I<store>
91for a method identified by I<nid> that matches the property query
92I<prop_query>.
93The result, if any, is returned in I<method>.
1bdbdaff 94
dfabee82
RL
95ossl_method_store_cache_set() sets a cache entry identified by I<nid> with the
96property query I<prop_query> in the I<store>.
97Future calls to ossl_method_store_cache_get() will return the specified I<method>.
1bdbdaff
P
98
99=head1 RETURN VALUES
100
dfabee82 101ossl_method_store_new() returns a new method store object or NULL on failure.
1bdbdaff
P
102
103ossl_method_store_free(), ossl_method_store_add(),
104ossl_method_store_remove(), ossl_method_store_fetch(),
105ossl_method_store_set_global_properties(), ossl_method_store_cache_get()
106and ossl_method_store_cache_set() return B<1> on success and B<0> on error.
107
3f37050e 108ossl_method_store_free() and ossl_method_store_cleanup() do not return any value.
1bdbdaff
P
109
110=head1 HISTORY
111
4674aaf4 112This functionality was added to OpenSSL 3.0.
1bdbdaff
P
113
114=head1 COPYRIGHT
115
116Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
117Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
118
119Licensed under the Apache License 2.0 (the "License"). You may not use this
120file except in compliance with the License. You can obtain a copy in the file
121LICENSE in the source distribution or at
122L<https://www.openssl.org/source/license.html>.
123
124=cut