1=pod 2 3=head1 NAME 4 5life_cycle-mac - The MAC algorithm life-cycle 6 7=head1 DESCRIPTION 8 9All message authentication codes (MACs) 10go through a number of stages in their life-cycle: 11 12=over 4 13 14=item start 15 16This state represents the MAC before it has been allocated. It is the 17starting state for any life-cycle transitions. 18 19=item newed 20 21This state represents the MAC after it has been allocated. 22 23=item initialised 24 25This state represents the MAC when it is set up and capable of processing 26input. 27 28=item updated 29 30This state represents the MAC when it is set up and capable of processing 31additional input or generating output. 32 33=item finaled 34 35This state represents the MAC when it has generated output. 36 37=item freed 38 39This state is entered when the MAC is freed. It is the terminal state 40for all life-cycle transitions. 41 42=back 43 44=head2 State Transition Diagram 45 46The 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 90This section defines all of the legal state transitions. 91This 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 198At some point the EVP layer will begin enforcing the transitions described 199herein. 200 201=head1 SEE ALSO 202 203L<provider-mac(7)>, L<EVP_MAC(3)>. 204 205=head1 HISTORY 206 207The provider MAC interface was introduced in OpenSSL 3.0. 208 209=head1 COPYRIGHT 210 211Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. 212 213Licensed under the Apache License 2.0 (the "License"). You may not use 214this file except in compliance with the License. You can obtain a copy 215in the file LICENSE in the source distribution or at 216L<https://www.openssl.org/source/license.html>. 217 218=cut 219