life_cycle-mac.pod 8.4 KB

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