]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/internal/man3/ossl_method_construct.pod
Fix new typos found by codespell
[thirdparty/openssl.git] / doc / internal / man3 / ossl_method_construct.pod
CommitLineData
9e11fe0d
RL
1=pod
2
3=head1 NAME
4
5OSSL_METHOD_CONSTRUCT_METHOD, ossl_method_construct
6- generic method constructor
7
8=head1 SYNOPSIS
9
10 #include "internal/core.h"
11
12 struct ossl_method_construct_method_st {
48b3ad05
PH
13 /* Get a temporary store */
14 void *(*get_tmp_store)(void *data);
9e11fe0d 15 /* Get an already existing method from a store */
dc010ca6 16 void *(*get)(void *store, const OSSL_PROVIDER *prov, void *data);
9e11fe0d 17 /* Store a method in a store */
dc010ca6
RL
18 int (*put)(void *store, void *method, const OSSL_PROVIDER *prov,
19 const char *name, const char *propdef, void *data);
9e11fe0d 20 /* Construct a new method */
dc010ca6
RL
21 void *(*construct)(const OSSL_ALGORITHM *algodef, OSSL_PROVIDER *prov,
22 void *data);
9e11fe0d 23 /* Destruct a method */
dc010ca6 24 void (*destruct)(void *method, void *data);
9e11fe0d
RL
25 };
26 typedef struct ossl_method_construct_method OSSL_METHOD_CONSTRUCT_METHOD;
27
b4250010 28 void *ossl_method_construct(OSSL_LIB_CTX *ctx, int operation_id,
cfce50f7 29 OSSL_PROVIDER *prov, int force_cache,
9e11fe0d
RL
30 OSSL_METHOD_CONSTRUCT_METHOD *mcm, void *mcm_data);
31
25b25b0f 32
9e11fe0d
RL
33=head1 DESCRIPTION
34
490c8711 35All libcrypto subsystems that want to create their own methods based
9e11fe0d 36on provider dispatch tables need to do so in exactly the same way.
490c8711 37ossl_method_construct() does this while leaving it to the subsystems
9e11fe0d
RL
38to define more precisely how the methods are created, stored, etc.
39
2ccb1b4e
RL
40It's important to keep in mind that a method is identified by three things:
41
42=over 4
43
44=item The operation identity
45
46=item The name of the algorithm
47
48=item The properties associated with the algorithm implementation
49
50=back
51
9e11fe0d
RL
52=head2 Functions
53
54ossl_method_construct() creates a method by asking all available
f7c16d48 55providers for a dispatch table given an I<operation_id>, and then
490c8711 56calling the appropriate functions given by the subsystem specific
f7c16d48
RL
57method creator through I<mcm> and the data in I<mcm_data> (which is
58passed by ossl_method_construct()).
cfce50f7
RL
59If I<prov> is not NULL, only that provider is considered, which is
60useful in the case a method must be found in that particular
61provider.
9e11fe0d 62
490c8711 63This function assumes that the subsystem method creator implements
a3830831 64reference counting and acts accordingly (i.e. it will call the
490c8711 65subsystem destruct() method to decrement the reference count when
a3830831
RL
66appropriate).
67
9e11fe0d
RL
68=head2 Structures
69
490c8711 70A central part of constructing a subsystem specific method is to give
9e11fe0d 71ossl_method_construct a set of functions, all in the
b4d3f203 72B<OSSL_METHOD_CONSTRUCT_METHOD> structure, which holds the following
9e11fe0d
RL
73function pointers:
74
75=over 4
76
dc010ca6 77=item get_tmp_store()
9e11fe0d 78
b4d3f203 79Create a temporary method store in the scope of the library context I<ctx>.
9e11fe0d
RL
80This store is used to temporarily store methods for easier lookup, for
81when the provider doesn't want its dispatch table stored in a longer
82term cache.
83
9e11fe0d
RL
84=item get()
85
2e49c054 86Look up an already existing method from a store by name.
9e11fe0d 87
b4d3f203 88The store may be given with I<store>.
490c8711 89NULL is a valid value and means that a subsystem default store
9e11fe0d 90must be used.
b4d3f203 91This default store should be stored in the library context I<libctx>.
9e11fe0d 92
f7c16d48
RL
93The method to be looked up should be identified with data found in I<data>
94(which is the I<mcm_data> that was passed to ossl_construct_method()).
95In other words, the ossl_method_construct() caller is entirely responsible
164a541b 96for ensuring the necessary data is made available.
9e11fe0d 97
dc010ca6
RL
98Optionally, I<prov> may be given as a search criterion, to narrow down the
99search of a method belonging to just one provider.
100
101This function is expected to increment the resulting method's reference count.
a3830831 102
9e11fe0d
RL
103=item put()
104
b4d3f203 105Places the I<method> created by the construct() function (see below)
9e11fe0d
RL
106in a store.
107
b4d3f203 108The store may be given with I<store>.
490c8711 109NULL is a valid value and means that a subsystem default store
9e11fe0d 110must be used.
b4d3f203 111This default store should be stored in the library context I<libctx>.
9e11fe0d 112
dc010ca6 113The method should be associated with the given provider I<prov>,
b4d3f203
RL
114I<name> and property definition I<propdef> as well as any
115identification data given through I<data> (which is the I<mcm_data>
2ccb1b4e 116that was passed to ossl_construct_method()).
9e11fe0d 117
b4d3f203 118This function is expected to increment the I<method>'s reference count.
a3830831 119
9e11fe0d
RL
120=item construct()
121
490c8711 122Constructs a subsystem method for the given I<name> and the given
b4d3f203 123dispatch table I<fns>.
9e11fe0d 124
b4d3f203 125The associated provider object I<prov> is passed as well, to make
490c8711 126it possible for the subsystem constructor to keep a reference, which
9e11fe0d
RL
127is recommended.
128If such a reference is kept, the I<provider object> reference counter
7c95390e 129must be incremented, using ossl_provider_up_ref().
9e11fe0d 130
a3830831
RL
131This function is expected to set the method's reference count to 1.
132
c2969ff6 133=item destruct()
9e11fe0d 134
b4d3f203 135Decrement the I<method>'s reference count, and destruct it when
a3830831 136the reference count reaches zero.
9e11fe0d
RL
137
138=back
139
140=head1 RETURN VALUES
141
142ossl_method_construct() returns a constructed method on success, or
dfabee82 143NULL on error.
9e11fe0d
RL
144
145=head1 HISTORY
146
2e49c054 147This functionality was added to OpenSSL 3.0.
9e11fe0d
RL
148
149=head1 COPYRIGHT
150
a8d9bd81 151Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
9e11fe0d
RL
152
153Licensed under the Apache License 2.0 (the "License"). You may not use this
154file except in compliance with the License. You can obtain a copy in the file
155LICENSE in the source distribution or at
156L<https://www.openssl.org/source/license.html>.
157
158=cut