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