Home | History | Annotate | Line # | Download | only in man7
      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
    219