life_cycle-digest.pod 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. =pod
  2. =head1 NAME
  3. life_cycle-digest - The digest algorithm life-cycle
  4. =head1 DESCRIPTION
  5. All message digests (MDs) go through a number of stages in their life-cycle:
  6. =over 4
  7. =item start
  8. This state represents the MD before it has been allocated. It is the
  9. starting state for any life-cycle transitions.
  10. =item newed
  11. This state represents the MD after it has been allocated.
  12. =item initialised
  13. This state represents the MD when it is set up and capable of processing
  14. input.
  15. =item updated
  16. This state represents the MD when it is set up and capable of processing
  17. additional input or generating output.
  18. =item finaled
  19. This state represents the MD when it has generated output.
  20. =item freed
  21. This state is entered when the MD is freed. It is the terminal state
  22. for all life-cycle transitions.
  23. =back
  24. =head2 State Transition Diagram
  25. The usual life-cycle of a MD is illustrated:
  26. =begin man
  27. +-------------------+
  28. | start |
  29. +-------------------+
  30. |
  31. | EVP_MD_CTX_new
  32. v
  33. +-------------------+ EVP_MD_CTX_reset
  34. | newed | <------------------------------+
  35. +-------------------+ |
  36. | |
  37. | EVP_DigestInit |
  38. v |
  39. +-------------------+ |
  40. +--> | initialised | <+ EVP_DigestInit |
  41. | +-------------------+ | |
  42. | | | EVP_DigestUpdate |
  43. | | EVP_DigestUpdate | +------------------+ |
  44. | v | v | |
  45. | +------------------------------------------------+ |
  46. EVP_DigestInit | | updated | --+
  47. | +------------------------------------------------+ |
  48. | | | |
  49. | | EVP_DigestFinal | EVP_DigestFinalXOF |
  50. | v v |
  51. | +------------------------------------------------+ |
  52. +--- | finaled | --+
  53. +------------------------------------------------+
  54. |
  55. | EVP_MD_CTX_free
  56. v
  57. +-------------------+
  58. | freed |
  59. +-------------------+
  60. =end man
  61. =for html <img src="img/digest.png">
  62. =head2 Formal State Transitions
  63. This section defines all of the legal state transitions.
  64. This is the canonical list.
  65. =begin man
  66. Function Call --------------------- Current State ----------------------
  67. start newed initialised updated finaled freed
  68. EVP_MD_CTX_new newed
  69. EVP_DigestInit initialised initialised initialised initialised
  70. EVP_DigestUpdate updated updated
  71. EVP_DigestFinal finaled
  72. EVP_DigestFinalXOF finaled
  73. EVP_MD_CTX_free freed freed freed freed freed
  74. EVP_MD_CTX_reset newed newed newed newed
  75. EVP_MD_CTX_get_params newed initialised updated
  76. EVP_MD_CTX_set_params newed initialised updated
  77. EVP_MD_CTX_gettable_params newed initialised updated
  78. EVP_MD_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_MD_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_DigestInit</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_DigestUpdate</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_DigestFinal</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_DigestFinalXOF</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_MD_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_MD_CTX_reset</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">newed</td>
  137. <td style="border:1px solid" align="center">newed</td>
  138. <td style="border:1px solid" align="center">newed</td>
  139. <td style="border:1px solid" align="center"></td></tr>
  140. <tr><th style="border:1px solid" align="left">EVP_MD_CTX_get_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_MD_CTX_set_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_MD_CTX_gettable_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. <tr><th style="border:1px solid" align="left">EVP_MD_CTX_settable_params</th>
  162. <td style="border:1px solid" align="center"></td>
  163. <td style="border:1px solid" align="center">newed</td>
  164. <td style="border:1px solid" align="center">initialised</td>
  165. <td style="border:1px solid" align="center">updated</td>
  166. <td style="border:1px solid" align="center"></td>
  167. <td style="border:1px solid" align="center"></td></tr>
  168. </table>
  169. =end html
  170. =head1 NOTES
  171. At some point the EVP layer will begin enforcing the transitions described
  172. herein.
  173. =head1 SEE ALSO
  174. L<provider-digest(7)>, L<EVP_DigestInit(3)>
  175. =head1 COPYRIGHT
  176. Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
  177. Licensed under the Apache License 2.0 (the "License"). You may not use
  178. this file except in compliance with the License. You can obtain a copy
  179. in the file LICENSE in the source distribution or at
  180. L<https://www.openssl.org/source/license.html>.
  181. =cut