1=pod
2
3=head1 NAME
4
5life_cycle-rand - The RAND algorithm life-cycle
6
7=head1 DESCRIPTION
8
9All random number generator (RANDs)
10go through a number of stages in their life-cycle:
11
12=over 4
13
14=item start
15
16This state represents the RAND before it has been allocated.  It is the
17starting state for any life-cycle transitions.
18
19=item newed
20
21This state represents the RAND after it has been allocated but unable to
22generate any output.
23
24=item instantiated
25
26This state represents the RAND when it is set up and capable of generating
27output.
28
29=item uninstantiated
30
31This state represents the RAND when it has been shutdown and it is no longer
32capable of generating output.
33
34=item freed
35
36This state is entered when the RAND is freed.  It is the terminal state
37for all life-cycle transitions.
38
39=back
40
41=head2 State Transition Diagram
42
43The usual life-cycle of a RAND is illustrated:
44
45=begin man
46
47                        +-------------------------+
48                        |          start          |
49                        +-------------------------+
50                          |
51                          | EVP_RAND_CTX_new
52                          v
53                        +-------------------------+
54                        |          newed          |
55                        +-------------------------+
56                          |
57                          | EVP_RAND_instantiate
58                          v
59    EVP_RAND_generate   +-------------------------+
60  +-------------------- |                         |
61  |                     |      instantiated       |
62  +-------------------> |                         | <+
63                        +-------------------------+  '
64                          |                          '
65                          | EVP_RAND_uninstantiate   ' EVP_RAND_instantiate
66                          v                          '
67                        +-------------------------+  '
68                        |     uninstantiated      | -+
69                        +-------------------------+
70                          |
71                          | EVP_RAND_CTX_free
72                          v
73                        +-------------------------+
74                        |          freed          |
75                        +-------------------------+
76
77=end man
78
79=for html <img src="img/rand.png">
80
81=head2 Formal State Transitions
82
83This section defines all of the legal state transitions.
84This is the canonical list.
85
86=begin man
87
88 Function Call              ------------------ Current State ------------------
89                            start   newed   instantiated  uninstantiated  freed
90 EVP_RAND_CTX_new           newed
91 EVP_RAND_instantiate            instantiated
92 EVP_RAND_generate                          instantiated
93 EVP_RAND_uninstantiate                    uninstantiated
94 EVP_RAND_CTX_free          freed   freed      freed          freed
95 EVP_RAND_CTX_get_params            newed   instantiated  uninstantiated  freed
96 EVP_RAND_CTX_set_params            newed   instantiated  uninstantiated  freed
97 EVP_RAND_CTX_gettable_params       newed   instantiated  uninstantiated  freed
98 EVP_RAND_CTX_settable_params       newed   instantiated  uninstantiated  freed
99
100=end man
101
102=begin html
103
104<table style="border:1px solid; border-collapse:collapse">
105<tr><th style="border:1px solid" align="left">Function Call</th>
106    <th style="border:1px solid" colspan="5">Current State</th></tr>
107<tr><th style="border:1px solid"></th>
108    <th style="border:1px solid" align="center">start</th>
109    <th style="border:1px solid" align="center">newed</th>
110    <th style="border:1px solid" align="center">instantiated</th>
111    <th style="border:1px solid" align="center">uninstantiated</th>
112    <th style="border:1px solid" align="center">freed</th></tr>
113<tr><th style="border:1px solid" align="left">EVP_RAND_CTX_new</th>
114    <td style="border:1px solid" align="center">newed</td>
115    <td style="border:1px solid" align="center"></td>
116    <td style="border:1px solid" align="center"></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_RAND_instantiate</th>
120    <td style="border:1px solid" align="center"></td>
121    <td style="border:1px solid" align="center">instantiated</td>
122    <td style="border:1px solid" align="center"></td>
123    <td style="border:1px solid" align="center"></td>
124    <td style="border:1px solid" align="center"></td></tr>
125<tr><th style="border:1px solid" align="left">EVP_RAND_generate</th>
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">instantiated</td>
129    <td style="border:1px solid" align="center"></td>
130    <td style="border:1px solid" align="center"></td></tr>
131<tr><th style="border:1px solid" align="left">EVP_RAND_uninstantiate</th>
132    <td style="border:1px solid" align="center"></td>
133    <td style="border:1px solid" align="center"></td>
134    <td style="border:1px solid" align="center">uninstantiated</td>
135    <td style="border:1px solid" align="center"></td>
136    <td style="border:1px solid" align="center"></td></tr>
137<tr><th style="border:1px solid" align="left">EVP_RAND_CTX_free</th>
138    <td style="border:1px solid" align="center">freed</td>
139    <td style="border:1px solid" align="center">freed</td>
140    <td style="border:1px solid" align="center">freed</td>
141    <td style="border:1px solid" align="center">freed</td>
142    <td style="border:1px solid" align="center"></td></tr>
143<tr><th style="border:1px solid" align="left">EVP_RAND_CTX_get_params</th>
144    <td style="border:1px solid" align="center"></td>
145    <td style="border:1px solid" align="center">newed</td>
146    <td style="border:1px solid" align="center">instantiated</td>
147    <td style="border:1px solid" align="center">uninstantiated</td>
148    <td style="border:1px solid" align="center"></td></tr>
149<tr><th style="border:1px solid" align="left">EVP_RAND_CTX_set_params</th>
150    <td style="border:1px solid" align="center"></td>
151    <td style="border:1px solid" align="center">newed</td>
152    <td style="border:1px solid" align="center">instantiated</td>
153    <td style="border:1px solid" align="center">uninstantiated</td>
154    <td style="border:1px solid" align="center"></td></tr>
155<tr><th style="border:1px solid" align="left">EVP_RAND_CTX_gettable_params</th>
156    <td style="border:1px solid" align="center"></td>
157    <td style="border:1px solid" align="center">newed</td>
158    <td style="border:1px solid" align="center">instantiated</td>
159    <td style="border:1px solid" align="center">uninstantiated</td>
160    <td style="border:1px solid" align="center"></td></tr>
161<tr><th style="border:1px solid" align="left">EVP_RAND_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">instantiated</td>
165    <td style="border:1px solid" align="center">uninstantiated</td>
166    <td style="border:1px solid" align="center"></td></tr>
167</table>
168
169=end html
170
171=head1 NOTES
172
173At some point the EVP layer will begin enforcing the transitions described
174herein.
175
176=head1 SEE ALSO
177
178L<provider-rand(7)>, L<EVP_RAND(3)>.
179
180=head1 HISTORY
181
182The provider RAND interface was introduced in OpenSSL 3.0.
183
184=head1 COPYRIGHT
185
186Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
187
188Licensed under the Apache License 2.0 (the "License").  You may not use
189this file except in compliance with the License.  You can obtain a copy
190in the file LICENSE in the source distribution or at
191L<https://www.openssl.org/source/license.html>.
192
193=cut
194