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