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