xref: /freebsd/crypto/openssl/doc/man7/EVP_PKEY-ML-KEM.pod (revision e7be843b4a162e68651d3911f0357ed464915629)
1*e7be843bSPierre Pronchery=pod
2*e7be843bSPierre Pronchery
3*e7be843bSPierre Pronchery=head1 NAME
4*e7be843bSPierre Pronchery
5*e7be843bSPierre ProncheryEVP_PKEY-ML-KEM,
6*e7be843bSPierre ProncheryEVP_KEYMGMT-ML-KEM,
7*e7be843bSPierre ProncheryEVP_PKEY-ML-KEM-512,
8*e7be843bSPierre ProncheryEVP_PKEY-ML-KEM-768,
9*e7be843bSPierre ProncheryEVP_PKEY-ML-KEM-1024,
10*e7be843bSPierre ProncheryEVP_KEYMGMT-ML-KEM-512,
11*e7be843bSPierre ProncheryEVP_KEYMGMT-ML-KEM-768,
12*e7be843bSPierre ProncheryEVP_KEYMGMT-ML-KEM-1024
13*e7be843bSPierre Pronchery- ML-KEM keytype and algorithm support
14*e7be843bSPierre Pronchery
15*e7be843bSPierre Pronchery=head1 DESCRIPTION
16*e7be843bSPierre Pronchery
17*e7be843bSPierre ProncheryThe B<ML-KEM-512>, B<ML-KEM-768>, and B<ML-KEM-1024> keytypes are implemented
18*e7be843bSPierre Proncheryin OpenSSL's default and FIPS providers.
19*e7be843bSPierre Pronchery
20*e7be843bSPierre Pronchery=head2 Keygen Parameters
21*e7be843bSPierre Pronchery
22*e7be843bSPierre ProncheryNo mandatory parameters are required for generating a key pair.
23*e7be843bSPierre ProncheryTo set explicit parameters, use EVP_PKEY_CTX_set_params() after calling
24*e7be843bSPierre ProncheryEVP_PKEY_keygen_init().
25*e7be843bSPierre Pronchery
26*e7be843bSPierre Pronchery=over 4
27*e7be843bSPierre Pronchery
28*e7be843bSPierre Pronchery=item "seed" (B<OSSL_PKEY_PARAM_ML_KEM_SEED>) <octet string>
29*e7be843bSPierre Pronchery
30*e7be843bSPierre ProncheryInternally, ML-KEM generates keys using a 64-byte random value (seed), which is
31*e7be843bSPierre Proncherythe concatenation of the 32-byte I<d> and I<z> parameters described in FIPS 203.
32*e7be843bSPierre ProncheryThis optional parameter can be used to set a pre-determined seed prior to
33*e7be843bSPierre Proncherykeypair generation.
34*e7be843bSPierre Pronchery
35*e7be843bSPierre ProncheryGenerated keys default to retaining the seed used.
36*e7be843bSPierre ProncheryThe seed is also by default retained when keys are loaded from B<PKCS#8> files
37*e7be843bSPierre Proncheryin the seed format.
38*e7be843bSPierre ProncheryWhen available, the seed parameter is also used during key export and import,
39*e7be843bSPierre Proncherywith keys (by default) regenerated from the seed even when also provided on import.
40*e7be843bSPierre ProncherySee L</Provider configuration parameters> below for related controls.
41*e7be843bSPierre Pronchery
42*e7be843bSPierre ProncheryWhen the seed is retained, it is also available as a B<gettable> parameter,
43*e7be843bSPierre Proncheryand private key output to B<PKCS#8> files will by default include the seed.
44*e7be843bSPierre ProncheryWhen the seed was not initially known, or was not retained, B<PKCS#8> private
45*e7be843bSPierre Proncherykey files will contain only the private key in FIPS 203 C<dk> format.
46*e7be843bSPierre Pronchery
47*e7be843bSPierre Pronchery=item "properties" (B<OSSL_PKEY_PARAM_PROPERTIES>) <UTF8 string>
48*e7be843bSPierre Pronchery
49*e7be843bSPierre ProncherySets properties to be used when fetching algorithm implementations used for
50*e7be843bSPierre ProncheryML-KEM hashing operations.
51*e7be843bSPierre Pronchery
52*e7be843bSPierre ProncheryUse L<EVP_PKEY_CTX_set_params(3)> after calling L<EVP_PKEY_keygen_init(3)>.
53*e7be843bSPierre Pronchery
54*e7be843bSPierre Pronchery=back
55*e7be843bSPierre Pronchery
56*e7be843bSPierre Pronchery=head2 Common parameters
57*e7be843bSPierre Pronchery
58*e7be843bSPierre ProncheryIn addition to the common parameters that all keytypes should support (see
59*e7be843bSPierre ProncheryL<provider-keymgmt(7)/Common Information Parameters>), B<ML-KEM> keys
60*e7be843bSPierre Proncherykeys support the parameters listed below.
61*e7be843bSPierre ProncheryThese are gettable using
62*e7be843bSPierre ProncheryL<EVP_PKEY_get_octet_string_param(3)> or L<EVP_PKEY_get_params(3)>.
63*e7be843bSPierre ProncheryThey can be initialised via L<EVP_PKEY_fromdata(3)>, and are returned by
64*e7be843bSPierre ProncheryL<EVP_PKEY_todata(3)> given a suitable I<selection>.
65*e7be843bSPierre ProncheryOnce a public or private key is configured, it can no longer be modified,
66*e7be843bSPierre Proncherynor can another key component be added.
67*e7be843bSPierre Pronchery
68*e7be843bSPierre Pronchery=over 4
69*e7be843bSPierre Pronchery
70*e7be843bSPierre Pronchery=item "pub" (B<OSSL_PKEY_PARAM_PUB_KEY>) <octet string>
71*e7be843bSPierre Pronchery
72*e7be843bSPierre ProncheryThe public key value.
73*e7be843bSPierre Pronchery
74*e7be843bSPierre ProncheryThis parameter is used when importing or exporting the public key value with
75*e7be843bSPierre Proncherythe EVP_PKEY_fromdata() and EVP_PKEY_todata() functions.
76*e7be843bSPierre ProncheryThe key length and content is that of the FIPS 203 (Algorithm 16:
77*e7be843bSPierre ProncheryB<ML-KEM.KeyGen_internal>) B<ek> public key for the given ML-KEM variant.
78*e7be843bSPierre ProncheryInitial import aside, this parameter is otherwise only gettable.
79*e7be843bSPierre Pronchery
80*e7be843bSPierre Pronchery=item "priv" (B<OSSL_PKEY_PARAM_PRIV_KEY>) <octet string>
81*e7be843bSPierre Pronchery
82*e7be843bSPierre ProncheryThe private key value.
83*e7be843bSPierre Pronchery
84*e7be843bSPierre ProncheryThis parameter is used when importing or exporting the private key value with
85*e7be843bSPierre Proncherythe EVP_PKEY_fromdata() and EVP_PKEY_todata() functions.
86*e7be843bSPierre ProncheryThe key length and content is that of the FIPS 203 (Algorithm 16:
87*e7be843bSPierre ProncheryB<ML-KEM.KeyGen_internal>) B<dk> private key for the given ML-KEM variant.
88*e7be843bSPierre ProncheryInitial import aside, this parameter is otherwise only gettable.
89*e7be843bSPierre Pronchery
90*e7be843bSPierre Pronchery=item "encoded-pub-key" (B<OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY>) <octet string>
91*e7be843bSPierre Pronchery
92*e7be843bSPierre ProncheryUsed for getting and setting the encoding of a public key.
93*e7be843bSPierre ProncheryThe key format is that of B<ek> in FIPS 203, Algorithm 16:
94*e7be843bSPierre ProncheryB<ML-KEM.KeyGen_internal>.
95*e7be843bSPierre ProncheryUpdates of the public and private key components are only allowed on keys that
96*e7be843bSPierre Proncheryare empty.
97*e7be843bSPierre ProncheryOnce a public or private key component is set, no further changes are allowed.
98*e7be843bSPierre ProncheryThis parameter is gettable and settable (once only).
99*e7be843bSPierre Pronchery
100*e7be843bSPierre Pronchery=back
101*e7be843bSPierre Pronchery
102*e7be843bSPierre Pronchery=head2 Provider configuration parameters
103*e7be843bSPierre Pronchery
104*e7be843bSPierre ProncherySee the description of the B<-provparam> option in L<openssl(1)> to learn
105*e7be843bSPierre Proncheryhow to set provider configuration parameters in the command line tools.
106*e7be843bSPierre ProncherySee L<OSSL_PROVIDER_add_conf_parameter(3)> to learn how to set provider
107*e7be843bSPierre Proncheryconfiguration options programmatically.
108*e7be843bSPierre Pronchery
109*e7be843bSPierre Pronchery=over 4
110*e7be843bSPierre Pronchery
111*e7be843bSPierre Pronchery=item C<ml-kem.import_pct_type> (B<OSSL_PKEY_PARAM_ML_KEM_IMPORT_PCT_TYPE>) <UTF8 string>
112*e7be843bSPierre Pronchery
113*e7be843bSPierre ProncheryWhen an B<ML-KEM> key is imported as an explict FIPS 203 B<dk> decapsulation
114*e7be843bSPierre Proncherykey, rather than a seed, a pairwise consistency test (PCT) is optionally
115*e7be843bSPierre Proncheryperformed.
116*e7be843bSPierre ProncheryBy default, or when this parameter is set explicitly to C<random>, the PCT
117*e7be843bSPierre Proncheryis performed with a random entropy value for the encapsulation step.
118*e7be843bSPierre ProncherySetting the parameter to C<fixed>, still runs the test, but the encapsulation
119*e7be843bSPierre Proncheryentropy is a fixed 32 byte value.
120*e7be843bSPierre ProncherySpecifying any other value of the parameter, e.g. C<none>, skips the test.
121*e7be843bSPierre Pronchery
122*e7be843bSPierre Pronchery=item C<ml-kem.retain_seed> (B<OSSL_PKEY_PARAM_ML_KEM_RETAIN_SEED>) <UTF8 string>
123*e7be843bSPierre Pronchery
124*e7be843bSPierre ProncheryWhen set to a string representing a false boolean value (see
125*e7be843bSPierre ProncheryL<OSSL_PROVIDER_conf_get_bool(3)>), the seed will not be retained after key
126*e7be843bSPierre Proncherygeneration or key import from a seed value.
127*e7be843bSPierre ProncheryIf the resulting key is then written to a PKCS#8 object, it will contain
128*e7be843bSPierre Proncheryonly the FIPS 203 C<dk> key.
129*e7be843bSPierre Pronchery
130*e7be843bSPierre Pronchery=item C<ml-kem.prefer_seed> (B<OSSL_PKEY_PARAM_ML_KEM_PREFER_SEED>) <UTF8 string>
131*e7be843bSPierre Pronchery
132*e7be843bSPierre ProncheryWhen decoding PKCS#8 objects that contain both a seed and the FIPS 203 C<dk>
133*e7be843bSPierre Proncheryprivate key, the seed is by default used to regenerate the key, and the
134*e7be843bSPierre Proncherycompanion key is ignored.
135*e7be843bSPierre ProncheryWhen this configuration parameter is set to a string representing a false
136*e7be843bSPierre Proncheryboolean value (see L<OSSL_PROVIDER_conf_get_bool(3)>), the seed is ignored
137*e7be843bSPierre Pronchery(neither used to regenerate the key, nor retained), and the companion key is
138*e7be843bSPierre Proncheryused instead.
139*e7be843bSPierre Pronchery
140*e7be843bSPierre Pronchery=item C<ml-kem.input_formats> (B<OSSL_PKEY_PARAM_ML_KEM_INPUT_FORMATS>) <UTF8 string>
141*e7be843bSPierre Pronchery
142*e7be843bSPierre ProncheryList of enabled private key input formats when parsing PKCS#8 objects.
143*e7be843bSPierre ProncheryList elements are separated by commas and/or spaces or tabs.
144*e7be843bSPierre ProncheryThe list of enabled formats can be specified in the configuration file, as seen
145*e7be843bSPierre Proncheryin the L</EXAMPLES> section below, or the via the B<-provparam> command-line
146*e7be843bSPierre Proncheryoption (see also L<OSSL_PROVIDER_add_conf_parameter(3)>).
147*e7be843bSPierre Pronchery
148*e7be843bSPierre ProncheryValues specified on the command-line override any configuration file settings.
149*e7be843bSPierre ProncheryBy default all the supported formats are enabled.
150*e7be843bSPierre ProncheryThe supported formats are:
151*e7be843bSPierre Pronchery
152*e7be843bSPierre Pronchery=over 4
153*e7be843bSPierre Pronchery
154*e7be843bSPierre Pronchery=item C<seed-priv>:
155*e7be843bSPierre Pronchery
156*e7be843bSPierre ProncheryThis format represents B<PKCS#8> objects in which both the FIPS 203 64-byte
157*e7be843bSPierre ProncheryB<(d, z)> seed and the decapsulation key B<dk> are present in the private key
158*e7be843bSPierre Proncheryas part of the DER encoding of the ASN.1 sequence:
159*e7be843bSPierre Pronchery
160*e7be843bSPierre Pronchery    ML-KEM-PrivateKey ::= CHOICE {
161*e7be843bSPierre Pronchery      seed [0] IMPLICIT OCTET STRING (SIZE (64)),
162*e7be843bSPierre Pronchery      expandedKey OCTET STRING (SIZE (1632 | 2400 | 3168)),
163*e7be843bSPierre Pronchery      both SEQUENCE {
164*e7be843bSPierre Pronchery        seed OCTET STRING (SIZE (64)),
165*e7be843bSPierre Pronchery        expandedKey OCTET STRING (SIZE (1632 | 2400 | 3168)) } }
166*e7be843bSPierre Pronchery
167*e7be843bSPierre ProncheryIf the C<seed-priv> format is not included in the list, this format will not be
168*e7be843bSPierre Proncheryrecognised on input.
169*e7be843bSPierre Pronchery
170*e7be843bSPierre Pronchery=item C<seed-only>:
171*e7be843bSPierre Pronchery
172*e7be843bSPierre ProncheryThis format represents B<PKCS#8> objects in which only the 64-byte B<(d, z)>
173*e7be843bSPierre Proncheryseed is present in the above sequence.
174*e7be843bSPierre ProncheryIf the C<seed-only> format is not included in the list, this format will not be
175*e7be843bSPierre Proncheryrecognised on input.
176*e7be843bSPierre Pronchery
177*e7be843bSPierre Pronchery=item C<priv-only>:
178*e7be843bSPierre Pronchery
179*e7be843bSPierre ProncheryThis format represents B<PKCS#8> objects in which only the FIPS 203
180*e7be843bSPierre Proncherydecapsulation key B<dk> is present in the above sequence.
181*e7be843bSPierre ProncheryIf the C<priv-only> format is not included in the list, this format will not be
182*e7be843bSPierre Proncheryrecognised on input.
183*e7be843bSPierre Pronchery
184*e7be843bSPierre Pronchery=item C<oqskeypair>:
185*e7be843bSPierre Pronchery
186*e7be843bSPierre ProncheryThis format represents B<PKCS#8> objects in which the private key is a DER
187*e7be843bSPierre Proncheryencoding of an octet string containing the concatenaton of the FIPS 203
188*e7be843bSPierre Proncherydecapsulation key B<dk> and the encapsulation key B<ek>.
189*e7be843bSPierre ProncheryThis encoding is used in some builds of the C<oqsprovider>.
190*e7be843bSPierre ProncheryIf the C<oqskeypair> format is not included in the list, this format will not be
191*e7be843bSPierre Proncheryrecognised on input.
192*e7be843bSPierre Pronchery
193*e7be843bSPierre Pronchery=item C<bare-seed>:
194*e7be843bSPierre Pronchery
195*e7be843bSPierre ProncheryThis format represents B<PKCS#8> objects in which the private key contains
196*e7be843bSPierre Proncherythe 64-byte FIPS 204 seed B<(d, z)> without any ASN.1 encapsulation.
197*e7be843bSPierre ProncheryIf the C<bare-seed> format is not included in the list, this format will not be
198*e7be843bSPierre Proncheryrecognised on input.
199*e7be843bSPierre Pronchery
200*e7be843bSPierre Pronchery=item C<bare-priv>:
201*e7be843bSPierre Pronchery
202*e7be843bSPierre ProncheryThis format represents B<PKCS#8> objects in which the private key contains
203*e7be843bSPierre Proncherythe FIPS 204 decapsulation key B<dk> without any ASN.1 encapsulation.
204*e7be843bSPierre ProncheryIf the C<bare-priv> format is not included in the list, this format will not be
205*e7be843bSPierre Proncheryrecognised on input.
206*e7be843bSPierre Pronchery
207*e7be843bSPierre Pronchery=back
208*e7be843bSPierre Pronchery
209*e7be843bSPierre Pronchery=item C<ml-kem.output_formats> (B<OSSL_PKEY_PARAM_ML_KEM_OUTPUT_FORMATS>) <UTF8 string>
210*e7be843bSPierre Pronchery
211*e7be843bSPierre ProncheryOrdered list of enabled private key output formats when writing B<PKCS#8> files.
212*e7be843bSPierre ProncheryList elements are separated by commas, spaces or tabs.
213*e7be843bSPierre ProncheryThe list of enabled formats can be specified in the configuration file, as seen
214*e7be843bSPierre Proncheryin the L</EXAMPLES> section below, or the via the B<-provparam> command-line
215*e7be843bSPierre Proncheryoption.
216*e7be843bSPierre Pronchery
217*e7be843bSPierre ProncheryThis supports the same set of formats as described under C<ml-kem.input_formats>
218*e7be843bSPierre Proncheryabove.
219*e7be843bSPierre ProncheryThe order in which elements are listed is important, the selected format will be
220*e7be843bSPierre Proncherythe first one that is possible to output.
221*e7be843bSPierre ProncheryIf the key seed is known, the first listed format will be selected.
222*e7be843bSPierre ProncheryIf the key seed is not known, the first format that omits the seed will be selected.
223*e7be843bSPierre ProncheryThe default order is equivalent to C<seed-priv> first and C<priv-only> second, with
224*e7be843bSPierre Proncheryboth seed and key output when the seed is available, and just the
225*e7be843bSPierre Proncherykey otherwise.
226*e7be843bSPierre ProncheryIf C<seed-only> is listed first, then the seed will be output without the key
227*e7be843bSPierre Proncherywhen available, otherwise the output will have just the key.
228*e7be843bSPierre ProncheryIf C<priv-only> is listed first, then just the key is output regardless of
229*e7be843bSPierre Proncherywhether the seed is present.
230*e7be843bSPierre ProncheryThe legacy C<oqskeypair>, C<bare-seed> and C<bare-priv> formats can also be
231*e7be843bSPierre Proncheryoutput, by listing those first.
232*e7be843bSPierre Pronchery
233*e7be843bSPierre Pronchery=back
234*e7be843bSPierre Pronchery
235*e7be843bSPierre Pronchery=head1 CONFORMING TO
236*e7be843bSPierre Pronchery
237*e7be843bSPierre Pronchery=over 4
238*e7be843bSPierre Pronchery
239*e7be843bSPierre Pronchery=item FIPS 203
240*e7be843bSPierre Pronchery
241*e7be843bSPierre Pronchery=back
242*e7be843bSPierre Pronchery
243*e7be843bSPierre Pronchery=head1 EXAMPLES
244*e7be843bSPierre Pronchery
245*e7be843bSPierre ProncheryAn B<EVP_PKEY> context can be obtained by calling:
246*e7be843bSPierre Pronchery
247*e7be843bSPierre Pronchery    EVP_PKEY_CTX *pctx =
248*e7be843bSPierre Pronchery        EVP_PKEY_CTX_new_from_name(NULL, "ML-KEM-768", NULL);
249*e7be843bSPierre Pronchery
250*e7be843bSPierre ProncheryAn B<ML-KEM-768> key can be generated like this:
251*e7be843bSPierre Pronchery
252*e7be843bSPierre Pronchery    pkey = EVP_PKEY_Q_keygen(NULL, NULL, "ML-KEM-768");
253*e7be843bSPierre Pronchery
254*e7be843bSPierre ProncheryAn B<ML-KEM> private key in seed format can be converted to a key in the FIPS
255*e7be843bSPierre Pronchery203 B<dk> format by running:
256*e7be843bSPierre Pronchery
257*e7be843bSPierre Pronchery    $ openssl pkey -provparam ml-kem.retain_seed=no \
258*e7be843bSPierre Pronchery        -in seed-only.pem -out priv-only.pem
259*e7be843bSPierre Pronchery
260*e7be843bSPierre ProncheryTo generate an, e.g., B<ML-KEM-768> key, in FIPS 203 B<dk> format, you can run:
261*e7be843bSPierre Pronchery
262*e7be843bSPierre Pronchery    $ openssl genpkey -provparam ml-kem.retain_seed=no \
263*e7be843bSPierre Pronchery        -algorithm ml-kem-768 -out priv-only.pem
264*e7be843bSPierre Pronchery
265*e7be843bSPierre ProncheryIf you have a B<PKCS#8> file with both a seed and a key, and prefer to import the
266*e7be843bSPierre Proncherycompanion key rather than the seed, you can run:
267*e7be843bSPierre Pronchery
268*e7be843bSPierre Pronchery    $ openssl pkey -provparam ml-kem.prefer_seed=no \
269*e7be843bSPierre Pronchery        -in seed-priv.pem -out priv-only.pem
270*e7be843bSPierre Pronchery
271*e7be843bSPierre ProncheryIn the B<openssl.cnf> file, this looks like:
272*e7be843bSPierre Pronchery
273*e7be843bSPierre Pronchery    openssl_conf = openssl_init
274*e7be843bSPierre Pronchery
275*e7be843bSPierre Pronchery    [openssl_init]
276*e7be843bSPierre Pronchery    providers = providers_sect
277*e7be843bSPierre Pronchery
278*e7be843bSPierre Pronchery    # Can be referenced in one or more provider sections
279*e7be843bSPierre Pronchery    [ml_kem_sect]
280*e7be843bSPierre Pronchery    prefer_seed = yes
281*e7be843bSPierre Pronchery    retain_seed = yes
282*e7be843bSPierre Pronchery    # OQS legacy formats disabled
283*e7be843bSPierre Pronchery    input_formats = seed-priv, seed-only, priv-only
284*e7be843bSPierre Pronchery    # Output either the seed alone, or else the key alone
285*e7be843bSPierre Pronchery    output_formats = seed-only, priv-only
286*e7be843bSPierre Pronchery
287*e7be843bSPierre Pronchery    [providers_sect]
288*e7be843bSPierre Pronchery    default = default_sect
289*e7be843bSPierre Pronchery    # Or perhaps just: base = default_sect
290*e7be843bSPierre Pronchery    base = base_sect
291*e7be843bSPierre Pronchery
292*e7be843bSPierre Pronchery    [default_sect]
293*e7be843bSPierre Pronchery    ml-kem = ml_kem_sect
294*e7be843bSPierre Pronchery
295*e7be843bSPierre Pronchery    [base_sect]
296*e7be843bSPierre Pronchery    ml-kem = ml_kem_sect
297*e7be843bSPierre Pronchery
298*e7be843bSPierre Pronchery=head1 SEE ALSO
299*e7be843bSPierre Pronchery
300*e7be843bSPierre ProncheryL<openssl(1)>,
301*e7be843bSPierre ProncheryL<openssl-pkey(1)>,
302*e7be843bSPierre ProncheryL<openssl-genpkey(1)>,
303*e7be843bSPierre ProncheryL<EVP_KEYMGMT(3)>,
304*e7be843bSPierre ProncheryL<EVP_PKEY(3)>,
305*e7be843bSPierre ProncheryL<EVP_PKEY_get_raw_private_key(3)>,
306*e7be843bSPierre ProncheryL<EVP_PKEY_get_raw_public_key(3)>,
307*e7be843bSPierre ProncheryL<EVP_PKEY_get1_encoded_public_key(3)>,
308*e7be843bSPierre ProncheryL<OSSL_PROVIDER_add_conf_parameter(3)>,
309*e7be843bSPierre ProncheryL<provider-keymgmt(7)>,
310*e7be843bSPierre ProncheryL<EVP_KEM-ML-KEM(7)>
311*e7be843bSPierre Pronchery
312*e7be843bSPierre Pronchery=head1 HISTORY
313*e7be843bSPierre Pronchery
314*e7be843bSPierre ProncheryThis functionality was added in OpenSSL 3.5.
315*e7be843bSPierre Pronchery
316*e7be843bSPierre Pronchery=head1 COPYRIGHT
317*e7be843bSPierre Pronchery
318*e7be843bSPierre ProncheryCopyright 2024-2025 The OpenSSL Project Authors. All Rights Reserved.
319*e7be843bSPierre Pronchery
320*e7be843bSPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
321*e7be843bSPierre Proncherythis file except in compliance with the License.  You can obtain a copy
322*e7be843bSPierre Proncheryin the file LICENSE in the source distribution or at
323*e7be843bSPierre ProncheryL<https://www.openssl.org/source/license.html>.
324*e7be843bSPierre Pronchery
325*e7be843bSPierre Pronchery=cut
326