]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/OSSL_ENCODER_CTX.pod
Update copyright year
[thirdparty/openssl.git] / doc / man3 / OSSL_ENCODER_CTX.pod
CommitLineData
ece9304c
RL
1=pod
2
3=head1 NAME
4
5OSSL_ENCODER_CTX,
6OSSL_ENCODER_CTX_new,
ece9304c
RL
7OSSL_ENCODER_settable_ctx_params,
8OSSL_ENCODER_CTX_set_params,
b8975c68
RL
9OSSL_ENCODER_CTX_free,
10OSSL_ENCODER_CTX_set_output_type,
11OSSL_ENCODER_CTX_set_selection,
12OSSL_ENCODER_CTX_add_encoder,
13OSSL_ENCODER_CTX_add_extra,
14OSSL_ENCODER_CTX_get_num_encoders,
15OSSL_ENCODER_INSTANCE,
16OSSL_ENCODER_INSTANCE_get_encoder,
17OSSL_ENCODER_INSTANCE_get_encoder_ctx,
18OSSL_ENCODER_INSTANCE_get_input_type,
19OSSL_ENCODER_INSTANCE_get_output_type,
20OSSL_ENCODER_CONSTRUCT,
21OSSL_ENCODER_CLEANUP,
22OSSL_ENCODER_CTX_set_construct,
23OSSL_ENCODER_CTX_set_construct_data,
24OSSL_ENCODER_CTX_set_cleanup
ece9304c
RL
25- Encoder context routines
26
27=head1 SYNOPSIS
28
29 #include <openssl/encoder.h>
30
31 typedef struct ossl_encoder_ctx_st OSSL_ENCODER_CTX;
32
b8975c68 33 OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new();
ece9304c
RL
34 const OSSL_PARAM *OSSL_ENCODER_settable_ctx_params(OSSL_ENCODER *encoder);
35 int OSSL_ENCODER_CTX_set_params(OSSL_ENCODER_CTX *ctx,
36 const OSSL_PARAM params[]);
37 void OSSL_ENCODER_CTX_free(OSSL_ENCODER_CTX *ctx);
38
b8975c68
RL
39 int OSSL_ENCODER_CTX_set_output_type(OSSL_ENCODER_CTX *ctx,
40 const char *output_type);
41 int OSSL_ENCODER_CTX_set_selection(OSSL_ENCODER_CTX *ctx, int selection);
42
43 int OSSL_ENCODER_CTX_add_encoder(OSSL_ENCODER_CTX *ctx, OSSL_ENCODER *encoder);
44 int OSSL_ENCODER_CTX_add_extra(OSSL_ENCODER_CTX *ctx,
b4250010 45 OSSL_LIB_CTX *libctx, const char *propq);
b8975c68
RL
46 int OSSL_ENCODER_CTX_get_num_encoders(OSSL_ENCODER_CTX *ctx);
47
48 typedef struct ossl_encoder_instance_st OSSL_ENCODER_INSTANCE;
49 OSSL_ENCODER *
50 OSSL_ENCODER_INSTANCE_get_encoder(OSSL_ENCODER_INSTANCE *encoder_inst);
51 void *
52 OSSL_ENCODER_INSTANCE_get_encoder_ctx(OSSL_ENCODER_INSTANCE *encoder_inst);
53 const char *
54 OSSL_ENCODER_INSTANCE_get_input_type(OSSL_ENCODER_INSTANCE *encoder_inst);
55 const char *
56 OSSL_ENCODER_INSTANCE_get_output_type(OSSL_ENCODER_INSTANCE *encoder_inst);
57
58 typedef const void *OSSL_ENCODER_CONSTRUCT(OSSL_ENCODER_INSTANCE *encoder_inst,
59 void *construct_data);
60 typedef void OSSL_ENCODER_CLEANUP(void *construct_data);
61
62 int OSSL_ENCODER_CTX_set_construct(OSSL_ENCODER_CTX *ctx,
63 OSSL_ENCODER_CONSTRUCT *construct);
64 int OSSL_ENCODER_CTX_set_construct_data(OSSL_ENCODER_CTX *ctx,
65 void *construct_data);
66 int OSSL_ENCODER_CTX_set_cleanup(OSSL_ENCODER_CTX *ctx,
67 OSSL_ENCODER_CLEANUP *cleanup);
68
ece9304c
RL
69=head1 DESCRIPTION
70
b8975c68
RL
71Encoding an input object to the desired encoding may be done with a chain of
72encoder implementations, which means that the output from one encoder may be
73the input for the next in the chain. The B<OSSL_ENCODER_CTX> holds all the
74data about these encoders. This allows having generic format encoders such
75as DER to PEM, as well as more specialized encoders like RSA to DER.
ece9304c 76
b8975c68
RL
77The final output type must be given, and a chain of encoders must end with
78an implementation that produces that output type.
ece9304c 79
b8975c68
RL
80At the beginning of the encoding process, a contructor provided by the
81caller is called to ensure that there is an appropriate provider-side object
82to start with.
83The constructor is set with OSSL_ENCODER_CTX_set_construct().
ece9304c 84
b8975c68
RL
85B<OSSL_ENCODER_INSTANCE> is an opaque structure that contains data about the
86encoder that is going to be used, and that may be useful for the
87constructor. There are some functions to extract data from this type,
88described in L</Constructor> below.
ece9304c 89
b8975c68 90=head2 Functions
ece9304c 91
b8975c68 92OSSL_ENCODER_CTX_new() creates a B<OSSL_ENCODER_CTX>.
ece9304c
RL
93
94OSSL_ENCODER_settable_ctx_params() returns an L<OSSL_PARAM(3)>
95array of parameter descriptors.
96
97OSSL_ENCODER_CTX_set_params() attempts to set parameters specified
98with an L<OSSL_PARAM(3)> array I<params>. Parameters that the
99implementation doesn't recognise should be ignored.
100
101OSSL_ENCODER_CTX_free() frees the given context I<ctx>.
102
b8975c68
RL
103OSSL_ENCODER_CTX_add_encoder() populates the B<OSSL_ENCODER_CTX>
104I<ctx> with a encoder, to be used to encode an input object.
105
106OSSL_ENCODER_CTX_add_extra() finds encoders that further encodes output
107from already added encoders, and adds them as well. This is used to build
108encoder chains.
109
110OSSL_ENCODER_CTX_set_output_type() sets the ending output type. This must
111be specified, and determines if a complete encoder chain is available.
112
113OSSL_ENCODER_CTX_num_encoders() gets the number of encoders currently added
114to the context I<ctx>.
115
116OSSL_ENCODER_CTX_set_construct() sets the constructor I<construct>.
117
118OSSL_ENCODER_CTX_set_construct_data() sets the constructor data that is
119passed to the constructor every time it's called.
120
121OSSL_ENCODER_CTX_set_cleanup() sets the constructor data I<cleanup>
122function. This is called by L<OSSL_ENCODER_CTX_free(3)>.
123
124=head2 Constructor
125
126A B<OSSL_ENCODER_CONSTRUCT> gets the following arguments:
127
128=over 4
129
130=item I<encoder_inst>
131
132The B<OSSL_ENCODER_INSTANCE> for the encoder from which the constructor gets
133its data.
134
135=item I<construct_data>
136
137The pointer that was set with OSSL_ENCODE_CTX_set_construct_data().
138
139=back
140
141The constructor is expected to return a valid (non-NULL) pointer to a
142provider-native object that can be used as first input of an encoding chain,
143or NULL to indicate that an error has occured.
144
145These utility functions may be used by a constructor:
146
147OSSL_ENCODER_INSTANCE_encoder() can be used to get the encoder method from a
148encoder instance I<encoder_inst>.
149
150OSSL_ENCODER_INSTANCE_encoder_ctx() can be used to get the encoder method's
151provider context from a encoder instance I<encoder_inst>.
152
153OSSL_ENCODER_INSTANCE_input_type() can be used to get the input type for
154encoder method from a encoder instance I<encoder_inst>. This may be NULL.
155
156OSSL_ENCODER_INSTANCE_output_type() can be used to get the output type for
157encoder method from a encoder instance I<encoder_inst>. This will never be
158NULL.
159
ece9304c
RL
160=head1 RETURN VALUES
161
b8975c68
RL
162OSSL_ENCODER_CTX_new() returns a pointer to a B<OSSL_ENCODER_CTX>, or NULL
163if the context structure couldn't be allocated.
ece9304c 164
b8975c68
RL
165OSSL_ENCODER_settable_ctx_params() returns an L<OSSL_PARAM(3)> array, or
166NULL if none is available.
ece9304c 167
b8975c68
RL
168OSSL_ENCODER_CTX_set_params() returns 1 if all recognised parameters were
169valid, or 0 if one of them was invalid or caused some other failure in the
170implementation.
171
172OSSL_DECODER_CTX_add_decoder(), OSSL_DECODER_CTX_add_extra(),
173OSSL_DECODER_CTX_set_construct(), OSSL_DECODER_CTX_set_construct_data() and
174OSSL_DECODER_CTX_set_cleanup() return 1 on success, or 0 on failure.
175
176OSSL_DECODER_CTX_num_decoders() returns the current number of decoders. It
177returns 0 if I<ctx> is NULL.
178
179OSSL_DECODER_INSTANCE_decoder() returns an B<OSSL_DECODER> pointer on
180success, or NULL on failure.
181
182OSSL_DECODER_INSTANCE_decoder_ctx() returns a provider context pointer on
183success, or NULL on failure.
184
185OSSL_ENCODER_INSTANCE_input_type() returns a string with the name of the
186input type, if relevant. NULL is a valid returned value.
ece9304c 187
b8975c68
RL
188OSSL_ENCODER_INSTANCE_output_type() returns a string with the name of the
189output type.
ece9304c
RL
190
191=head1 SEE ALSO
192
193L<provider(7)>, L<OSSL_ENCODER(3)>
194
195=head1 HISTORY
196
197The functions described here were added in OpenSSL 3.0.
198
199=head1 COPYRIGHT
200
eec0ad10 201Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
ece9304c
RL
202
203Licensed under the Apache License 2.0 (the "License"). You may not use
204this file except in compliance with the License. You can obtain a copy
205in the file LICENSE in the source distribution or at
206L<https://www.openssl.org/source/license.html>.
207
208=cut