doc: add digest life cycle documentation
authorPauli <pauli@openssl.org>
Mon, 7 Jun 2021 02:28:02 +0000 (12:28 +1000)
committerPauli <pauli@openssl.org>
Tue, 8 Jun 2021 08:55:32 +0000 (18:55 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15637)

doc/build.info
doc/man7/life_cycle-digest.pod [new file with mode: 0644]

index 946cc240329fe4718affbb5906cd0809eb85e6e5..2352f116ae146cf1cce6014ffb14e2a2e5f2710e 100644 (file)
@@ -4375,6 +4375,10 @@ DEPEND[html/man7/fips_module.html]=man7/fips_module.pod
 GENERATE[html/man7/fips_module.html]=man7/fips_module.pod
 DEPEND[man/man7/fips_module.7]=man7/fips_module.pod
 GENERATE[man/man7/fips_module.7]=man7/fips_module.pod
+DEPEND[html/man7/life_cycle-digest.html]=man7/life_cycle-digest.pod
+GENERATE[html/man7/life_cycle-digest.html]=man7/life_cycle-digest.pod
+DEPEND[man/man7/life_cycle-digest.7]=man7/life_cycle-digest.pod
+GENERATE[man/man7/life_cycle-digest.7]=man7/life_cycle-digest.pod
 DEPEND[html/man7/life_cycle-kdf.html]=man7/life_cycle-kdf.pod
 GENERATE[html/man7/life_cycle-kdf.html]=man7/life_cycle-kdf.pod
 DEPEND[man/man7/life_cycle-kdf.7]=man7/life_cycle-kdf.pod
@@ -4513,7 +4517,8 @@ DEPEND[html/man7/x509.html]=man7/x509.pod
 GENERATE[html/man7/x509.html]=man7/x509.pod
 DEPEND[man/man7/x509.7]=man7/x509.pod
 GENERATE[man/man7/x509.7]=man7/x509.pod
-IMAGEDOCS[man7]=man7/img/kdf.png \
+IMAGEDOCS[man7]=man7/img/digest.png \
+man7/img/kdf.png \
 man7/img/mac.png \
 man7/img/rand.png
 HTMLDOCS[man7]=html/man7/EVP_ASYM_CIPHER-SM2.html \
@@ -4600,6 +4605,7 @@ html/man7/ct.html \
 html/man7/des_modes.html \
 html/man7/evp.html \
 html/man7/fips_module.html \
+html/man7/life_cycle-digest.html \
 html/man7/life_cycle-kdf.html \
 html/man7/life_cycle-mac.html \
 html/man7/life_cycle-rand.html \
@@ -4718,6 +4724,7 @@ man/man7/ct.7 \
 man/man7/des_modes.7 \
 man/man7/evp.7 \
 man/man7/fips_module.7 \
+man/man7/life_cycle-digest.7 \
 man/man7/life_cycle-kdf.7 \
 man/man7/life_cycle-mac.7 \
 man/man7/life_cycle-rand.7 \
diff --git a/doc/man7/life_cycle-digest.pod b/doc/man7/life_cycle-digest.pod
new file mode 100644 (file)
index 0000000..5425f57
--- /dev/null
@@ -0,0 +1,221 @@
+=pod
+
+=head1 NAME
+
+life_cycle-digest - The digest algorithm life-cycle
+
+=head1 DESCRIPTION
+
+All message digests (MDs) go through a number of stages in their life-cycle:
+
+=over 4
+
+=item start
+
+This state represents the MD before it has been allocated.  It is the
+starting state for any life-cycle transitions.
+
+=item newed
+
+This state represents the MD after it has been allocated.
+
+=item initialised
+
+This state represents the MD when it is set up and capable of processing
+input.
+
+=item updated
+
+This state represents the MD when it is set up and capable of processing
+additional input or generating output.
+
+=item finaled
+
+This state represents the MD when it has generated output.
+
+=item freed
+
+This state is entered when the MD is freed.  It is the terminal state
+for all life-cycle transitions.
+
+=back
+
+=head2 State Transition Diagram
+
+The usual life-cycle of a MD is illustrated:
+
+=begin man
+
+                     +-------------------+
+                     |       start       |
+                     +-------------------+
+                       |
+                       | EVP_MD_CTX_new
+                       v
+                     +-------------------+         EVP_MD_CTX_reset
+                     |       newed       | <------------------------------+
+                     +-------------------+                                |
+                       |                                                  |
+                       | EVP_DigestInit                                   |
+                       v                                                  |
+                     +-------------------+                                |
+                +--> |    initialised    | <+ EVP_DigestInit              |
+                |    +-------------------+  |                             |
+                |      |                    |      EVP_DigestUpdate       |
+                |      | EVP_DigestUpdate   |    +------------------+     |
+                |      v                    |    v                  |     |
+                |    +------------------------------------------------+   |
+ EVP_DigestInit |    |                    updated                     | --+
+                |    +------------------------------------------------+   |
+                |      |                    |                             |
+                |      | EVP_DigestFinal    | EVP_DigestFinalXOF          |
+                |      v                    v                             |
+                |    +------------------------------------------------+   |
+                +--- |                    finaled                     | --+
+                     +------------------------------------------------+
+                       |
+                       | EVP_MD_CTX_free
+                       v
+                     +-------------------+
+                     |       freed       |
+                     +-------------------+
+
+=end man
+
+=for html <img src="img/digest.png">
+
+=head2 Formal State Transitions
+
+This section defines all of the legal state transitions.
+This is the canonical list.
+
+=begin man
+
+ Function Call                --------------------- Current State ----------------------
+                              start   newed    initialised   updated     finaled   freed
+ EVP_MD_CTX_new               newed           
+ EVP_DigestInit                    initialised initialised initialised initialised
+ EVP_DigestUpdate                                updated     updated
+ EVP_DigestFinal                                             finaled
+ EVP_DigestFinalXOF                                          finaled
+ EVP_MD_CTX_free              freed   freed       freed       freed       freed
+ EVP_MD_CTX_reset                     newed       newed       newed       newed
+ EVP_MD_CTX_get_params                newed    initialised   updated
+ EVP_MD_CTX_set_params                newed    initialised   updated
+ EVP_MD_CTX_gettable_params           newed    initialised   updated
+ EVP_MD_CTX_settable_params           newed    initialised   updated
+
+=end man
+
+=begin html
+
+<table style="border:1px solid; border-collapse:collapse">
+<tr><th style="border:1px solid" align="left">Function Call</th>
+    <th style="border:1px solid" colspan="6">Current State</th></tr>
+<tr><th style="border:1px solid"></th>
+    <th style="border:1px solid" align="center">start</th>
+    <th style="border:1px solid" align="center">newed</th>
+    <th style="border:1px solid" align="center">initialised</th>
+    <th style="border:1px solid" align="center">updated</th>
+    <th style="border:1px solid" align="center">finaled</th>
+    <th style="border:1px solid" align="center">freed</th></tr>
+<tr><th style="border:1px solid" align="left">EVP_MD_CTX_new</th>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_DigestInit</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_DigestUpdate</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">updated</td>
+    <td style="border:1px solid" align="center">updated</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_DigestFinal</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">finaled</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_DigestFinalXOF</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">finaled</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_MD_CTX_free</th>
+    <td style="border:1px solid" align="center">freed</td>
+    <td style="border:1px solid" align="center">freed</td>
+    <td style="border:1px solid" align="center">freed</td>
+    <td style="border:1px solid" align="center">freed</td>
+    <td style="border:1px solid" align="center">freed</td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_MD_CTX_reset</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_MD_CTX_get_params</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center">updated</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_MD_CTX_set_params</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center">updated</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_MD_CTX_gettable_params</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center">updated</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+<tr><th style="border:1px solid" align="left">EVP_MD_CTX_settable_params</th>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center">newed</td>
+    <td style="border:1px solid" align="center">initialised</td>
+    <td style="border:1px solid" align="center">updated</td>
+    <td style="border:1px solid" align="center"></td>
+    <td style="border:1px solid" align="center"></td></tr>
+</table>
+
+=end html
+
+=head1 NOTES
+
+At some point the EVP layer will begin enforcing the transitions described
+herein.
+
+=head1 SEE ALSO
+
+L<provider-digest(7)>, L<EVP_DigestInit(3)>
+
+=head1 COPYRIGHT
+
+Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+
+Licensed under the Apache License 2.0 (the "License").  You may not use
+this file except in compliance with the License.  You can obtain a copy
+in the file LICENSE in the source distribution or at
+L<https://www.openssl.org/source/license.html>.
+
+=cut