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