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