xref: /freebsd/crypto/openssl/doc/man7/life_cycle-mac.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1*b077aed3SPierre Pronchery=pod
2*b077aed3SPierre Pronchery
3*b077aed3SPierre Pronchery=head1 NAME
4*b077aed3SPierre Pronchery
5*b077aed3SPierre Proncherylife_cycle-mac - The MAC algorithm life-cycle
6*b077aed3SPierre Pronchery
7*b077aed3SPierre Pronchery=head1 DESCRIPTION
8*b077aed3SPierre Pronchery
9*b077aed3SPierre ProncheryAll message authentication codes (MACs)
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 MAC 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 MAC after it has been allocated.
22*b077aed3SPierre Pronchery
23*b077aed3SPierre Pronchery=item initialised
24*b077aed3SPierre Pronchery
25*b077aed3SPierre ProncheryThis state represents the MAC when it is set up and capable of processing
26*b077aed3SPierre Proncheryinput.
27*b077aed3SPierre Pronchery
28*b077aed3SPierre Pronchery=item updated
29*b077aed3SPierre Pronchery
30*b077aed3SPierre ProncheryThis state represents the MAC when it is set up and capable of processing
31*b077aed3SPierre Proncheryadditional input or generating output.
32*b077aed3SPierre Pronchery
33*b077aed3SPierre Pronchery=item finaled
34*b077aed3SPierre Pronchery
35*b077aed3SPierre ProncheryThis state represents the MAC when it has generated output.
36*b077aed3SPierre Pronchery
37*b077aed3SPierre Pronchery=item freed
38*b077aed3SPierre Pronchery
39*b077aed3SPierre ProncheryThis state is entered when the MAC is freed.  It is the terminal state
40*b077aed3SPierre Proncheryfor all life-cycle transitions.
41*b077aed3SPierre Pronchery
42*b077aed3SPierre Pronchery=back
43*b077aed3SPierre Pronchery
44*b077aed3SPierre Pronchery=head2 State Transition Diagram
45*b077aed3SPierre Pronchery
46*b077aed3SPierre ProncheryThe usual life-cycle of a MAC is illustrated:
47*b077aed3SPierre Pronchery
48*b077aed3SPierre Pronchery=begin man
49*b077aed3SPierre Pronchery
50*b077aed3SPierre Pronchery                 +-------------------+
51*b077aed3SPierre Pronchery                 |       start       |
52*b077aed3SPierre Pronchery                 +-------------------+
53*b077aed3SPierre Pronchery                   |
54*b077aed3SPierre Pronchery                   | EVP_MAC_CTX_new
55*b077aed3SPierre Pronchery                   v
56*b077aed3SPierre Pronchery                 +-------------------+
57*b077aed3SPierre Pronchery                 |       newed       |
58*b077aed3SPierre Pronchery                 +-------------------+
59*b077aed3SPierre Pronchery                   |
60*b077aed3SPierre Pronchery                   | EVP_MAC_init
61*b077aed3SPierre Pronchery                   v
62*b077aed3SPierre Pronchery                 +-------------------+
63*b077aed3SPierre Pronchery              +> |    initialised    | <+
64*b077aed3SPierre Pronchery              |  +-------------------+  |
65*b077aed3SPierre Pronchery              |    |                    |
66*b077aed3SPierre Pronchery              |    | EVP_MAC_update     | EVP_MAC_init
67*b077aed3SPierre Pronchery              |    v                    |
68*b077aed3SPierre Pronchery EVP_MAC_init |  +-------------------+  |
69*b077aed3SPierre Pronchery              |  |      updated      | -+
70*b077aed3SPierre Pronchery              |  +-------------------+
71*b077aed3SPierre Pronchery              |    |               |
72*b077aed3SPierre Pronchery              |    | EVP_MAC_final | EVP_MAC_finalXOF
73*b077aed3SPierre Pronchery              |    v               v
74*b077aed3SPierre Pronchery              |  +-------------------+
75*b077aed3SPierre Pronchery              +- |      finaled      |
76*b077aed3SPierre Pronchery                 +-------------------+
77*b077aed3SPierre Pronchery                   |
78*b077aed3SPierre Pronchery                   | EVP_MAC_CTX_free
79*b077aed3SPierre Pronchery                   v
80*b077aed3SPierre Pronchery                 +-------------------+
81*b077aed3SPierre Pronchery                 |       freed       |
82*b077aed3SPierre Pronchery                 +-------------------+
83*b077aed3SPierre Pronchery
84*b077aed3SPierre Pronchery=end man
85*b077aed3SPierre Pronchery
86*b077aed3SPierre Pronchery=for html <img src="img/mac.png">
87*b077aed3SPierre Pronchery
88*b077aed3SPierre Pronchery=head2 Formal State Transitions
89*b077aed3SPierre Pronchery
90*b077aed3SPierre ProncheryThis section defines all of the legal state transitions.
91*b077aed3SPierre ProncheryThis is the canonical list.
92*b077aed3SPierre Pronchery
93*b077aed3SPierre Pronchery=begin man
94*b077aed3SPierre Pronchery
95*b077aed3SPierre Pronchery Function Call                   --------------------- Current State ----------------------
96*b077aed3SPierre Pronchery                                 start   newed    initialised   updated     finaled   freed
97*b077aed3SPierre Pronchery EVP_MAC_CTX_new                 newed
98*b077aed3SPierre Pronchery EVP_MAC_init                         initialised initialised initialised initialised
99*b077aed3SPierre Pronchery EVP_MAC_update                                     updated     updated
100*b077aed3SPierre Pronchery EVP_MAC_final                                                  finaled
101*b077aed3SPierre Pronchery EVP_MAC_finalXOF                                               finaled
102*b077aed3SPierre Pronchery EVP_MAC_CTX_free                freed   freed       freed       freed       freed
103*b077aed3SPierre Pronchery EVP_MAC_CTX_get_params                  newed    initialised   updated
104*b077aed3SPierre Pronchery EVP_MAC_CTX_set_params                  newed    initialised   updated
105*b077aed3SPierre Pronchery EVP_MAC_CTX_gettable_params             newed    initialised   updated
106*b077aed3SPierre Pronchery EVP_MAC_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_MAC_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_MAC_init</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_MAC_update</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_MAC_final</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_MAC_finalXOF</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_MAC_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_MAC_CTX_get_params</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">initialised</td>
168*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center">updated</td>
169*b077aed3SPierre Pronchery    <td style="border:1px solid" align="center"></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_MAC_CTX_set_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_MAC_CTX_gettable_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_MAC_CTX_settable_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</table>
193*b077aed3SPierre Pronchery
194*b077aed3SPierre Pronchery=end html
195*b077aed3SPierre Pronchery
196*b077aed3SPierre Pronchery=head1 NOTES
197*b077aed3SPierre Pronchery
198*b077aed3SPierre ProncheryAt some point the EVP layer will begin enforcing the transitions described
199*b077aed3SPierre Proncheryherein.
200*b077aed3SPierre Pronchery
201*b077aed3SPierre Pronchery=head1 SEE ALSO
202*b077aed3SPierre Pronchery
203*b077aed3SPierre ProncheryL<provider-mac(7)>, L<EVP_MAC(3)>.
204*b077aed3SPierre Pronchery
205*b077aed3SPierre Pronchery=head1 HISTORY
206*b077aed3SPierre Pronchery
207*b077aed3SPierre ProncheryThe provider MAC interface was introduced in OpenSSL 3.0.
208*b077aed3SPierre Pronchery
209*b077aed3SPierre Pronchery=head1 COPYRIGHT
210*b077aed3SPierre Pronchery
211*b077aed3SPierre ProncheryCopyright 2021 The OpenSSL Project Authors. All Rights Reserved.
212*b077aed3SPierre Pronchery
213*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
214*b077aed3SPierre Proncherythis file except in compliance with the License.  You can obtain a copy
215*b077aed3SPierre Proncheryin the file LICENSE in the source distribution or at
216*b077aed3SPierre ProncheryL<https://www.openssl.org/source/license.html>.
217*b077aed3SPierre Pronchery
218*b077aed3SPierre Pronchery=cut
219