]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/internal/man3/ossl_method_construct.pod
Rename OPENSSL_CTX prefix to OSSL_LIB_CTX
[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 */
b4250010 14 void *(*alloc_tmp_store)(OSSL_LIB_CTX *ctx);
9e11fe0d
RL
15 /* Remove a store */
16 void (*dealloc_tmp_store)(void *store);
17 /* Get an already existing method from a store */
b4250010 18 void *(*get)(OSSL_LIB_CTX *libctx, void *store, void *data);
9e11fe0d 19 /* Store a method in a store */
b4250010 20 int (*put)(OSSL_LIB_CTX *libctx, void *store, void *method,
f7c16d48
RL
21 const OSSL_PROVIDER *prov, int operation_id, const char *name,
22 const char *propdef, void *data);
9e11fe0d 23 /* Construct a new method */
2e49c054 24 void *(*construct)(const char *name, const OSSL_DISPATCH *fns,
dc46e3dd 25 OSSL_PROVIDER *prov, void *data);
9e11fe0d
RL
26 /* Destruct a method */
27 void (*destruct)(void *method);
28 };
29 typedef struct ossl_method_construct_method OSSL_METHOD_CONSTRUCT_METHOD;
30
b4250010 31 void *ossl_method_construct(OSSL_LIB_CTX *ctx, int operation_id,
9e11fe0d
RL
32 int force_cache,
33 OSSL_METHOD_CONSTRUCT_METHOD *mcm, void *mcm_data);
34
25b25b0f 35
9e11fe0d
RL
36=head1 DESCRIPTION
37
490c8711 38All libcrypto subsystems that want to create their own methods based
9e11fe0d 39on provider dispatch tables need to do so in exactly the same way.
490c8711 40ossl_method_construct() does this while leaving it to the subsystems
9e11fe0d
RL
41to define more precisely how the methods are created, stored, etc.
42
2ccb1b4e
RL
43It's important to keep in mind that a method is identified by three things:
44
45=over 4
46
47=item The operation identity
48
49=item The name of the algorithm
50
51=item The properties associated with the algorithm implementation
52
53=back
54
9e11fe0d
RL
55=head2 Functions
56
57ossl_method_construct() creates a method by asking all available
f7c16d48 58providers for a dispatch table given an I<operation_id>, and then
490c8711 59calling the appropriate functions given by the subsystem specific
f7c16d48
RL
60method creator through I<mcm> and the data in I<mcm_data> (which is
61passed by ossl_method_construct()).
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
77=item alloc_tmp_store()
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
84=item dealloc_tmp_store()
85
86Remove a temporary store.
87
88=item get()
89
2e49c054 90Look up an already existing method from a store by name.
9e11fe0d 91
b4d3f203 92The store may be given with I<store>.
490c8711 93NULL is a valid value and means that a subsystem default store
9e11fe0d 94must be used.
b4d3f203 95This default store should be stored in the library context I<libctx>.
9e11fe0d 96
f7c16d48
RL
97The method to be looked up should be identified with data found in I<data>
98(which is the I<mcm_data> that was passed to ossl_construct_method()).
99In other words, the ossl_method_construct() caller is entirely responsible
100for ensuring the necesssary data is made available.
9e11fe0d 101
a3830831
RL
102This function is expected to increment the method's reference count.
103
9e11fe0d
RL
104=item put()
105
b4d3f203 106Places the I<method> created by the construct() function (see below)
9e11fe0d
RL
107in a store.
108
b4d3f203 109The store may be given with I<store>.
490c8711 110NULL is a valid value and means that a subsystem default store
9e11fe0d 111must be used.
b4d3f203 112This default store should be stored in the library context I<libctx>.
9e11fe0d 113
b4d3f203
RL
114The method should be associated with the given I<operation_id>,
115I<name> and property definition I<propdef> as well as any
116identification data given through I<data> (which is the I<mcm_data>
2ccb1b4e 117that was passed to ossl_construct_method()).
9e11fe0d 118
b4d3f203 119This function is expected to increment the I<method>'s reference count.
a3830831 120
9e11fe0d
RL
121=item construct()
122
490c8711 123Constructs a subsystem method for the given I<name> and the given
b4d3f203 124dispatch table I<fns>.
9e11fe0d 125
b4d3f203 126The associated provider object I<prov> is passed as well, to make
490c8711 127it possible for the subsystem constructor to keep a reference, which
9e11fe0d
RL
128is recommended.
129If such a reference is kept, the I<provider object> reference counter
7c95390e 130must be incremented, using ossl_provider_up_ref().
9e11fe0d 131
a3830831
RL
132This function is expected to set the method's reference count to 1.
133
c2969ff6 134=item destruct()
9e11fe0d 135
b4d3f203 136Decrement the I<method>'s reference count, and destruct it when
a3830831 137the reference count reaches zero.
9e11fe0d
RL
138
139=back
140
141=head1 RETURN VALUES
142
143ossl_method_construct() returns a constructed method on success, or
dfabee82 144NULL on error.
9e11fe0d
RL
145
146=head1 HISTORY
147
2e49c054 148This functionality was added to OpenSSL 3.0.
9e11fe0d
RL
149
150=head1 COPYRIGHT
151
0f84cbc3 152Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
9e11fe0d
RL
153
154Licensed under the Apache License 2.0 (the "License"). You may not use this
155file except in compliance with the License. You can obtain a copy in the file
156LICENSE in the source distribution or at
157L<https://www.openssl.org/source/license.html>.
158
159=cut