xref: /freebsd/crypto/openssl/doc/man7/life_cycle-digest.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1*b077aed3SPierre Pronchery=pod
2*b077aed3SPierre Pronchery
3*b077aed3SPierre Pronchery=head1 NAME
4*b077aed3SPierre Pronchery
5*b077aed3SPierre Proncherylife_cycle-digest - The digest algorithm life-cycle
6*b077aed3SPierre Pronchery
7*b077aed3SPierre Pronchery=head1 DESCRIPTION
8*b077aed3SPierre Pronchery
9*b077aed3SPierre ProncheryAll message digests (MDs) go through a number of stages in their life-cycle:
10*b077aed3SPierre Pronchery
11*b077aed3SPierre Pronchery=over 4
12*b077aed3SPierre Pronchery
13*b077aed3SPierre Pronchery=item start
14*b077aed3SPierre Pronchery
15*b077aed3SPierre ProncheryThis state represents the MD before it has been allocated.  It is the
16*b077aed3SPierre Proncherystarting state for any life-cycle transitions.
17*b077aed3SPierre Pronchery
18*b077aed3SPierre Pronchery=item newed
19*b077aed3SPierre Pronchery
20*b077aed3SPierre ProncheryThis state represents the MD after it has been allocated.
21*b077aed3SPierre Pronchery
22*b077aed3SPierre Pronchery=item initialised
23*b077aed3SPierre Pronchery
24*b077aed3SPierre ProncheryThis state represents the MD when it is set up and capable of processing
25*b077aed3SPierre Proncheryinput.
26*b077aed3SPierre Pronchery
27*b077aed3SPierre Pronchery=item updated
28*b077aed3SPierre Pronchery
29*b077aed3SPierre ProncheryThis state represents the MD when it is set up and capable of processing
30*b077aed3SPierre Proncheryadditional input or generating output.
31*b077aed3SPierre Pronchery
32*b077aed3SPierre Pronchery=item finaled
33*b077aed3SPierre Pronchery
34*b077aed3SPierre ProncheryThis state represents the MD when it has generated output.
35*b077aed3SPierre Pronchery
36*b077aed3SPierre Pronchery=item freed
37*b077aed3SPierre Pronchery
38*b077aed3SPierre ProncheryThis state is entered when the MD is freed.  It is the terminal state
39*b077aed3SPierre Proncheryfor all life-cycle transitions.
40*b077aed3SPierre Pronchery
41*b077aed3SPierre Pronchery=back
42*b077aed3SPierre Pronchery
43*b077aed3SPierre Pronchery=head2 State Transition Diagram
44*b077aed3SPierre Pronchery
45*b077aed3SPierre ProncheryThe usual life-cycle of a MD is illustrated:
46*b077aed3SPierre Pronchery
47*b077aed3SPierre Pronchery=begin man
48*b077aed3SPierre Pronchery
49*b077aed3SPierre Pronchery                     +-------------------+
50*b077aed3SPierre Pronchery                     |       start       |
51*b077aed3SPierre Pronchery                     +-------------------+
52*b077aed3SPierre Pronchery                       |
53*b077aed3SPierre Pronchery                       | EVP_MD_CTX_new
54*b077aed3SPierre Pronchery                       v
55*b077aed3SPierre Pronchery                     +-------------------+         EVP_MD_CTX_reset
56*b077aed3SPierre Pronchery                     |       newed       | <------------------------------+
57*b077aed3SPierre Pronchery                     +-------------------+                                |
58*b077aed3SPierre Pronchery                       |                                                  |
59*b077aed3SPierre Pronchery                       | EVP_DigestInit                                   |
60*b077aed3SPierre Pronchery                       v                                                  |
61*b077aed3SPierre Pronchery                     +-------------------+                                |
62*b077aed3SPierre Pronchery                +--> |    initialised    | <+ EVP_DigestInit              |
63*b077aed3SPierre Pronchery                |    +-------------------+  |                             |
64*b077aed3SPierre Pronchery                |      |                    |      EVP_DigestUpdate       |
65*b077aed3SPierre Pronchery                |      | EVP_DigestUpdate   |    +------------------+     |
66*b077aed3SPierre Pronchery                |      v                    |    v                  |     |
67*b077aed3SPierre Pronchery                |    +------------------------------------------------+   |
68*b077aed3SPierre Pronchery EVP_DigestInit |    |                    updated                     | --+
69*b077aed3SPierre Pronchery                |    +------------------------------------------------+   |
70*b077aed3SPierre Pronchery                |      |                    |                             |
71*b077aed3SPierre Pronchery                |      | EVP_DigestFinal    | EVP_DigestFinalXOF          |
72*b077aed3SPierre Pronchery                |      v                    v                             |
73*b077aed3SPierre Pronchery                |    +------------------------------------------------+   |
74*b077aed3SPierre Pronchery                +--- |                    finaled                     | --+
75*b077aed3SPierre Pronchery                     +------------------------------------------------+
76*b077aed3SPierre Pronchery                       |
77*b077aed3SPierre Pronchery                       | EVP_MD_CTX_free
78*b077aed3SPierre Pronchery                       v
79*b077aed3SPierre Pronchery                     +-------------------+
80*b077aed3SPierre Pronchery                     |       freed       |
81*b077aed3SPierre Pronchery                     +-------------------+
82*b077aed3SPierre Pronchery
83*b077aed3SPierre Pronchery=end man
84*b077aed3SPierre Pronchery
85*b077aed3SPierre Pronchery=for html <img src="img/digest.png">
86*b077aed3SPierre Pronchery
87*b077aed3SPierre Pronchery=head2 Formal State Transitions
88*b077aed3SPierre Pronchery
89*b077aed3SPierre ProncheryThis section defines all of the legal state transitions.
90*b077aed3SPierre ProncheryThis is the canonical list.
91*b077aed3SPierre Pronchery
92*b077aed3SPierre Pronchery=begin man
93*b077aed3SPierre Pronchery
94*b077aed3SPierre Pronchery Function Call                --------------------- Current State ----------------------
95*b077aed3SPierre Pronchery                              start   newed    initialised   updated     finaled   freed
96*b077aed3SPierre Pronchery EVP_MD_CTX_new               newed
97*b077aed3SPierre Pronchery EVP_DigestInit                    initialised initialised initialised initialised
98*b077aed3SPierre Pronchery EVP_DigestUpdate                                updated     updated
99*b077aed3SPierre Pronchery EVP_DigestFinal                                             finaled
100*b077aed3SPierre Pronchery EVP_DigestFinalXOF                                          finaled
101*b077aed3SPierre Pronchery EVP_MD_CTX_free              freed   freed       freed       freed       freed
102*b077aed3SPierre Pronchery EVP_MD_CTX_reset                     newed       newed       newed       newed
103*b077aed3SPierre Pronchery EVP_MD_CTX_get_params                newed    initialised   updated
104*b077aed3SPierre Pronchery EVP_MD_CTX_set_params                newed    initialised   updated
105*b077aed3SPierre Pronchery EVP_MD_CTX_gettable_params           newed    initialised   updated
106*b077aed3SPierre Pronchery EVP_MD_CTX_settable_params           newed    initialised   updated
107*b077aed3SPierre Pronchery
108*b077aed3SPierre Pronchery=end man
109*b077aed3SPierre Pronchery
110*b077aed3SPierre Pronchery=begin html
111*b077aed3SPierre Pronchery
112*b077aed3SPierre Pronchery<table style="border:1px solid; border-collapse:collapse">
113*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">Function Call</th>
114*b077aed3SPierre Pronchery    <th style="border:1px solid" colspan="6">Current State</th></tr>
115*b077aed3SPierre Pronchery<tr><th style="border:1px solid"></th>
116*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">start</th>
117*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">newed</th>
118*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">initialised</th>
119*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">updated</th>
120*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">finaled</th>
121*b077aed3SPierre Pronchery    <th style="border:1px solid" align="center">freed</th></tr>
122*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_MD_CTX_new</th>
123*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
124*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
125*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
126*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
127*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
128*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
129*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_DigestInit</th>
130*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
131*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
132*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
133*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
134*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
135*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
136*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_DigestUpdate</th>
137*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
138*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
139*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">updated</td>
140*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">updated</td>
141*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
142*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
143*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_DigestFinal</th>
144*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
145*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
146*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
147*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">finaled</td>
148*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
149*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
150*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_DigestFinalXOF</th>
151*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
152*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
153*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
154*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">finaled</td>
155*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
156*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
157*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_MD_CTX_free</th>
158*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
159*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
160*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
161*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
162*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">freed</td>
163*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
164*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_MD_CTX_reset</th>
165*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
166*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
167*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
168*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
169*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
170*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
171*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_MD_CTX_get_params</th>
172*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
173*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
174*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
175*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">updated</td>
176*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
177*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
178*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_MD_CTX_set_params</th>
179*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
180*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
181*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
182*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">updated</td>
183*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
184*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
185*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_MD_CTX_gettable_params</th>
186*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
187*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
188*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
189*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">updated</td>
190*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
191*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
192*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_MD_CTX_settable_params</th>
193*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
194*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">newed</td>
195*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">initialised</td>
196*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">updated</td>
197*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td>
198*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></td></tr>
199*b077aed3SPierre Pronchery</table>
200*b077aed3SPierre Pronchery
201*b077aed3SPierre Pronchery=end html
202*b077aed3SPierre Pronchery
203*b077aed3SPierre Pronchery=head1 NOTES
204*b077aed3SPierre Pronchery
205*b077aed3SPierre ProncheryAt some point the EVP layer will begin enforcing the transitions described
206*b077aed3SPierre Proncheryherein.
207*b077aed3SPierre Pronchery
208*b077aed3SPierre Pronchery=head1 SEE ALSO
209*b077aed3SPierre Pronchery
210*b077aed3SPierre ProncheryL<provider-digest(7)>, L<EVP_DigestInit(3)>
211*b077aed3SPierre Pronchery
212*b077aed3SPierre Pronchery=head1 COPYRIGHT
213*b077aed3SPierre Pronchery
214*b077aed3SPierre ProncheryCopyright 2021 The OpenSSL Project Authors. All Rights Reserved.
215*b077aed3SPierre Pronchery
216*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
217*b077aed3SPierre Proncherythis file except in compliance with the License.  You can obtain a copy
218*b077aed3SPierre Proncheryin the file LICENSE in the source distribution or at
219*b077aed3SPierre ProncheryL<https://www.openssl.org/source/license.html>.
220*b077aed3SPierre Pronchery
221*b077aed3SPierre Pronchery=cut
222