xref: /freebsd/crypto/openssl/doc/man7/life_cycle-kdf.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1*b077aed3SPierre Pronchery=pod
2*b077aed3SPierre Pronchery
3*b077aed3SPierre Pronchery=head1 NAME
4*b077aed3SPierre Pronchery
5*b077aed3SPierre Proncherylife_cycle-kdf - The KDF algorithm life-cycle
6*b077aed3SPierre Pronchery
7*b077aed3SPierre Pronchery=head1 DESCRIPTION
8*b077aed3SPierre Pronchery
9*b077aed3SPierre ProncheryAll key derivation functions (KDFs) and pseudo random functions (PRFs)
10*b077aed3SPierre Proncherygo through a number of stages in their life-cycle:
11*b077aed3SPierre Pronchery
12*b077aed3SPierre Pronchery=over 4
13*b077aed3SPierre Pronchery
14*b077aed3SPierre Pronchery=item start
15*b077aed3SPierre Pronchery
16*b077aed3SPierre ProncheryThis state represents the KDF/PRF before it has been allocated.  It is the
17*b077aed3SPierre Proncherystarting state for any life-cycle transitions.
18*b077aed3SPierre Pronchery
19*b077aed3SPierre Pronchery=item newed
20*b077aed3SPierre Pronchery
21*b077aed3SPierre ProncheryThis state represents the KDF/PRF after it has been allocated.
22*b077aed3SPierre Pronchery
23*b077aed3SPierre Pronchery=item deriving
24*b077aed3SPierre Pronchery
25*b077aed3SPierre ProncheryThis state represents the KDF/PRF when it is set up and capable of generating
26*b077aed3SPierre Proncheryoutput.
27*b077aed3SPierre Pronchery
28*b077aed3SPierre Pronchery=item freed
29*b077aed3SPierre Pronchery
30*b077aed3SPierre ProncheryThis state is entered when the KDF/PRF is freed.  It is the terminal state
31*b077aed3SPierre Proncheryfor all life-cycle transitions.
32*b077aed3SPierre Pronchery
33*b077aed3SPierre Pronchery=back
34*b077aed3SPierre Pronchery
35*b077aed3SPierre Pronchery=head2 State Transition Diagram
36*b077aed3SPierre Pronchery
37*b077aed3SPierre ProncheryThe usual life-cycle of a KDF/PRF is illustrated:
38*b077aed3SPierre Pronchery
39*b077aed3SPierre Pronchery=begin man
40*b077aed3SPierre Pronchery
41*b077aed3SPierre Pronchery                     +-------------------+
42*b077aed3SPierre Pronchery                     |       start       |
43*b077aed3SPierre Pronchery                     +-------------------+
44*b077aed3SPierre Pronchery                       |
45*b077aed3SPierre Pronchery                       | EVP_KDF_CTX_new
46*b077aed3SPierre Pronchery                       v
47*b077aed3SPierre Pronchery                     +-------------------+
48*b077aed3SPierre Pronchery                     |       newed       | <+
49*b077aed3SPierre Pronchery                     +-------------------+  |
50*b077aed3SPierre Pronchery                       |                    |
51*b077aed3SPierre Pronchery                       | EVP_KDF_derive     |
52*b077aed3SPierre Pronchery                       v                    | EVP_KDF_CTX_reset
53*b077aed3SPierre Pronchery    EVP_KDF_derive   +-------------------+  |
54*b077aed3SPierre Pronchery  + - - - - - - - -  |                   |  |
55*b077aed3SPierre Pronchery  '                  |     deriving      |  |
56*b077aed3SPierre Pronchery  + - - - - - - - -> |                   | -+
57*b077aed3SPierre Pronchery                     +-------------------+
58*b077aed3SPierre Pronchery                       |
59*b077aed3SPierre Pronchery                       | EVP_KDF_CTX_free
60*b077aed3SPierre Pronchery                       v
61*b077aed3SPierre Pronchery                     +-------------------+
62*b077aed3SPierre Pronchery                     |       freed       |
63*b077aed3SPierre Pronchery                     +-------------------+
64*b077aed3SPierre Pronchery
65*b077aed3SPierre Pronchery=end man
66*b077aed3SPierre Pronchery
67*b077aed3SPierre Pronchery=for html <img src="img/kdf.png">
68*b077aed3SPierre Pronchery
69*b077aed3SPierre Pronchery=head2 Formal State Transitions
70*b077aed3SPierre Pronchery
71*b077aed3SPierre ProncheryThis section defines all of the legal state transitions.
72*b077aed3SPierre ProncheryThis is the canonical list.
73*b077aed3SPierre Pronchery
74*b077aed3SPierre Pronchery=begin man
75*b077aed3SPierre Pronchery
76*b077aed3SPierre Pronchery Function Call                   ------------- Current State -------------
77*b077aed3SPierre Pronchery                                 start       newed       deriving    freed
78*b077aed3SPierre Pronchery EVP_KDF_CTX_new                 newed
79*b077aed3SPierre Pronchery EVP_KDF_derive                             deriving     deriving
80*b077aed3SPierre Pronchery EVP_KDF_CTX_free                freed       freed        freed
81*b077aed3SPierre Pronchery EVP_KDF_CTX_reset                           newed        newed
82*b077aed3SPierre Pronchery EVP_KDF_CTX_get_params                      newed       deriving
83*b077aed3SPierre Pronchery EVP_KDF_CTX_set_params                      newed       deriving
84*b077aed3SPierre Pronchery EVP_KDF_CTX_gettable_params                 newed       deriving
85*b077aed3SPierre Pronchery EVP_KDF_CTX_settable_params                 newed       deriving
86*b077aed3SPierre Pronchery
87*b077aed3SPierre Pronchery=end man
88*b077aed3SPierre Pronchery
89*b077aed3SPierre Pronchery=begin html
90*b077aed3SPierre Pronchery
91*b077aed3SPierre Pronchery<table style="border:1px solid; border-collapse:collapse">
92*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">Function Call</th>
93*b077aed3SPierre Pronchery    <th style="border:1px solid" colspan="4">Current State</th></tr>
94*b077aed3SPierre Pronchery<tr><th style="border:1px solid"></th>
95*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">start</th>
96*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">newed</th>
97*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">deriving</th>
98*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">freed</th></tr>
99*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_new</th>
100*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
101*b077aed3SPierre Pronchery    <td style="border:1px solid"></td>
102*b077aed3SPierre Pronchery    <td style="border:1px solid"></td>
103*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
104*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_derive</th>
105*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
106*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">deriving</td>
107*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">deriving</td>
108*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
109*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_free</th>
110*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
111*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
112*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
113*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
114*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_reset</th>
115*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
116*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
117*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
118*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
119*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_get_params</th>
120*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
121*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
122*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">deriving</td>
123*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
124*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_set_params</th>
125*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
126*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
127*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">deriving</td>
128*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
129*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_gettable_params</th>
130*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
131*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
132*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">deriving</td>
133*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
134*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_settable_params</th>
135*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
136*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
137*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">deriving</td>
138*b077aed3SPierre Pronchery    <td style="border:1px solid"></td></tr>
139*b077aed3SPierre Pronchery</table>
140*b077aed3SPierre Pronchery
141*b077aed3SPierre Pronchery=end html
142*b077aed3SPierre Pronchery
143*b077aed3SPierre Pronchery=head1 NOTES
144*b077aed3SPierre Pronchery
145*b077aed3SPierre ProncheryAt some point the EVP layer will begin enforcing the transitions described
146*b077aed3SPierre Proncheryherein.
147*b077aed3SPierre Pronchery
148*b077aed3SPierre Pronchery=head1 SEE ALSO
149*b077aed3SPierre Pronchery
150*b077aed3SPierre ProncheryL<provider-kdf(7)>, L<EVP_KDF(3)>.
151*b077aed3SPierre Pronchery
152*b077aed3SPierre Pronchery=head1 HISTORY
153*b077aed3SPierre Pronchery
154*b077aed3SPierre ProncheryThe provider KDF interface was introduced in OpenSSL 3.0.
155*b077aed3SPierre Pronchery
156*b077aed3SPierre Pronchery=head1 COPYRIGHT
157*b077aed3SPierre Pronchery
158*b077aed3SPierre ProncheryCopyright 2021 The OpenSSL Project Authors. All Rights Reserved.
159*b077aed3SPierre Pronchery
160*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
161*b077aed3SPierre Proncherythis file except in compliance with the License.  You can obtain a copy
162*b077aed3SPierre Proncheryin the file LICENSE in the source distribution or at
163*b077aed3SPierre ProncheryL<https://www.openssl.org/source/license.html>.
164*b077aed3SPierre Pronchery
165*b077aed3SPierre Pronchery=cut
166