summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorPauli <pauli@openssl.org>2021-06-07 12:28:02 +1000
committerPauli <pauli@openssl.org>2021-06-08 18:55:32 +1000
commit7b9e2361778f71321ada562930e4661d2865fffd (patch)
treee2849ac1b5463935fbf1618a80388e9401142908 /doc
parent618523e728dc884bad481324bfe7b8967199c00d (diff)
doc: add digest life cycle documentation
Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/15637)
Diffstat (limited to 'doc')
-rw-r--r--doc/build.info9
-rw-r--r--doc/man7/life_cycle-digest.pod221
2 files changed, 229 insertions, 1 deletions
diff --git a/doc/build.info b/doc/build.info
index 946cc24032..2352f116ae 100644
--- a/doc/build.info
+++ b/doc/build.info
@@ -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
index 0000000000..5425f57dd5
--- /dev/null
+++ b/doc/man7/life_cycle-digest.pod
@@ -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