[openssl] master update
Dr. Paul Dale
pauli at openssl.org
Wed Jun 24 10:12:31 UTC 2020
The branch master has been updated
via 1c19ff3ce85ee22afcf87d28ce2cababef02a123 (commit)
via c9ed9307f2dfaba01b3c3b9e489fe358e6070b50 (commit)
via 9a31d1060a10a98e2132b2bc46918c7f5adf7703 (commit)
via 0c9fcfebf1b68a1736277c333dd6d59f35eb24f5 (commit)
via dc4e74ef6c10a13d8a8947c71e9ee70a0abe642e (commit)
via 6154f9a7cad7805a551343ed2111231aa2e00681 (commit)
via 3f078163df53bdd8a8cd5f03eec6abac73775973 (commit)
via f000e82898af251442ca52e81fc1ee45996090dc (commit)
via a998b85a4f0e706fa6a07b7feab557d9e570d372 (commit)
via bcdea3badfdbcdcd22591c5ea1744a19fb723fcf (commit)
via e1c5b1f6b4b92b819992cab702b6fdfc2960461c (commit)
via b47cfbb5f66f14daf44ebc1bb5ab4d6af916386e (commit)
via 5fdaa38febb7463dbd44f849b2930edcbd5f6bae (commit)
via f3a2570794b45f7f6391cb7f447b27c1ee758441 (commit)
via 4bffc025fd1b75b690f50552f443cbd3b1f1cbaf (commit)
via bcc4ae675edd66242aa27f3ed3b7d1bf6f1005e3 (commit)
via 2dee33dfb364c6e5d9339ddf9293991ec654b092 (commit)
via 714a1bb380ddb2bf7538f6a61f47ac87200e3e06 (commit)
via 94478bd8d7303dc1656d142caabaf05b2a2180eb (commit)
via c3fc2c53fb2b13832410f2bc2da628e5d7784869 (commit)
via 15dfa092d0e0bb9835942d1e3251e32b2f030d54 (commit)
from 922f156545c9c8397abbda49eb640f7a34969231 (commit)
- Log -----------------------------------------------------------------
commit 1c19ff3ce85ee22afcf87d28ce2cababef02a123
Author: Pauli <paul.dale at oracle.com>
Date: Thu Jun 11 11:07:13 2020 +1000
test: add test for generation of random data in chunks.
THe EVP_RAND wrapper works with the underlying RNG to produce the amount of
random data requested even if it is larger than the largest single generation
the source allows. This test verified that this works.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit c9ed9307f2dfaba01b3c3b9e489fe358e6070b50
Author: Pauli <paul.dale at oracle.com>
Date: Fri Jun 5 13:47:55 2020 +1000
test: update EVP tests to include DRBG testing
[extended tests]
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 9a31d1060a10a98e2132b2bc46918c7f5adf7703
Author: Pauli <paul.dale at oracle.com>
Date: Fri Jun 5 13:46:16 2020 +1000
NIST DRBG set data
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 0c9fcfebf1b68a1736277c333dd6d59f35eb24f5
Author: Pauli <paul.dale at oracle.com>
Date: Wed Jun 3 11:39:20 2020 +1000
include source root directory via -I for libnonfips.a
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit dc4e74ef6c10a13d8a8947c71e9ee70a0abe642e
Author: Pauli <paul.dale at oracle.com>
Date: Mon May 25 14:45:49 2020 +1000
evp_rand: documentation
EVP_RAND, the RNGs and provider-rand.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 6154f9a7cad7805a551343ed2111231aa2e00681
Author: Pauli <paul.dale at oracle.com>
Date: Wed May 20 14:15:04 2020 +1000
fips rand: DRBG KAT self test updates to provider model.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 3f078163df53bdd8a8cd5f03eec6abac73775973
Author: Pauli <paul.dale at oracle.com>
Date: Mon May 25 13:38:59 2020 +1000
update drbgtest to the provider model
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit f000e82898af251442ca52e81fc1ee45996090dc
Author: Pauli <paul.dale at oracle.com>
Date: Fri May 8 10:25:19 2020 +1000
CTR, HASH and HMAC DRBGs in provider
Move the three different DRBGs to the provider.
As part of the move, the DRBG specific data was pulled out of a common
structure and into their own structures. Only these smaller structures are
securely allocated. This saves quite a bit of secure memory:
+-------------------------------+
| DRBG | Bytes | Secure |
+--------------+-------+--------+
| HASH | 376 | 512 |
| HMAC | 168 | 256 |
| CTR | 176 | 256 |
| Common (new) | 320 | 0 |
| Common (old) | 592 | 1024 |
+--------------+-------+--------+
Bytes is the structure size on the X86/64.
Secure is the number of bytes of secure memory used (power of two allocator).
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit a998b85a4f0e706fa6a07b7feab557d9e570d372
Author: Dr. Matthias St. Pierre <matthias.st.pierre at ncp-e.com>
Date: Tue May 19 18:19:03 2020 +0200
rand: move drbg_{ctr,hash,hmac}.c without change to preserve history
Reviewed-by: Paul Dale <paul.dale at oracle.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit bcdea3badfdbcdcd22591c5ea1744a19fb723fcf
Author: Pauli <paul.dale at oracle.com>
Date: Tue May 12 12:20:28 2020 +1000
share rand_pool between libcrypto and providers
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit e1c5b1f6b4b92b819992cab702b6fdfc2960461c
Author: Pauli <paul.dale at oracle.com>
Date: Mon May 11 12:06:37 2020 +1000
rand: add seeding sources to providers.
Also separate out the TSC and RDRAND based sources into their own file in the
seeding subdirectory.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit b47cfbb5f66f14daf44ebc1bb5ab4d6af916386e
Author: Dr. Matthias St. Pierre <matthias.st.pierre at ncp-e.com>
Date: Tue May 19 18:18:48 2020 +0200
rand: move rand_{unix,vms,vxworks,win}.c without change to preserve history
Reviewed-by: Paul Dale <paul.dale at oracle.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 5fdaa38febb7463dbd44f849b2930edcbd5f6bae
Author: Pauli <paul.dale at oracle.com>
Date: Mon May 11 09:37:45 2020 +1000
params: add OSSL_PARAM helpers for time_t.
POSIX mandates that time_t is a signed integer but it doesn't specify the
lenght. Having wrappers lets uses ignore this.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit f3a2570794b45f7f6391cb7f447b27c1ee758441
Author: Pauli <paul.dale at oracle.com>
Date: Fri May 8 10:25:36 2020 +1000
test: add a test RNG.
The test RNG can provide pre-canned entropy and nonces for testing other
algorithms.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 4bffc025fd1b75b690f50552f443cbd3b1f1cbaf
Author: Pauli <paul.dale at oracle.com>
Date: Fri May 8 10:25:03 2020 +1000
CRNGT: continuous DRBG tests for providers
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit bcc4ae675edd66242aa27f3ed3b7d1bf6f1005e3
Author: Pauli <paul.dale at oracle.com>
Date: Fri May 8 10:24:12 2020 +1000
provider: add RAND algorithm tables
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 2dee33dfb364c6e5d9339ddf9293991ec654b092
Author: Pauli <paul.dale at oracle.com>
Date: Wed May 13 09:40:06 2020 +1000
app/list: add RNG list option
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 714a1bb380ddb2bf7538f6a61f47ac87200e3e06
Author: Pauli <paul.dale at oracle.com>
Date: Fri May 8 10:22:45 2020 +1000
rand: set up EVP and DRBG infrastructure for RAND from providers.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 94478bd8d7303dc1656d142caabaf05b2a2180eb
Author: Pauli <paul.dale at oracle.com>
Date: Thu May 21 08:45:29 2020 +1000
Move CRNG test to providers
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit c3fc2c53fb2b13832410f2bc2da628e5d7784869
Author: Pauli <paul.dale at oracle.com>
Date: Mon May 25 19:24:39 2020 +1000
core: add OSSL_INOUT_CALLBACK
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
commit 15dfa092d0e0bb9835942d1e3251e32b2f030d54
Author: Pauli <paul.dale at oracle.com>
Date: Thu Apr 30 14:46:12 2020 +1000
rand: core APIs for provider friendly random.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre at ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/11682)
-----------------------------------------------------------------------
Summary of changes:
apps/list.c | 81 +-
crypto/err/openssl.txt | 47 +-
crypto/evp/build.info | 2 +-
crypto/evp/evp_err.c | 15 +
crypto/evp/evp_local.h | 38 +
crypto/evp/evp_rand.c | 559 +
crypto/param_build.c | 7 +
crypto/params.c | 27 +
crypto/rand/build.info | 16 +-
crypto/rand/drbg_ctr.c | 503 -
crypto/rand/drbg_hmac.c | 256 -
crypto/rand/drbg_lib.c | 1067 +-
crypto/rand/rand_deprecated.c | 35 +
crypto/rand/rand_err.c | 10 +
crypto/rand/rand_lib.c | 703 +-
crypto/rand/rand_local.h | 314 +-
doc/man1/openssl-list.pod.in | 11 +
doc/man3/EVP_RAND.pod | 379 +
doc/man3/OSSL_PARAM_BLD.pod | 8 +-
doc/man3/OSSL_PARAM_int.pod | 42 +-
doc/man3/RAND_DRBG_new.pod | 54 +-
doc/man3/RAND_DRBG_set_callbacks.pod | 11 +-
doc/man3/RAND_add.pod | 3 +-
doc/man7/EVP_RAND-CTR-DRBG.pod | 108 +
doc/man7/EVP_RAND-HASH-DRBG.pod | 100 +
doc/man7/EVP_RAND-HMAC-DRBG.pod | 103 +
doc/man7/EVP_RAND-TEST-RAND.pod | 113 +
doc/man7/provider-rand.pod | 276 +
include/crypto/rand.h | 98 -
include/openssl/core.h | 3 +-
include/openssl/core_names.h | 32 +
include/openssl/core_numbers.h | 61 +
include/openssl/evp.h | 53 +
include/openssl/evperr.h | 8 +
include/openssl/param_build.h | 2 +
include/openssl/params.h | 5 +
include/openssl/rand.h | 1 -
include/openssl/rand_drbg.h | 8 +-
include/openssl/randerr.h | 6 +
include/openssl/types.h | 3 +
providers/build.info | 2 +-
providers/common/include/prov/providercommonerr.h | 29 +
providers/common/provider_err.c | 53 +
providers/defltprov.c | 10 +
providers/fips/fipsprov.c | 10 +
providers/fips/self_test_data.inc | 12 +-
providers/fips/self_test_kats.c | 108 +-
providers/implementations/build.info | 2 +-
.../implementations/include/prov/implementations.h | 9 +
providers/implementations/include/prov/rand_pool.h | 108 +
providers/implementations/include/prov/seeding.h | 34 +
providers/implementations/rands/build.info | 6 +
.../implementations/rands/crngt.c | 78 +-
providers/implementations/rands/drbg.c | 1036 +
providers/implementations/rands/drbg_ctr.c | 743 +
.../implementations/rands}/drbg_hash.c | 302 +-
providers/implementations/rands/drbg_hmac.c | 415 +
providers/implementations/rands/drbg_local.h | 277 +
providers/implementations/rands/rand_pool.c | 412 +
providers/implementations/rands/seeding/build.info | 11 +
.../implementations/rands/seeding/rand_cpu_x86.c | 61 +
providers/implementations/rands/seeding/rand_tsc.c | 47 +
.../implementations/rands/seeding}/rand_unix.c | 11 +-
.../implementations/rands/seeding}/rand_vms.c | 7 +-
.../implementations/rands/seeding}/rand_vxworks.c | 7 +-
.../implementations/rands/seeding}/rand_win.c | 23 +-
providers/implementations/rands/test_rng.c | 324 +
test/drbgtest.c | 538 +-
test/evp_extra_test.c | 33 +
test/evp_test.c | 286 +
test/param_build_test.c | 9 +
test/params_api_test.c | 28 +
test/recipes/30-test_evp.t | 3 +-
test/recipes/30-test_evp_data/evprand.txt | 79522 +++++++++++++++++++
test/testutil.h | 2 +-
util/libcrypto.num | 37 +-
util/other.syms | 5 +
77 files changed, 86550 insertions(+), 3218 deletions(-)
create mode 100644 crypto/evp/evp_rand.c
delete mode 100644 crypto/rand/drbg_ctr.c
delete mode 100644 crypto/rand/drbg_hmac.c
create mode 100644 crypto/rand/rand_deprecated.c
create mode 100644 doc/man3/EVP_RAND.pod
create mode 100644 doc/man7/EVP_RAND-CTR-DRBG.pod
create mode 100644 doc/man7/EVP_RAND-HASH-DRBG.pod
create mode 100644 doc/man7/EVP_RAND-HMAC-DRBG.pod
create mode 100644 doc/man7/EVP_RAND-TEST-RAND.pod
create mode 100644 doc/man7/provider-rand.pod
create mode 100644 providers/implementations/include/prov/rand_pool.h
create mode 100644 providers/implementations/include/prov/seeding.h
create mode 100644 providers/implementations/rands/build.info
rename crypto/rand/rand_crng_test.c => providers/implementations/rands/crngt.c (79%)
create mode 100644 providers/implementations/rands/drbg.c
create mode 100644 providers/implementations/rands/drbg_ctr.c
rename {crypto/rand => providers/implementations/rands}/drbg_hash.c (51%)
create mode 100644 providers/implementations/rands/drbg_hmac.c
create mode 100644 providers/implementations/rands/drbg_local.h
create mode 100644 providers/implementations/rands/rand_pool.c
create mode 100644 providers/implementations/rands/seeding/build.info
create mode 100644 providers/implementations/rands/seeding/rand_cpu_x86.c
create mode 100644 providers/implementations/rands/seeding/rand_tsc.c
rename {crypto/rand => providers/implementations/rands/seeding}/rand_unix.c (99%)
rename {crypto/rand => providers/implementations/rands/seeding}/rand_vms.c (99%)
rename {crypto/rand => providers/implementations/rands/seeding}/rand_vxworks.c (96%)
rename {crypto/rand => providers/implementations/rands/seeding}/rand_win.c (92%)
create mode 100644 providers/implementations/rands/test_rng.c
create mode 100644 test/recipes/30-test_evp_data/evprand.txt
diff --git a/apps/list.c b/apps/list.c
index a28f6b673e..ed93186254 100644
--- a/apps/list.c
+++ b/apps/list.c
@@ -63,6 +63,10 @@ static void list_ciphers(void)
STACK_OF(EVP_CIPHER) *ciphers = sk_EVP_CIPHER_new(cipher_cmp);
int i;
+ if (ciphers == NULL) {
+ BIO_printf(bio_err, "ERROR: Memory allocation\n");
+ return;
+ }
BIO_printf(bio_out, "Legacy:\n");
EVP_CIPHER_do_all_sorted(legacy_cipher_fn, bio_out);
@@ -134,6 +138,10 @@ static void list_digests(void)
STACK_OF(EVP_MD) *digests = sk_EVP_MD_new(md_cmp);
int i;
+ if (digests == NULL) {
+ BIO_printf(bio_err, "ERROR: Memory allocation\n");
+ return;
+ }
BIO_printf(bio_out, "Legacy:\n");
EVP_MD_do_all_sorted(list_md_fn, bio_out);
@@ -191,6 +199,10 @@ static void list_macs(void)
STACK_OF(EVP_MAC) *macs = sk_EVP_MAC_new(mac_cmp);
int i;
+ if (macs == NULL) {
+ BIO_printf(bio_err, "ERROR: Memory allocation\n");
+ return;
+ }
BIO_printf(bio_out, "Provided MACs:\n");
EVP_MAC_do_all_provided(NULL, collect_macs, macs);
sk_EVP_MAC_sort(macs);
@@ -248,6 +260,10 @@ static void list_kdfs(void)
STACK_OF(EVP_KDF) *kdfs = sk_EVP_KDF_new(kdf_cmp);
int i;
+ if (kdfs == NULL) {
+ BIO_printf(bio_err, "ERROR: Memory allocation\n");
+ return;
+ }
BIO_printf(bio_out, "Provided KDFs and PDFs:\n");
EVP_KDF_do_all_provided(NULL, collect_kdfs, kdfs);
sk_EVP_KDF_sort(kdfs);
@@ -277,6 +293,61 @@ static void list_kdfs(void)
sk_EVP_KDF_pop_free(kdfs, EVP_KDF_free);
}
+/*
+ * RANDs
+ */
+DEFINE_STACK_OF(EVP_RAND)
+
+static int rand_cmp(const EVP_RAND * const *a, const EVP_RAND * const *b)
+{
+ int ret = strcasecmp(EVP_RAND_name(*a), EVP_RAND_name(*b));
+
+ if (ret == 0)
+ ret = strcmp(OSSL_PROVIDER_name(EVP_RAND_provider(*a)),
+ OSSL_PROVIDER_name(EVP_RAND_provider(*b)));
+
+ return ret;
+}
+
+static void collect_rands(EVP_RAND *rand, void *stack)
+{
+ STACK_OF(EVP_RAND) *rand_stack = stack;
+
+ sk_EVP_RAND_push(rand_stack, rand);
+ EVP_RAND_up_ref(rand);
+}
+
+static void list_random_generators(void)
+{
+ STACK_OF(EVP_RAND) *rands = sk_EVP_RAND_new(rand_cmp);
+ int i;
+
+ if (rands == NULL) {
+ BIO_printf(bio_err, "ERROR: Memory allocation\n");
+ return;
+ }
+ BIO_printf(bio_out, "Provided RNGs and seed sources:\n");
+ EVP_RAND_do_all_provided(NULL, collect_rands, rands);
+ sk_EVP_RAND_sort(rands);
+ for (i = 0; i < sk_EVP_RAND_num(rands); i++) {
+ const EVP_RAND *m = sk_EVP_RAND_value(rands, i);
+
+ BIO_printf(bio_out, " %s", EVP_RAND_name(m));
+ BIO_printf(bio_out, " @ %s\n",
+ OSSL_PROVIDER_name(EVP_RAND_provider(m)));
+
+ if (verbose) {
+ print_param_types("retrievable algorithm parameters",
+ EVP_RAND_gettable_params(m), 4);
+ print_param_types("retrievable operation parameters",
+ EVP_RAND_gettable_ctx_params(m), 4);
+ print_param_types("settable operation parameters",
+ EVP_RAND_settable_ctx_params(m), 4);
+ }
+ }
+ sk_EVP_RAND_pop_free(rands, EVP_RAND_free);
+}
+
static void list_missing_help(void)
{
const FUNCTION *fp;
@@ -619,7 +690,7 @@ typedef enum HELPLIST_CHOICE {
OPT_COMMANDS, OPT_DIGEST_COMMANDS, OPT_MAC_ALGORITHMS, OPT_OPTIONS,
OPT_DIGEST_ALGORITHMS, OPT_CIPHER_COMMANDS, OPT_CIPHER_ALGORITHMS,
OPT_PK_ALGORITHMS, OPT_PK_METHOD, OPT_ENGINES, OPT_DISABLED,
- OPT_KDF_ALGORITHMS, OPT_MISSING_HELP, OPT_OBJECTS,
+ OPT_KDF_ALGORITHMS, OPT_RANDOM_GENERATORS, OPT_MISSING_HELP, OPT_OBJECTS,
OPT_PROV_ENUM
} HELPLIST_CHOICE;
@@ -639,6 +710,8 @@ const OPTIONS list_options[] = {
"List of message digest algorithms"},
{"kdf-algorithms", OPT_KDF_ALGORITHMS, '-',
"List of key derivation and pseudo random function algorithms"},
+ {"random-generators", OPT_RANDOM_GENERATORS, '-',
+ "List of random number generators"},
{"mac-algorithms", OPT_MAC_ALGORITHMS, '-',
"List of message authentication code algorithms"},
{"cipher-commands", OPT_CIPHER_COMMANDS, '-', "List of cipher commands"},
@@ -670,6 +743,7 @@ int list_main(int argc, char **argv)
int one = 0, done = 0;
struct {
unsigned int commands:1;
+ unsigned int random_generators:1;
unsigned int digest_commands:1;
unsigned int digest_algorithms:1;
unsigned int kdf_algorithms:1;
@@ -713,6 +787,9 @@ opthelp:
case OPT_KDF_ALGORITHMS:
todo.kdf_algorithms = 1;
break;
+ case OPT_RANDOM_GENERATORS:
+ todo.random_generators = 1;
+ break;
case OPT_MAC_ALGORITHMS:
todo.mac_algorithms = 1;
break;
@@ -760,6 +837,8 @@ opthelp:
if (todo.commands)
list_type(FT_general, one);
+ if (todo.random_generators)
+ list_random_generators();
if (todo.digest_commands)
list_type(FT_md, one);
if (todo.digest_algorithms)
diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt
index e5df6bc092..bc39b37cd0 100644
--- a/crypto/err/openssl.txt
+++ b/crypto/err/openssl.txt
@@ -375,10 +375,10 @@ CRMF_F_OSSL_CRMF_MSG_PUSH0_REGCTRL:110:OSSL_CRMF_MSG_push0_regCtrl
CRMF_F_OSSL_CRMF_MSG_PUSH0_REGINFO:111:OSSL_CRMF_MSG_push0_regInfo
CRMF_F_OSSL_CRMF_MSG_SET0_EXTENSIONS:112:OSSL_CRMF_MSG_set0_extensions
CRMF_F_OSSL_CRMF_MSG_SET0_SINGLEPUBINFO:113:OSSL_CRMF_MSG_set0_SinglePubInfo
+CRMF_F_OSSL_CRMF_MSG_SET0_VALIDITY:116:OSSL_CRMF_MSG_set0_validity
CRMF_F_OSSL_CRMF_MSG_SET_CERTREQID:114:OSSL_CRMF_MSG_set_certReqId
CRMF_F_OSSL_CRMF_MSG_SET_PKIPUBLICATIONINFO_ACTION:115:\
OSSL_CRMF_MSG_set_PKIPublicationInfo_action
-CRMF_F_OSSL_CRMF_MSG_SET0_VALIDITY:116:OSSL_CRMF_MSG_set0_validity
CRMF_F_OSSL_CRMF_PBMP_NEW:117:OSSL_CRMF_pbmp_new
CRMF_F_OSSL_CRMF_PBM_NEW:118:OSSL_CRMF_pbm_new
CRYPTO_F_CMAC_CTX_NEW:120:CMAC_CTX_new
@@ -2537,6 +2537,7 @@ EVP_R_EXPECTING_A_SIPHASH_KEY:175:expecting a siphash key
EVP_R_FETCH_FAILED:202:fetch failed
EVP_R_FINAL_ERROR:188:final error
EVP_R_FIPS_MODE_NOT_SUPPORTED:167:fips mode not supported
+EVP_R_GENERATE_ERROR:214:generate error
EVP_R_GET_RAW_KEY_FAILED:182:get raw key failed
EVP_R_ILLEGAL_SCRYPT_PARAMETERS:171:illegal scrypt parameters
EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS:204:inaccessible domain parameters
@@ -2549,12 +2550,14 @@ EVP_R_INVALID_FIPS_MODE:168:invalid fips mode
EVP_R_INVALID_IV_LENGTH:194:invalid iv length
EVP_R_INVALID_KEY:163:invalid key
EVP_R_INVALID_KEY_LENGTH:130:invalid key length
+EVP_R_INVALID_NULL_ALGORITHM:218:invalid null algorithm
EVP_R_INVALID_OPERATION:148:invalid operation
EVP_R_INVALID_PROVIDER_FUNCTIONS:193:invalid provider functions
EVP_R_INVALID_SALT_LENGTH:186:invalid salt length
EVP_R_KEYGEN_FAILURE:120:keygen failure
EVP_R_KEYMGMT_EXPORT_FAILURE:205:keymgmt export failure
EVP_R_KEY_SETUP_FAILED:180:key setup failed
+EVP_R_LOCKING_NOT_SUPPORTED:213:locking not supported
EVP_R_MEMORY_LIMIT_EXCEEDED:172:memory limit exceeded
EVP_R_MESSAGE_DIGEST_IS_NULL:159:message digest is null
EVP_R_METHOD_NOT_SUPPORTED:144:method not supported
@@ -2584,6 +2587,11 @@ EVP_R_PRIVATE_KEY_ENCODE_ERROR:146:private key encode error
EVP_R_PUBLIC_KEY_NOT_RSA:106:public key not rsa
EVP_R_SET_DEFAULT_PROPERTY_FAILURE:209:set default property failure
EVP_R_TOO_MANY_RECORDS:183:too many records
+EVP_R_UNABLE_TO_ENABLE_PARENT_LOCKING:212:unable to enable parent locking
+EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE:215:unable to get maximum request size
+EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH:216:unable to get random strength
+EVP_R_UNABLE_TO_LOCK_CONTEXT:211:unable to lock context
+EVP_R_UNABLE_TO_SET_CALLBACKS:217:unable to set callbacks
EVP_R_UNKNOWN_CIPHER:160:unknown cipher
EVP_R_UNKNOWN_DIGEST:161:unknown digest
EVP_R_UNKNOWN_KEY_TYPE:207:unknown key type
@@ -2813,8 +2821,10 @@ PROP_R_NO_VALUE:107:no value
PROP_R_PARSE_FAILED:108:parse failed
PROP_R_STRING_TOO_LONG:109:string too long
PROP_R_TRAILING_CHARACTERS:110:trailing characters
+PROV_R_ADDITIONAL_INPUT_TOO_LONG:184:additional input too long
PROV_R_AES_KEY_SETUP_FAILED:101:aes key setup failed
PROV_R_ALGORITHM_MISMATCH:173:algorithm mismatch
+PROV_R_ALREADY_INSTANTIATED:185:already instantiated
PROV_R_BAD_DECRYPT:100:bad decrypt
PROV_R_BAD_ENCODING:141:bad encoding
PROV_R_BAD_LENGTH:142:bad length
@@ -2822,16 +2832,26 @@ PROV_R_BAD_TLS_CLIENT_VERSION:161:bad tls client version
PROV_R_BN_ERROR:160:bn error
PROV_R_BOTH_MODE_AND_MODE_INT:127:both mode and mode int
PROV_R_CIPHER_OPERATION_FAILED:102:cipher operation failed
+PROV_R_DERIVATION_FUNCTION_INIT_FAILED:205:derivation function init failed
+PROV_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS:186:\
+ derivation function mandatory for fips
PROV_R_DIGEST_NOT_ALLOWED:174:digest not allowed
+PROV_R_DRBG_ALREADY_INITIALIZED:187:drbg already initialized
+PROV_R_ERROR_INSTANTIATING_DRBG:188:error instantiating drbg
+PROV_R_ERROR_RETRIEVING_ENTROPY:189:error retrieving entropy
+PROV_R_ERROR_RETRIEVING_NONCE:190:error retrieving nonce
PROV_R_FAILED_DURING_DERIVATION:164:failed during derivation
+PROV_R_FAILED_TO_CREATE_LOCK:180:failed to create lock
PROV_R_FAILED_TO_DECRYPT:162:failed to decrypt
PROV_R_FAILED_TO_GENERATE_KEY:121:failed to generate key
PROV_R_FAILED_TO_GET_PARAMETER:103:failed to get parameter
PROV_R_FAILED_TO_SET_PARAMETER:104:failed to set parameter
PROV_R_FAILED_TO_SIGN:175:failed to sign
+PROV_R_GENERATE_ERROR:191:generate error
PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE:165:\
illegal or unsupported padding mode
PROV_R_INAVLID_UKM_LENGTH:146:inavlid ukm length
+PROV_R_INSUFFICIENT_DRBG_STRENGTH:181:insufficient drbg strength
PROV_R_INVALID_AAD:108:invalid aad
PROV_R_INVALID_CONSTANT_LENGTH:157:invalid constant length
PROV_R_INVALID_CURVE:176:invalid curve
@@ -2858,6 +2878,7 @@ PROV_R_INVALID_SIGNATURE_SIZE:179:invalid signature size
PROV_R_INVALID_TAG:110:invalid tag
PROV_R_INVALID_TAGLEN:118:invalid taglen
PROV_R_INVALID_X931_DIGEST:170:invalid x931 digest
+PROV_R_IN_ERROR_STATE:192:in error state
PROV_R_KEY_SIZE_TOO_SMALL:171:key size too small
PROV_R_MISSING_CEK_ALG:144:missing cek alg
PROV_R_MISSING_CIPHER:155:missing cipher
@@ -2872,6 +2893,7 @@ PROV_R_MISSING_SEED:140:missing seed
PROV_R_MISSING_SESSION_ID:133:missing session id
PROV_R_MISSING_TYPE:134:missing type
PROV_R_MISSING_XCGHASH:135:missing xcghash
+PROV_R_NOT_INSTANTIATED:193:not instantiated
PROV_R_NOT_SUPPORTED:136:not supported
PROV_R_NOT_XOF_OR_INVALID_LENGTH:113:not xof or invalid length
PROV_R_NO_KEY_SET:114:no key set
@@ -2879,12 +2901,28 @@ PROV_R_NO_PARAMETERS_SET:177:no parameters set
PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE:178:\
operation not supported for this keytype
PROV_R_OUTPUT_BUFFER_TOO_SMALL:106:output buffer too small
+PROV_R_PARENT_LOCKING_NOT_ENABLED:182:parent locking not enabled
+PROV_R_PARENT_STRENGTH_TOO_WEAK:194:parent strength too weak
+PROV_R_PERSONALISATION_STRING_TOO_LONG:195:personalisation string too long
PROV_R_PSS_SALTLEN_TOO_SMALL:172:pss saltlen too small
PROV_R_READ_KEY:159:read key
+PROV_R_REQUEST_TOO_LARGE_FOR_DRBG:196:request too large for drbg
+PROV_R_REQUIRE_CTR_MODE_CIPHER:206:require ctr mode cipher
+PROV_R_RESEED_ERROR:197:reseed error
PROV_R_TAG_NOTSET:119:tag notset
PROV_R_TAG_NOT_NEEDED:120:tag not needed
+PROV_R_UNABLE_TO_FIND_CIPHERS:207:unable to find ciphers
+PROV_R_UNABLE_TO_GET_ENTROPY:202:unable to get entropy
+PROV_R_UNABLE_TO_GET_NONCE:203:unable to get nonce
+PROV_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER:198:\
+ unable to get parent reseed prop counter
+PROV_R_UNABLE_TO_GET_PARENT_STRENGTH:199:unable to get parent strength
+PROV_R_UNABLE_TO_GET_RESEED_PROP_CTR:200:unable to get reseed prop ctr
+PROV_R_UNABLE_TO_INITIALISE_CIPHERS:208:unable to initialise ciphers
PROV_R_UNABLE_TO_LOAD_SHA1:143:unable to load sha1
PROV_R_UNABLE_TO_LOAD_SHA256:147:unable to load sha256
+PROV_R_UNABLE_TO_LOCK_PARENT:201:unable to lock parent
+PROV_R_UNABLE_TO_RESEED:204:unable to reseed
PROV_R_UNKNOWN_PADDING_TYPE:163:unknown padding type
PROV_R_UNSUPPORTED_CEK_ALG:145:unsupported cek alg
PROV_R_UNSUPPORTED_KEY_SIZE:153:unsupported key size
@@ -2893,6 +2931,7 @@ PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS:152:unsupported number of rounds
PROV_R_VALUE_ERROR:138:value error
PROV_R_WRONG_FINAL_BLOCK_LENGTH:107:wrong final block length
PROV_R_WRONG_OUTPUT_BUFFER_SIZE:139:wrong output buffer size
+PROV_R_XOF_DIGESTS_NOT_ALLOWED:183:xof digests not allowed
PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE:148:xts data unit is too large
PROV_R_XTS_DUPLICATED_KEYS:149:xts duplicated keys
RAND_R_ADDITIONAL_INPUT_TOO_LONG:102:additional input too long
@@ -2915,6 +2954,7 @@ RAND_R_FAILED_TO_CREATE_LOCK:126:failed to create lock
RAND_R_FUNC_NOT_IMPLEMENTED:101:Function not implemented
RAND_R_FWRITE_ERROR:123:Error writing file
RAND_R_GENERATE_ERROR:112:generate error
+RAND_R_INSUFFICIENT_DRBG_STRENGTH:139:insufficient drbg strength
RAND_R_INTERNAL_ERROR:113:internal error
RAND_R_IN_ERROR_STATE:114:in error state
RAND_R_NOT_A_REGULAR_FILE:122:Not a regular file
@@ -2933,6 +2973,11 @@ RAND_R_RESEED_ERROR:118:reseed error
RAND_R_SELFTEST_FAILURE:119:selftest failure
RAND_R_TOO_LITTLE_NONCE_REQUESTED:135:too little nonce requested
RAND_R_TOO_MUCH_NONCE_REQUESTED:136:too much nonce requested
+RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER:141:\
+ unable to get parent reseed prop counter
+RAND_R_UNABLE_TO_GET_PARENT_STRENGTH:138:unable to get parent strength
+RAND_R_UNABLE_TO_GET_RESEED_PROP_CTR:142:unable to get reseed prop ctr
+RAND_R_UNABLE_TO_LOCK_PARENT:140:unable to lock parent
RAND_R_UNSUPPORTED_DRBG_FLAGS:132:unsupported drbg flags
RAND_R_UNSUPPORTED_DRBG_TYPE:120:unsupported drbg type
RSA_R_ALGORITHM_MISMATCH:100:algorithm mismatch
diff --git a/crypto/evp/build.info b/crypto/evp/build.info
index 82669c1816..ccd8357453 100644
--- a/crypto/evp/build.info
+++ b/crypto/evp/build.info
@@ -2,7 +2,7 @@ LIBS=../../libcrypto
$COMMON=digest.c evp_enc.c evp_lib.c evp_fetch.c cmeth_lib.c evp_utils.c \
mac_lib.c mac_meth.c keymgmt_meth.c keymgmt_lib.c kdf_lib.c kdf_meth.c \
m_sigver.c pmeth_lib.c signature.c p_lib.c pmeth_gn.c exchange.c \
- pmeth_check.c
+ pmeth_check.c evp_rand.c
SOURCE[../../libcrypto]=$COMMON\
encode.c evp_key.c evp_cnf.c \
diff --git a/crypto/evp/evp_err.c b/crypto/evp/evp_err.c
index 3dba7f2931..239efaa51a 100644
--- a/crypto/evp/evp_err.c
+++ b/crypto/evp/evp_err.c
@@ -70,6 +70,7 @@ static const ERR_STRING_DATA EVP_str_reasons[] = {
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_FINAL_ERROR), "final error"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_FIPS_MODE_NOT_SUPPORTED),
"fips mode not supported"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_GENERATE_ERROR), "generate error"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_GET_RAW_KEY_FAILED), "get raw key failed"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_ILLEGAL_SCRYPT_PARAMETERS),
"illegal scrypt parameters"},
@@ -87,6 +88,8 @@ static const ERR_STRING_DATA EVP_str_reasons[] = {
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_IV_LENGTH), "invalid iv length"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_KEY), "invalid key"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_KEY_LENGTH), "invalid key length"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_NULL_ALGORITHM),
+ "invalid null algorithm"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_OPERATION), "invalid operation"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_PROVIDER_FUNCTIONS),
"invalid provider functions"},
@@ -96,6 +99,8 @@ static const ERR_STRING_DATA EVP_str_reasons[] = {
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_KEYMGMT_EXPORT_FAILURE),
"keymgmt export failure"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_KEY_SETUP_FAILED), "key setup failed"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_LOCKING_NOT_SUPPORTED),
+ "locking not supported"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_MEMORY_LIMIT_EXCEEDED),
"memory limit exceeded"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_MESSAGE_DIGEST_IS_NULL),
@@ -138,6 +143,16 @@ static const ERR_STRING_DATA EVP_str_reasons[] = {
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_SET_DEFAULT_PROPERTY_FAILURE),
"set default property failure"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_TOO_MANY_RECORDS), "too many records"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNABLE_TO_ENABLE_PARENT_LOCKING),
+ "unable to enable parent locking"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE),
+ "unable to get maximum request size"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH),
+ "unable to get random strength"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNABLE_TO_LOCK_CONTEXT),
+ "unable to lock context"},
+ {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNABLE_TO_SET_CALLBACKS),
+ "unable to set callbacks"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_CIPHER), "unknown cipher"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_DIGEST), "unknown digest"},
{ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_KEY_TYPE), "unknown key type"},
diff --git a/crypto/evp/evp_local.h b/crypto/evp/evp_local.h
index de7d69a26c..132534464f 100644
--- a/crypto/evp/evp_local.h
+++ b/crypto/evp/evp_local.h
@@ -10,6 +10,7 @@
/* EVP_MD_CTX related stuff */
#include <openssl/core_numbers.h>
+#include "internal/refcount.h"
#define EVP_CTRL_RET_UNSUPPORTED -1
@@ -65,6 +66,43 @@ struct evp_kdf_ctx_st {
void *data; /* Algorithm-specific data */
} /* EVP_KDF_CTX */ ;
+struct evp_rand_ctx_st {
+ EVP_RAND *meth; /* Method structure */
+ void *data; /* Algorithm-specific data */
+ size_t max_request; /*
+ * Cached: maximum number of bytes generated
+ * in a single call to the generate function
+ */
+ unsigned int strength; /* Cached: bit strength of generator */
+} /* EVP_RAND_CTX */ ;
+
+struct evp_rand_st {
+ OSSL_PROVIDER *prov;
+ int name_id;
+ CRYPTO_REF_COUNT refcnt;
+ CRYPTO_RWLOCK *refcnt_lock;
+
+ const OSSL_DISPATCH *dispatch;
+ OSSL_OP_rand_newctx_fn *newctx;
+ OSSL_OP_rand_freectx_fn *freectx;
+ OSSL_OP_rand_instantiate_fn *instantiate;
+ OSSL_OP_rand_uninstantiate_fn *uninstantiate;
+ OSSL_OP_rand_generate_fn *generate;
+ OSSL_OP_rand_reseed_fn *reseed;
+ OSSL_OP_rand_nonce_fn *nonce;
+ OSSL_OP_rand_enable_locking_fn *enable_locking;
+ OSSL_OP_rand_lock_fn *lock;
+ OSSL_OP_rand_unlock_fn *unlock;
+ OSSL_OP_rand_gettable_params_fn *gettable_params;
+ OSSL_OP_rand_gettable_ctx_params_fn *gettable_ctx_params;
+ OSSL_OP_rand_settable_ctx_params_fn *settable_ctx_params;
+ OSSL_OP_rand_get_params_fn *get_params;
+ OSSL_OP_rand_get_ctx_params_fn *get_ctx_params;
+ OSSL_OP_rand_set_ctx_params_fn *set_ctx_params;
+ OSSL_OP_rand_set_callbacks_fn *set_callbacks;
+ OSSL_OP_rand_verify_zeroization_fn *verify_zeroization;
+} /* EVP_RAND */ ;
+
struct evp_keymgmt_st {
int id; /* libcrypto internal */
diff --git a/crypto/evp/evp_rand.c b/crypto/evp/evp_rand.c
new file mode 100644
index 0000000000..f7bc321f29
--- /dev/null
+++ b/crypto/evp/evp_rand.c
@@ -0,0 +1,559 @@
+/*
+ * Copyright 2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/evp.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/engine.h>
+#include <openssl/evp.h>
+#include <openssl/x509v3.h>
+#include <openssl/rand.h>
+#include <openssl/core.h>
+#include <openssl/core_names.h>
+#include <openssl/crypto.h>
+#include "crypto/asn1.h"
+#include "crypto/evp.h"
+#include "internal/cryptlib.h"
+#include "internal/numbers.h"
+#include "internal/provider.h"
+#include "evp_local.h"
+
+static int evp_rand_up_ref(void *vrand)
+{
+ EVP_RAND *rand = (EVP_RAND *)vrand;
+ int ref = 0;
+
+ if (rand != NULL)
+ return CRYPTO_UP_REF(&rand->refcnt, &ref, rand->refcnt_lock);
+ return 1;
+}
+
+static void evp_rand_free(void *vrand){
+ EVP_RAND *rand = (EVP_RAND *)vrand;
+ int ref = 0;
+
+ if (rand != NULL) {
+ CRYPTO_DOWN_REF(&rand->refcnt, &ref, rand->refcnt_lock);
+ if (ref <= 0) {
+ ossl_provider_free(rand->prov);
+ CRYPTO_THREAD_lock_free(rand->refcnt_lock);
+ OPENSSL_free(rand);
+ }
+ }
+}
+
+static void *evp_rand_new(void)
+{
+ EVP_RAND *rand = OPENSSL_zalloc(sizeof(*rand));
+
+ if (rand == NULL
+ || (rand->refcnt_lock = CRYPTO_THREAD_lock_new()) == NULL) {
+ OPENSSL_free(rand);
+ return NULL;
+ }
+ rand->refcnt = 1;
+ return rand;
+}
+
+/* Enable locking of the underlying DRBG/RAND if available */
+int EVP_RAND_enable_locking(EVP_RAND_CTX *rand)
+{
+ if (rand->meth->enable_locking != NULL)
+ return rand->meth->enable_locking(rand->data);
+ EVPerr(0, EVP_R_LOCKING_NOT_SUPPORTED);
+ return 0;
+}
+
+/* Lock the underlying DRBG/RAND if available */
+static int evp_rand_lock(EVP_RAND_CTX *rand)
+{
+ if (rand->meth->lock != NULL)
+ return rand->meth->lock(rand->data);
+ return 1;
+}
+
+/* Unlock the underlying DRBG/RAND if available */
+static void evp_rand_unlock(EVP_RAND_CTX *rand)
+{
+ if (rand->meth->unlock != NULL)
+ rand->meth->unlock(rand->data);
+}
+
+static void *evp_rand_from_dispatch(int name_id,
+ const OSSL_DISPATCH *fns,
+ OSSL_PROVIDER *prov)
+{
+ EVP_RAND *rand = NULL;
+ int fnrandcnt = 0, fnctxcnt = 0, fnlockcnt = 0;
+#ifdef FIPS_MODULE
+ int fnzeroizecnt = 0;
+#endif
+
+ if ((rand = evp_rand_new()) == NULL) {
+ EVPerr(0, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+ rand->name_id = name_id;
+ rand->dispatch = fns;
+ for (; fns->function_id != 0; fns++) {
+ switch (fns->function_id) {
+ case OSSL_FUNC_RAND_NEWCTX:
+ if (rand->newctx != NULL)
+ break;
+ rand->newctx = OSSL_get_OP_rand_newctx(fns);
+ fnctxcnt++;
+ break;
+ case OSSL_FUNC_RAND_FREECTX:
+ if (rand->freectx != NULL)
+ break;
+ rand->freectx = OSSL_get_OP_rand_freectx(fns);
+ fnctxcnt++;
+ break;
+ case OSSL_FUNC_RAND_INSTANTIATE:
+ if (rand->instantiate != NULL)
+ break;
+ rand->instantiate = OSSL_get_OP_rand_instantiate(fns);
+ fnrandcnt++;
+ break;
+ case OSSL_FUNC_RAND_UNINSTANTIATE:
+ if (rand->uninstantiate != NULL)
+ break;
+ rand->uninstantiate = OSSL_get_OP_rand_uninstantiate(fns);
+ fnrandcnt++;
+ break;
+ case OSSL_FUNC_RAND_GENERATE:
+ if (rand->generate != NULL)
+ break;
+ rand->generate = OSSL_get_OP_rand_generate(fns);
+ fnrandcnt++;
+ break;
+ case OSSL_FUNC_RAND_RESEED:
+ if (rand->reseed != NULL)
+ break;
+ rand->reseed = OSSL_get_OP_rand_reseed(fns);
+ break;
+ case OSSL_FUNC_RAND_NONCE:
+ if (rand->nonce != NULL)
+ break;
+ rand->nonce = OSSL_get_OP_rand_nonce(fns);
+ break;
+ case OSSL_FUNC_RAND_SET_CALLBACKS:
+ if (rand->set_callbacks != NULL)
+ break;
+ rand->set_callbacks = OSSL_get_OP_rand_set_callbacks(fns);
+ break;
+ case OSSL_FUNC_RAND_ENABLE_LOCKING:
+ if (rand->enable_locking != NULL)
+ break;
+ rand->enable_locking = OSSL_get_OP_rand_enable_locking(fns);
+ fnlockcnt++;
+ break;
+ case OSSL_FUNC_RAND_LOCK:
+ if (rand->lock != NULL)
+ break;
+ rand->lock = OSSL_get_OP_rand_lock(fns);
+ fnlockcnt++;
+ break;
+ case OSSL_FUNC_RAND_UNLOCK:
+ if (rand->unlock != NULL)
+ break;
+ rand->unlock = OSSL_get_OP_rand_unlock(fns);
+ fnlockcnt++;
+ break;
+ case OSSL_FUNC_RAND_GETTABLE_PARAMS:
+ if (rand->gettable_params != NULL)
+ break;
+ rand->gettable_params =
+ OSSL_get_OP_rand_gettable_params(fns);
+ break;
+ case OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS:
+ if (rand->gettable_ctx_params != NULL)
+ break;
+ rand->gettable_ctx_params =
+ OSSL_get_OP_rand_gettable_ctx_params(fns);
+ break;
+ case OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS:
+ if (rand->settable_ctx_params != NULL)
+ break;
+ rand->settable_ctx_params =
+ OSSL_get_OP_rand_settable_ctx_params(fns);
+ break;
+ case OSSL_FUNC_RAND_GET_PARAMS:
+ if (rand->get_params != NULL)
+ break;
+ rand->get_params = OSSL_get_OP_rand_get_params(fns);
+ break;
+ case OSSL_FUNC_RAND_GET_CTX_PARAMS:
+ if (rand->get_ctx_params != NULL)
+ break;
+ rand->get_ctx_params = OSSL_get_OP_rand_get_ctx_params(fns);
+ break;
+ case OSSL_FUNC_RAND_SET_CTX_PARAMS:
+ if (rand->set_ctx_params != NULL)
+ break;
+ rand->set_ctx_params = OSSL_get_OP_rand_set_ctx_params(fns);
+ break;
+ case OSSL_FUNC_RAND_VERIFY_ZEROIZATION:
+ if (rand->verify_zeroization != NULL)
+ break;
+ rand->verify_zeroization = OSSL_get_OP_rand_verify_zeroization(fns);
+#ifdef FIPS_MODULE
+ fnzeroizecnt++;
+#endif
+ break;
+ }
+ }
+ /*
+ * In order to be a consistent set of functions we must have at least
+ * a complete set of "rand" functions and a complete set of context
+ * management functions. In FIPS mode, we also require the zeroization
+ * verification function.
+ *
+ * In addition, if locking can be enabled, we need a complete set of
+ * locking functions.
+ */
+ if (fnrandcnt != 3
+ || fnctxcnt != 2
+ || (fnlockcnt != 0 && fnlockcnt != 3)
+#ifdef FIPS_MODULE
+ || fnzeroizecnt != 1
+#endif
+ ) {
+ evp_rand_free(rand);
+ ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_PROVIDER_FUNCTIONS);
+ return NULL;
+ }
+
+ if (prov != NULL && !ossl_provider_up_ref(prov)) {
+ evp_rand_free(rand);
+ ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
+ return NULL;
+ }
+ rand->prov = prov;
+
+ return rand;
+}
+
+EVP_RAND *EVP_RAND_fetch(OPENSSL_CTX *libctx, const char *algorithm,
+ const char *properties)
+{
+ return evp_generic_fetch(libctx, OSSL_OP_RAND, algorithm, properties,
+ evp_rand_from_dispatch, evp_rand_up_ref,
+ evp_rand_free);
+}
+
+int EVP_RAND_up_ref(EVP_RAND *rand)
+{
+ return evp_rand_up_ref(rand);
+}
+
+void EVP_RAND_free(EVP_RAND *rand)
+{
+ evp_rand_free(rand);
+}
+
+int EVP_RAND_number(const EVP_RAND *rand)
+{
+ return rand->name_id;
+}
+
+const char *EVP_RAND_name(const EVP_RAND *rand)
+{
+ return evp_first_name(rand->prov, rand->name_id);
+}
+
+int EVP_RAND_is_a(const EVP_RAND *rand, const char *name)
+{
+ return evp_is_a(rand->prov, rand->name_id, NULL, name);
+}
+
+const OSSL_PROVIDER *EVP_RAND_provider(const EVP_RAND *rand)
+{
+ return rand->prov;
+}
+
+int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[])
+{
+ if (rand->get_params != NULL)
+ return rand->get_params(params);
+ return 1;
+}
+
+EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent)
+{
+ EVP_RAND_CTX *ctx;
+ void *parent_ctx = NULL;
+ const OSSL_DISPATCH *parent_dispatch = NULL;
+
+ if (rand == NULL) {
+ EVPerr(0, EVP_R_INVALID_NULL_ALGORITHM);
+ return NULL;
+ }
+
+ ctx = OPENSSL_zalloc(sizeof(*ctx));
+ if (ctx == NULL) {
+ EVPerr(0, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+ if (parent != NULL) {
+ if (!EVP_RAND_enable_locking(parent)) {
+ EVPerr(0, EVP_R_UNABLE_TO_ENABLE_PARENT_LOCKING);
+ OPENSSL_free(ctx);
+ return NULL;
+ }
+ parent_ctx = parent->data;
+ parent_dispatch = parent->meth->dispatch;
+ }
+ if ((ctx->data = rand->newctx(ossl_provider_ctx(rand->prov), parent_ctx,
+ parent_dispatch)) == NULL
+ || !EVP_RAND_up_ref(rand)) {
+ EVPerr(0, ERR_R_MALLOC_FAILURE);
+ rand->freectx(ctx->data);
+ OPENSSL_free(ctx);
+ return NULL;
+ }
+ ctx->meth = rand;
+ return ctx;
+}
+
+void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx)
+{
+ if (ctx != NULL) {
+ ctx->meth->freectx(ctx->data);
+ ctx->data = NULL;
+ EVP_RAND_free(ctx->meth);
+ OPENSSL_free(ctx);
+ }
+}
+
+EVP_RAND *EVP_RAND_CTX_rand(EVP_RAND_CTX *ctx)
+{
+ return ctx->meth;
+}
+
+int EVP_RAND_get_ctx_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[])
+{
+ int res = 1;
+
+ if (ctx->meth->get_ctx_params != NULL) {
+ if (!evp_rand_lock(ctx))
+ return 0;
+ res = ctx->meth->get_ctx_params(ctx->data, params);
+ evp_rand_unlock(ctx);
+ }
+ return res;
+}
+
+int EVP_RAND_set_ctx_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[])
+{
+ int res = 1;
+
+ if (ctx->meth->set_ctx_params != NULL) {
+ if (!evp_rand_lock(ctx))
+ return 0;
+ res = ctx->meth->set_ctx_params(ctx->data, params);
+ evp_rand_unlock(ctx);
+ /* Clear out the cache state because the values can change on a set */
+ ctx->strength = 0;
+ ctx->max_request = 0;
+ }
+ return res;
+}
+
+const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand)
+{
+ return rand->gettable_params == NULL ? NULL : rand->gettable_params();
+}
+
+const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand)
+{
+ return rand->gettable_ctx_params == NULL ? NULL
+ : rand->gettable_ctx_params();
+}
+
+const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand)
+{
+ return rand->settable_ctx_params == NULL ? NULL
+ :rand->settable_ctx_params();
+}
+
+void EVP_RAND_do_all_provided(OPENSSL_CTX *libctx,
+ void (*fn)(EVP_RAND *rand, void *arg),
+ void *arg)
+{
+ evp_generic_do_all(libctx, OSSL_OP_RAND,
+ (void (*)(void *, void *))fn, arg,
+ evp_rand_from_dispatch, evp_rand_free);
+}
+
+void EVP_RAND_names_do_all(const EVP_RAND *rand,
+ void (*fn)(const char *name, void *data),
+ void *data)
+{
+ if (rand->prov != NULL)
+ evp_names_do_all(rand->prov, rand->name_id, fn, data);
+}
+
+int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr, size_t pstr_len)
+{
+ int res;
+
+ if (!evp_rand_lock(ctx))
+ return 0;
+ res = ctx->meth->instantiate(ctx->data, strength, prediction_resistance,
+ pstr, pstr_len);
+ evp_rand_unlock(ctx);
+ return res;
+}
+
+int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx)
+{
+ int res;
+
+ if (!evp_rand_lock(ctx))
+ return 0;
+ res = ctx->meth->uninstantiate(ctx->data);
+ evp_rand_unlock(ctx);
+ return res;
+}
+
+int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *addin, size_t addin_len)
+{
+ size_t chunk;
+ OSSL_PARAM params[2];
+ int res = 0;
+
+ if (!evp_rand_lock(ctx))
+ return 0;
+ if (ctx->max_request == 0) {
+ params[0] = OSSL_PARAM_construct_size_t(OSSL_DRBG_PARAM_MAX_REQUEST,
+ &chunk);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!EVP_RAND_get_ctx_params(ctx, params) || chunk == 0) {
+ EVPerr(0, EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE);
+ goto err;
+ }
+ ctx->max_request = chunk;
+ }
+ for (; outlen > 0; outlen -= chunk, out += chunk) {
+ chunk = outlen > ctx->max_request ? ctx->max_request : outlen;
+ if (!ctx->meth->generate(ctx->data, out, chunk, strength,
+ prediction_resistance, addin, addin_len)) {
+ EVPerr(0, EVP_R_GENERATE_ERROR);
+ goto err;
+ }
+ /*
+ * Prediction resistance is only relevant the first time around,
+ * subsequently, the DRBG has already been properly reseeded.
+ */
+ prediction_resistance = 0;
+ }
+ res = 1;
+err:
+ evp_rand_unlock(ctx);
+ return res;
+}
+
+int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *addin, size_t addin_len)
+{
+ int res = 1;
+
+ if (!evp_rand_lock(ctx))
+ return 0;
+ if (ctx->meth->reseed != NULL)
+ res = ctx->meth->reseed(ctx->data, prediction_resistance,
+ ent, ent_len, addin, addin_len);
+ evp_rand_unlock(ctx);
+ return res;
+}
+
+int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen)
+{
+ int res = 1;
+ unsigned int str = EVP_RAND_strength(ctx);
+
+ if (!evp_rand_lock(ctx))
+ return 0;
+ if (ctx->meth->nonce == NULL
+ || !ctx->meth->nonce(ctx->data, out, str, outlen, outlen))
+ res = ctx->meth->generate(ctx->data, out, outlen, str, 0, NULL, 0);
+ evp_rand_unlock(ctx);
+ return res;
+}
+
+unsigned int EVP_RAND_strength(EVP_RAND_CTX *ctx)
+{
+ OSSL_PARAM params[2];
+ unsigned int t;
+ int res;
+
+ if (ctx->strength == 0) {
+ params[0] = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH, &t);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!evp_rand_lock(ctx))
+ return 0;
+ res = EVP_RAND_get_ctx_params(ctx, params);
+ evp_rand_unlock(ctx);
+ if (!res)
+ return 0;
+ ctx->strength = t;
+ }
+ return ctx->strength;
+}
+
+int EVP_RAND_state(EVP_RAND_CTX *ctx)
+{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ int status, res;
+
+ params[0] = OSSL_PARAM_construct_int(OSSL_RAND_PARAM_STATE,
+ &status);
+ if (!evp_rand_lock(ctx))
+ return 0;
+ res = EVP_RAND_get_ctx_params(ctx, params);
+ evp_rand_unlock(ctx);
+ if (!res)
+ status = EVP_RAND_STATE_ERROR;
+ return status;
+}
+
+int EVP_RAND_set_callbacks(EVP_RAND_CTX *ctx,
+ OSSL_INOUT_CALLBACK *get_entropy,
+ OSSL_CALLBACK *cleanup_entropy,
+ OSSL_INOUT_CALLBACK *get_nonce,
+ OSSL_CALLBACK *cleanup_nonce, void *arg)
+{
+ if (ctx->meth->set_callbacks == NULL) {
+ EVPerr(0, EVP_R_UNABLE_TO_SET_CALLBACKS);
+ return 0;
+ }
+ ctx->meth->set_callbacks(ctx->data, get_entropy, cleanup_entropy,
+ get_nonce, cleanup_nonce, arg);
+ return 1;
+}
+
+int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx)
+{
+ int res = 0;
+
+ if (ctx->meth->verify_zeroization != NULL) {
+ if (!evp_rand_lock(ctx))
+ return 0;
+ res = ctx->meth->verify_zeroization(ctx->data);
+ evp_rand_unlock(ctx);
+ }
+ return res;
+}
diff --git a/crypto/param_build.c b/crypto/param_build.c
index 76522cd377..de829d354f 100644
--- a/crypto/param_build.c
+++ b/crypto/param_build.c
@@ -190,6 +190,13 @@ int OSSL_PARAM_BLD_push_size_t(OSSL_PARAM_BLD *bld, const char *key,
OSSL_PARAM_UNSIGNED_INTEGER);
}
+int OSSL_PARAM_BLD_push_time_t(OSSL_PARAM_BLD *bld, const char *key,
+ time_t num)
+{
+ return param_push_num(bld, key, &num, sizeof(num),
+ OSSL_PARAM_INTEGER);
+}
+
int OSSL_PARAM_BLD_push_double(OSSL_PARAM_BLD *bld, const char *key,
double num)
{
diff --git a/crypto/params.c b/crypto/params.c
index 9bccc51760..67ca4f0c83 100644
--- a/crypto/params.c
+++ b/crypto/params.c
@@ -617,6 +617,33 @@ OSSL_PARAM OSSL_PARAM_construct_size_t(const char *key, size_t *buf)
sizeof(size_t));
}
+int OSSL_PARAM_get_time_t(const OSSL_PARAM *p, time_t *val)
+{
+ switch (sizeof(time_t)) {
+ case sizeof(int32_t):
+ return OSSL_PARAM_get_int32(p, (int32_t *)val);
+ case sizeof(int64_t):
+ return OSSL_PARAM_get_int64(p, (int64_t *)val);
+ }
+ return 0;
+}
+
+int OSSL_PARAM_set_time_t(OSSL_PARAM *p, time_t val)
+{
+ switch (sizeof(time_t)) {
+ case sizeof(int32_t):
+ return OSSL_PARAM_set_int32(p, (int32_t)val);
+ case sizeof(int64_t):
+ return OSSL_PARAM_set_int64(p, (int64_t)val);
+ }
+ return 0;
+}
+
+OSSL_PARAM OSSL_PARAM_construct_time_t(const char *key, time_t *buf)
+{
+ return ossl_param_construct(key, OSSL_PARAM_INTEGER, buf, sizeof(time_t));
+}
+
int OSSL_PARAM_get_BN(const OSSL_PARAM *p, BIGNUM **val)
{
BIGNUM *b;
diff --git a/crypto/rand/build.info b/crypto/rand/build.info
index c4e7476ef7..7776ca8820 100644
--- a/crypto/rand/build.info
+++ b/crypto/rand/build.info
@@ -1,16 +1,12 @@
LIBS=../../libcrypto
-$COMMON=rand_lib.c rand_crng_test.c rand_unix.c rand_win.c \
- drbg_lib.c drbg_ctr.c drbg_hash.c drbg_hmac.c
+$COMMON=drbg_lib.c rand_lib.c
+$CRYPTO=randfile.c rand_err.c rand_deprecated.c
+
IF[{- !$disabled{'egd'} -}]
- $COMMON=$COMMON rand_egd.c
-ENDIF
-IF[{- $config{target} =~ /vxworks/i -}]
- $COMMON=$COMMON rand_vxworks.c
-ENDIF
-IF[{- $config{target} =~ /vms/i -}]
- $COMMON=$COMMON rand_vms.c
+ $CRYPTO=$CRYPTO rand_egd.c
ENDIF
-SOURCE[../../libcrypto]=$COMMON randfile.c rand_err.c
+
+SOURCE[../../libcrypto]=$COMMON $CRYPTO
SOURCE[../../providers/libfips.a]=$COMMON
diff --git a/crypto/rand/drbg_ctr.c b/crypto/rand/drbg_ctr.c
deleted file mode 100644
index 33e1b324c6..0000000000
--- a/crypto/rand/drbg_ctr.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/*
- * Copyright 2011-2020 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
- * https://www.openssl.org/source/license.html
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <openssl/crypto.h>
-#include <openssl/err.h>
-#include <openssl/rand.h>
-#include "crypto/modes.h"
-#include "internal/thread_once.h"
-#include "rand_local.h"
-
-/*
- * Implementation of NIST SP 800-90A CTR DRBG.
- */
-static void inc_128(RAND_DRBG_CTR *ctr)
-{
- unsigned char *p = &ctr->V[0];
- u32 n = 16, c = 1;
-
- do {
- --n;
- c += p[n];
- p[n] = (u8)c;
- c >>= 8;
- } while (n);
-}
-
-static void ctr_XOR(RAND_DRBG_CTR *ctr, const unsigned char *in, size_t inlen)
-{
- size_t i, n;
-
- if (in == NULL || inlen == 0)
- return;
-
- /*
- * Any zero padding will have no effect on the result as we
- * are XORing. So just process however much input we have.
- */
- n = inlen < ctr->keylen ? inlen : ctr->keylen;
- for (i = 0; i < n; i++)
- ctr->K[i] ^= in[i];
- if (inlen <= ctr->keylen)
- return;
-
- n = inlen - ctr->keylen;
- if (n > 16) {
- /* Should never happen */
- n = 16;
- }
- for (i = 0; i < n; i++)
- ctr->V[i] ^= in[i + ctr->keylen];
-}
-
-/*
- * Process a complete block using BCC algorithm of SP 800-90A 10.3.3
- */
-__owur static int ctr_BCC_block(RAND_DRBG_CTR *ctr, unsigned char *out,
- const unsigned char *in, int len)
-{
- int i, outlen = AES_BLOCK_SIZE;
-
- for (i = 0; i < len; i++)
- out[i] ^= in[i];
-
- if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, len)
- || outlen != len)
- return 0;
- return 1;
-}
-
-
-/*
- * Handle several BCC operations for as much data as we need for K and X
- */
-__owur static int ctr_BCC_blocks(RAND_DRBG_CTR *ctr, const unsigned char *in)
-{
- unsigned char in_tmp[48];
- unsigned char num_of_blk = 2;
-
- memcpy(in_tmp, in, 16);
- memcpy(in_tmp + 16, in, 16);
- if (ctr->keylen != 16) {
- memcpy(in_tmp + 32, in, 16);
- num_of_blk = 3;
- }
- return ctr_BCC_block(ctr, ctr->KX, in_tmp, AES_BLOCK_SIZE * num_of_blk);
-}
-
-/*
- * Initialise BCC blocks: these have the value 0,1,2 in leftmost positions:
- * see 10.3.1 stage 7.
- */
-__owur static int ctr_BCC_init(RAND_DRBG_CTR *ctr)
-{
- unsigned char bltmp[48] = {0};
- unsigned char num_of_blk;
-
- memset(ctr->KX, 0, 48);
- num_of_blk = ctr->keylen == 16 ? 2 : 3;
- bltmp[(AES_BLOCK_SIZE * 1) + 3] = 1;
- bltmp[(AES_BLOCK_SIZE * 2) + 3] = 2;
- return ctr_BCC_block(ctr, ctr->KX, bltmp, num_of_blk * AES_BLOCK_SIZE);
-}
-
-/*
- * Process several blocks into BCC algorithm, some possibly partial
- */
-__owur static int ctr_BCC_update(RAND_DRBG_CTR *ctr,
- const unsigned char *in, size_t inlen)
-{
- if (in == NULL || inlen == 0)
- return 1;
-
- /* If we have partial block handle it first */
- if (ctr->bltmp_pos) {
- size_t left = 16 - ctr->bltmp_pos;
-
- /* If we now have a complete block process it */
- if (inlen >= left) {
- memcpy(ctr->bltmp + ctr->bltmp_pos, in, left);
- if (!ctr_BCC_blocks(ctr, ctr->bltmp))
- return 0;
- ctr->bltmp_pos = 0;
- inlen -= left;
- in += left;
- }
- }
-
- /* Process zero or more complete blocks */
- for (; inlen >= 16; in += 16, inlen -= 16) {
- if (!ctr_BCC_blocks(ctr, in))
- return 0;
- }
-
- /* Copy any remaining partial block to the temporary buffer */
- if (inlen > 0) {
- memcpy(ctr->bltmp + ctr->bltmp_pos, in, inlen);
- ctr->bltmp_pos += inlen;
- }
- return 1;
-}
-
-__owur static int ctr_BCC_final(RAND_DRBG_CTR *ctr)
-{
- if (ctr->bltmp_pos) {
- memset(ctr->bltmp + ctr->bltmp_pos, 0, 16 - ctr->bltmp_pos);
- if (!ctr_BCC_blocks(ctr, ctr->bltmp))
- return 0;
- }
- return 1;
-}
-
-__owur static int ctr_df(RAND_DRBG_CTR *ctr,
- const unsigned char *in1, size_t in1len,
- const unsigned char *in2, size_t in2len,
- const unsigned char *in3, size_t in3len)
-{
- static unsigned char c80 = 0x80;
- size_t inlen;
- unsigned char *p = ctr->bltmp;
- int outlen = AES_BLOCK_SIZE;
-
- if (!ctr_BCC_init(ctr))
- return 0;
- if (in1 == NULL)
- in1len = 0;
- if (in2 == NULL)
- in2len = 0;
- if (in3 == NULL)
- in3len = 0;
- inlen = in1len + in2len + in3len;
- /* Initialise L||N in temporary block */
- *p++ = (inlen >> 24) & 0xff;
- *p++ = (inlen >> 16) & 0xff;
- *p++ = (inlen >> 8) & 0xff;
- *p++ = inlen & 0xff;
-
- /* NB keylen is at most 32 bytes */
- *p++ = 0;
- *p++ = 0;
- *p++ = 0;
- *p = (unsigned char)((ctr->keylen + 16) & 0xff);
- ctr->bltmp_pos = 8;
- if (!ctr_BCC_update(ctr, in1, in1len)
- || !ctr_BCC_update(ctr, in2, in2len)
- || !ctr_BCC_update(ctr, in3, in3len)
- || !ctr_BCC_update(ctr, &c80, 1)
- || !ctr_BCC_final(ctr))
- return 0;
- /* Set up key K */
- if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->KX, NULL, -1))
- return 0;
- /* X follows key K */
- if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX, &outlen, ctr->KX + ctr->keylen,
- AES_BLOCK_SIZE)
- || outlen != AES_BLOCK_SIZE)
- return 0;
- if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 16, &outlen, ctr->KX,
- AES_BLOCK_SIZE)
- || outlen != AES_BLOCK_SIZE)
- return 0;
- if (ctr->keylen != 16)
- if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 32, &outlen,
- ctr->KX + 16, AES_BLOCK_SIZE)
- || outlen != AES_BLOCK_SIZE)
- return 0;
- return 1;
-}
-
-/*
- * NB the no-df Update in SP800-90A specifies a constant input length
- * of seedlen, however other uses of this algorithm pad the input with
- * zeroes if necessary and have up to two parameters XORed together,
- * so we handle both cases in this function instead.
- */
-__owur static int ctr_update(RAND_DRBG *drbg,
- const unsigned char *in1, size_t in1len,
- const unsigned char *in2, size_t in2len,
- const unsigned char *nonce, size_t noncelen)
-{
- RAND_DRBG_CTR *ctr = &drbg->data.ctr;
- int outlen = AES_BLOCK_SIZE;
- unsigned char V_tmp[48], out[48];
- unsigned char len;
-
- /* correct key is already set up. */
- memcpy(V_tmp, ctr->V, 16);
- inc_128(ctr);
- memcpy(V_tmp + 16, ctr->V, 16);
- if (ctr->keylen == 16) {
- len = 32;
- } else {
- inc_128(ctr);
- memcpy(V_tmp + 32, ctr->V, 16);
- len = 48;
- }
- if (!EVP_CipherUpdate(ctr->ctx_ecb, out, &outlen, V_tmp, len)
- || outlen != len)
- return 0;
- memcpy(ctr->K, out, ctr->keylen);
- memcpy(ctr->V, out + ctr->keylen, 16);
-
- if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) {
- /* If no input reuse existing derived value */
- if (in1 != NULL || nonce != NULL || in2 != NULL)
- if (!ctr_df(ctr, in1, in1len, nonce, noncelen, in2, in2len))
- return 0;
- /* If this a reuse input in1len != 0 */
- if (in1len)
- ctr_XOR(ctr, ctr->KX, drbg->seedlen);
- } else {
- ctr_XOR(ctr, in1, in1len);
- ctr_XOR(ctr, in2, in2len);
- }
-
- if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1)
- || !EVP_CipherInit_ex(ctr->ctx_ctr, NULL, NULL, ctr->K, NULL, -1))
- return 0;
- return 1;
-}
-
-__owur static int drbg_ctr_instantiate(RAND_DRBG *drbg,
- const unsigned char *entropy, size_t entropylen,
- const unsigned char *nonce, size_t noncelen,
- const unsigned char *pers, size_t perslen)
-{
- RAND_DRBG_CTR *ctr = &drbg->data.ctr;
-
- if (entropy == NULL)
- return 0;
-
- memset(ctr->K, 0, sizeof(ctr->K));
- memset(ctr->V, 0, sizeof(ctr->V));
- if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1))
- return 0;
-
- inc_128(ctr);
- if (!ctr_update(drbg, entropy, entropylen, pers, perslen, nonce, noncelen))
- return 0;
- return 1;
-}
-
-__owur static int drbg_ctr_reseed(RAND_DRBG *drbg,
- const unsigned char *entropy, size_t entropylen,
- const unsigned char *adin, size_t adinlen)
-{
- RAND_DRBG_CTR *ctr = &drbg->data.ctr;
-
- if (entropy == NULL)
- return 0;
-
- inc_128(ctr);
- if (!ctr_update(drbg, entropy, entropylen, adin, adinlen, NULL, 0))
- return 0;
- return 1;
-}
-
-static void ctr96_inc(unsigned char *counter)
-{
- u32 n = 12, c = 1;
-
- do {
- --n;
- c += counter[n];
- counter[n] = (u8)c;
- c >>= 8;
- } while (n);
-}
-
-__owur static int drbg_ctr_generate(RAND_DRBG *drbg,
- unsigned char *out, size_t outlen,
- const unsigned char *adin, size_t adinlen)
-{
- RAND_DRBG_CTR *ctr = &drbg->data.ctr;
- unsigned int ctr32, blocks;
- int outl, buflen;
-
- if (adin != NULL && adinlen != 0) {
- inc_128(ctr);
-
- if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
- return 0;
- /* This means we reuse derived value */
- if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) {
- adin = NULL;
- adinlen = 1;
- }
- } else {
- adinlen = 0;
- }
-
- inc_128(ctr);
-
- if (outlen == 0) {
- inc_128(ctr);
-
- if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
- return 0;
- return 1;
- }
-
- memset(out, 0, outlen);
-
- do {
- if (!EVP_CipherInit_ex(ctr->ctx_ctr,
- NULL, NULL, NULL, ctr->V, -1))
- return 0;
-
- /*-
- * outlen has type size_t while EVP_CipherUpdate takes an
- * int argument and thus cannot be guaranteed to process more
- * than 2^31-1 bytes at a time. We process such huge generate
- * requests in 2^30 byte chunks, which is the greatest multiple
- * of AES block size lower than or equal to 2^31-1.
- */
- buflen = outlen > (1U << 30) ? (1U << 30) : outlen;
- blocks = (buflen + 15) / 16;
-
- ctr32 = GETU32(ctr->V + 12) + blocks;
- if (ctr32 < blocks) {
- /* 32-bit counter overflow into V. */
- if (ctr32 != 0) {
- blocks -= ctr32;
- buflen = blocks * 16;
- ctr32 = 0;
- }
- ctr96_inc(ctr->V);
- }
- PUTU32(ctr->V + 12, ctr32);
-
- if (!EVP_CipherUpdate(ctr->ctx_ctr, out, &outl, out, buflen)
- || outl != buflen)
- return 0;
-
- out += buflen;
- outlen -= buflen;
- } while (outlen);
-
- if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
- return 0;
- return 1;
-}
-
-static int drbg_ctr_uninstantiate(RAND_DRBG *drbg)
-{
- EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ecb);
- EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ctr);
- EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_df);
- EVP_CIPHER_free(drbg->data.ctr.cipher_ecb);
- EVP_CIPHER_free(drbg->data.ctr.cipher_ctr);
- OPENSSL_cleanse(&drbg->data.ctr, sizeof(drbg->data.ctr));
- return 1;
-}
-
-static RAND_DRBG_METHOD drbg_ctr_meth = {
- drbg_ctr_instantiate,
- drbg_ctr_reseed,
- drbg_ctr_generate,
- drbg_ctr_uninstantiate
-};
-
-int drbg_ctr_init(RAND_DRBG *drbg)
-{
- RAND_DRBG_CTR *ctr = &drbg->data.ctr;
- size_t keylen;
- EVP_CIPHER *cipher_ecb = NULL;
- EVP_CIPHER *cipher_ctr = NULL;
-
- switch (drbg->type) {
- default:
- /* This can't happen, but silence the compiler warning. */
- return 0;
- case NID_aes_128_ctr:
- keylen = 16;
- cipher_ecb = EVP_CIPHER_fetch(drbg->libctx, "AES-128-ECB", "");
- cipher_ctr = EVP_CIPHER_fetch(drbg->libctx, "AES-128-CTR", "");
- break;
- case NID_aes_192_ctr:
- keylen = 24;
- cipher_ecb = EVP_CIPHER_fetch(drbg->libctx, "AES-192-ECB", "");
- cipher_ctr = EVP_CIPHER_fetch(drbg->libctx, "AES-192-CTR", "");
- break;
- case NID_aes_256_ctr:
- keylen = 32;
- cipher_ecb = EVP_CIPHER_fetch(drbg->libctx, "AES-256-ECB", "");
- cipher_ctr = EVP_CIPHER_fetch(drbg->libctx, "AES-256-CTR", "");
- break;
- }
- if (cipher_ecb == NULL || cipher_ctr == NULL)
- return 0;
-
- EVP_CIPHER_free(ctr->cipher_ecb);
- ctr->cipher_ecb = cipher_ecb;
- EVP_CIPHER_free(ctr->cipher_ctr);
- ctr->cipher_ctr = cipher_ctr;
-
- ctr->keylen = keylen;
- if (ctr->ctx_ecb == NULL)
- ctr->ctx_ecb = EVP_CIPHER_CTX_new();
- if (ctr->ctx_ctr == NULL)
- ctr->ctx_ctr = EVP_CIPHER_CTX_new();
- if (ctr->ctx_ecb == NULL || ctr->ctx_ctr == NULL
- || !EVP_CipherInit_ex(ctr->ctx_ecb,
- ctr->cipher_ecb, NULL, NULL, NULL, 1)
- || !EVP_CipherInit_ex(ctr->ctx_ctr,
- ctr->cipher_ctr, NULL, NULL, NULL, 1))
- return 0;
-
- drbg->meth = &drbg_ctr_meth;
- drbg->strength = keylen * 8;
- drbg->seedlen = keylen + 16;
-
- if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) {
- /* df initialisation */
- static const unsigned char df_key[32] = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
- 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
- 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
- };
-
- if (ctr->ctx_df == NULL)
- ctr->ctx_df = EVP_CIPHER_CTX_new();
- if (ctr->ctx_df == NULL)
- return 0;
- /* Set key schedule for df_key */
- if (!EVP_CipherInit_ex(ctr->ctx_df,
- ctr->cipher_ecb, NULL, df_key, NULL, 1))
- return 0;
-
- drbg->min_entropylen = ctr->keylen;
- drbg->max_entropylen = DRBG_MAX_LENGTH;
- drbg->min_noncelen = drbg->min_entropylen / 2;
- drbg->max_noncelen = DRBG_MAX_LENGTH;
- drbg->max_perslen = DRBG_MAX_LENGTH;
- drbg->max_adinlen = DRBG_MAX_LENGTH;
- } else {
-#ifdef FIPS_MODULE
- RANDerr(RAND_F_DRBG_CTR_INIT,
- RAND_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS);
- return 0;
-#else
- drbg->min_entropylen = drbg->seedlen;
- drbg->max_entropylen = drbg->seedlen;
- /* Nonce not used */
- drbg->min_noncelen = 0;
- drbg->max_noncelen = 0;
- drbg->max_perslen = drbg->seedlen;
- drbg->max_adinlen = drbg->seedlen;
-#endif
- }
-
- drbg->max_request = 1 << 16;
-
- return 1;
-}
diff --git a/crypto/rand/drbg_hmac.c b/crypto/rand/drbg_hmac.c
deleted file mode 100644
index ea55279ea3..0000000000
--- a/crypto/rand/drbg_hmac.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright 2011-2020 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
- * https://www.openssl.org/source/license.html
- */
-
-/*
- * HMAC low level APIs are deprecated for public use, but still ok for internal
- * use.
- */
-#include "internal/deprecated.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <openssl/crypto.h>
-#include <openssl/err.h>
-#include <openssl/rand.h>
-#include "internal/thread_once.h"
-#include "prov/providercommon.h"
-#include "rand_local.h"
-
-/*
- * Called twice by SP800-90Ar1 10.1.2.2 HMAC_DRBG_Update_Process.
- *
- * hmac is an object that holds the input/output Key and Value (K and V).
- * inbyte is 0x00 on the first call and 0x01 on the second call.
- * in1, in2, in3 are optional inputs that can be NULL.
- * in1len, in2len, in3len are the lengths of the input buffers.
- *
- * The returned K,V is:
- * hmac->K = HMAC(hmac->K, hmac->V || inbyte || [in1] || [in2] || [in3])
- * hmac->V = HMAC(hmac->K, hmac->V)
- *
- * Returns zero if an error occurs otherwise it returns 1.
- */
-static int do_hmac(RAND_DRBG_HMAC *hmac, unsigned char inbyte,
- const unsigned char *in1, size_t in1len,
- const unsigned char *in2, size_t in2len,
- const unsigned char *in3, size_t in3len)
-{
- HMAC_CTX *ctx = hmac->ctx;
-
- return HMAC_Init_ex(ctx, hmac->K, hmac->blocklen, hmac->md, NULL)
- /* K = HMAC(K, V || inbyte || [in1] || [in2] || [in3]) */
- && HMAC_Update(ctx, hmac->V, hmac->blocklen)
- && HMAC_Update(ctx, &inbyte, 1)
- && (in1 == NULL || in1len == 0 || HMAC_Update(ctx, in1, in1len))
- && (in2 == NULL || in2len == 0 || HMAC_Update(ctx, in2, in2len))
- && (in3 == NULL || in3len == 0 || HMAC_Update(ctx, in3, in3len))
- && HMAC_Final(ctx, hmac->K, NULL)
- /* V = HMAC(K, V) */
- && HMAC_Init_ex(ctx, hmac->K, hmac->blocklen, hmac->md, NULL)
- && HMAC_Update(ctx, hmac->V, hmac->blocklen)
- && HMAC_Final(ctx, hmac->V, NULL);
-}
-
-/*
- * SP800-90Ar1 10.1.2.2 HMAC_DRBG_Update_Process
- *
- *
- * Updates the drbg objects Key(K) and Value(V) using the following algorithm:
- * K,V = do_hmac(hmac, 0, in1, in2, in3)
- * if (any input is not NULL)
- * K,V = do_hmac(hmac, 1, in1, in2, in3)
- *
- * where in1, in2, in3 are optional input buffers that can be NULL.
- * in1len, in2len, in3len are the lengths of the input buffers.
- *
- * Returns zero if an error occurs otherwise it returns 1.
- */
-static int drbg_hmac_update(RAND_DRBG *drbg,
- const unsigned char *in1, size_t in1len,
- const unsigned char *in2, size_t in2len,
- const unsigned char *in3, size_t in3len)
-{
- RAND_DRBG_HMAC *hmac = &drbg->data.hmac;
-
- /* (Steps 1-2) K = HMAC(K, V||0x00||provided_data). V = HMAC(K,V) */
- if (!do_hmac(hmac, 0x00, in1, in1len, in2, in2len, in3, in3len))
- return 0;
- /* (Step 3) If provided_data == NULL then return (K,V) */
- if (in1len == 0 && in2len == 0 && in3len == 0)
- return 1;
- /* (Steps 4-5) K = HMAC(K, V||0x01||provided_data). V = HMAC(K,V) */
- return do_hmac(hmac, 0x01, in1, in1len, in2, in2len, in3, in3len);
-}
-
-/*
- * SP800-90Ar1 10.1.2.3 HMAC_DRBG_Instantiate_Process:
- *
- * This sets the drbg Key (K) to all zeros, and Value (V) to all 1's.
- * and then calls (K,V) = drbg_hmac_update() with input parameters:
- * ent = entropy data (Can be NULL) of length ent_len.
- * nonce = nonce data (Can be NULL) of length nonce_len.
- * pstr = personalization data (Can be NULL) of length pstr_len.
- *
- * Returns zero if an error occurs otherwise it returns 1.
- */
-static int drbg_hmac_instantiate(RAND_DRBG *drbg,
- const unsigned char *ent, size_t ent_len,
- const unsigned char *nonce, size_t nonce_len,
- const unsigned char *pstr, size_t pstr_len)
-{
- RAND_DRBG_HMAC *hmac = &drbg->data.hmac;
-
- /* (Step 2) Key = 0x00 00...00 */
- memset(hmac->K, 0x00, hmac->blocklen);
- /* (Step 3) V = 0x01 01...01 */
- memset(hmac->V, 0x01, hmac->blocklen);
- /* (Step 4) (K,V) = HMAC_DRBG_Update(entropy||nonce||pers string, K, V) */
- return drbg_hmac_update(drbg, ent, ent_len, nonce, nonce_len, pstr,
- pstr_len);
-}
-
-/*
- * SP800-90Ar1 10.1.2.4 HMAC_DRBG_Reseed_Process:
- *
- * Reseeds the drbg's Key (K) and Value (V) by calling
- * (K,V) = drbg_hmac_update() with the following input parameters:
- * ent = entropy input data (Can be NULL) of length ent_len.
- * adin = additional input data (Can be NULL) of length adin_len.
- *
- * Returns zero if an error occurs otherwise it returns 1.
- */
-static int drbg_hmac_reseed(RAND_DRBG *drbg,
- const unsigned char *ent, size_t ent_len,
- const unsigned char *adin, size_t adin_len)
-{
- /* (Step 2) (K,V) = HMAC_DRBG_Update(entropy||additional_input, K, V) */
- return drbg_hmac_update(drbg, ent, ent_len, adin, adin_len, NULL, 0);
-}
-
-/*
- * SP800-90Ar1 10.1.2.5 HMAC_DRBG_Generate_Process:
- *
- * Generates pseudo random bytes and updates the internal K,V for the drbg.
- * out is a buffer to fill with outlen bytes of pseudo random data.
- * adin is an additional_input string of size adin_len that may be NULL.
- *
- * Returns zero if an error occurs otherwise it returns 1.
- */
-static int drbg_hmac_generate(RAND_DRBG *drbg,
- unsigned char *out, size_t outlen,
- const unsigned char *adin, size_t adin_len)
-{
- RAND_DRBG_HMAC *hmac = &drbg->data.hmac;
- HMAC_CTX *ctx = hmac->ctx;
- const unsigned char *temp = hmac->V;
-
- /* (Step 2) if adin != NULL then (K,V) = HMAC_DRBG_Update(adin, K, V) */
- if (adin != NULL
- && adin_len > 0
- && !drbg_hmac_update(drbg, adin, adin_len, NULL, 0, NULL, 0))
- return 0;
-
- /*
- * (Steps 3-5) temp = NULL
- * while (len(temp) < outlen) {
- * V = HMAC(K, V)
- * temp = temp || V
- * }
- */
- for (;;) {
- if (!HMAC_Init_ex(ctx, hmac->K, hmac->blocklen, hmac->md, NULL)
- || !HMAC_Update(ctx, temp, hmac->blocklen))
- return 0;
-
- if (outlen > hmac->blocklen) {
- if (!HMAC_Final(ctx, out, NULL))
- return 0;
- temp = out;
- } else {
- if (!HMAC_Final(ctx, hmac->V, NULL))
- return 0;
- memcpy(out, hmac->V, outlen);
- break;
- }
- out += hmac->blocklen;
- outlen -= hmac->blocklen;
- }
- /* (Step 6) (K,V) = HMAC_DRBG_Update(adin, K, V) */
- if (!drbg_hmac_update(drbg, adin, adin_len, NULL, 0, NULL, 0))
- return 0;
-
- return 1;
-}
-
-static int drbg_hmac_uninstantiate(RAND_DRBG *drbg)
-{
- EVP_MD_free(drbg->data.hmac.md);
- HMAC_CTX_free(drbg->data.hmac.ctx);
- OPENSSL_cleanse(&drbg->data.hmac, sizeof(drbg->data.hmac));
- return 1;
-}
-
-static RAND_DRBG_METHOD drbg_hmac_meth = {
- drbg_hmac_instantiate,
- drbg_hmac_reseed,
- drbg_hmac_generate,
- drbg_hmac_uninstantiate
-};
-
-int drbg_hmac_init(RAND_DRBG *drbg)
-{
- EVP_MD *md = NULL;
- RAND_DRBG_HMAC *hmac = &drbg->data.hmac;
-
- /*
- * Confirm digest is allowed. We allow all digests that are not XOF
- * (such as SHAKE). In FIPS mode, the fetch will fail for non-approved
- * digests.
- */
- md = EVP_MD_fetch(drbg->libctx, ossl_prov_util_nid_to_name(drbg->type), "");
- if (md == NULL)
- return 0;
-
- if ((EVP_MD_flags(md) & EVP_MD_FLAG_XOF) != 0)
- return 0;
-
- drbg->meth = &drbg_hmac_meth;
-
- if (hmac->ctx == NULL) {
- hmac->ctx = HMAC_CTX_new();
- if (hmac->ctx == NULL) {
- EVP_MD_free(md);
- return 0;
- }
- }
-
- /* These are taken from SP 800-90 10.1 Table 2 */
- EVP_MD_free(hmac->md);
- hmac->md = md;
- hmac->blocklen = EVP_MD_size(md);
- /* See SP800-57 Part1 Rev4 5.6.1 Table 3 */
- drbg->strength = 64 * (int)(hmac->blocklen >> 3);
- if (drbg->strength > 256)
- drbg->strength = 256;
- drbg->seedlen = hmac->blocklen;
-
- drbg->min_entropylen = drbg->strength / 8;
- drbg->max_entropylen = DRBG_MAX_LENGTH;
-
- drbg->min_noncelen = drbg->min_entropylen / 2;
- drbg->max_noncelen = DRBG_MAX_LENGTH;
-
- drbg->max_perslen = DRBG_MAX_LENGTH;
- drbg->max_adinlen = DRBG_MAX_LENGTH;
-
- /* Maximum number of bits per request = 2^19 = 2^16 bytes*/
- drbg->max_request = 1 << 16;
-
- return 1;
-}
diff --git a/crypto/rand/drbg_lib.c b/crypto/rand/drbg_lib.c
index cda13595e3..ee33cfa631 100644
--- a/crypto/rand/drbg_lib.c
+++ b/crypto/rand/drbg_lib.c
@@ -7,10 +7,17 @@
* https://www.openssl.org/source/license.html
*/
+/*
+ * RAND_DRBG_set is deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
#include <string.h>
#include <openssl/crypto.h>
#include <openssl/err.h>
#include <openssl/rand.h>
+#include <openssl/core_names.h>
#include "rand_local.h"
#include "internal/thread_once.h"
#include "crypto/rand.h"
@@ -36,6 +43,7 @@ typedef struct drbg_global_st {
*
* There are three shared DRBG instances: <master>, <public>, and <private>.
*/
+ CRYPTO_RWLOCK *lock;
/*
* The <master> DRBG
@@ -69,14 +77,6 @@ typedef struct drbg_global_st {
CRYPTO_THREAD_LOCAL private_drbg;
} DRBG_GLOBAL;
-typedef struct drbg_nonce_global_st {
- CRYPTO_RWLOCK *rand_nonce_lock;
- int rand_nonce_count;
-} DRBG_NONCE_GLOBAL;
-
-/* NIST SP 800-90A DRBG recommends the use of a personalization string. */
-static const char ossl_pers_string[] = DRBG_DEFAULT_PERS_STRING;
-
#define RAND_DRBG_TYPE_FLAGS ( \
RAND_DRBG_FLAG_MASTER | RAND_DRBG_FLAG_PUBLIC | RAND_DRBG_FLAG_PRIVATE )
@@ -109,45 +109,76 @@ static const unsigned int rand_drbg_used_flags =
static RAND_DRBG *drbg_setup(OPENSSL_CTX *ctx, RAND_DRBG *parent, int drbg_type);
-static RAND_DRBG *rand_drbg_new(OPENSSL_CTX *ctx,
- int secure,
- int type,
- unsigned int flags,
- RAND_DRBG *parent);
-
-static int rand_drbg_set(RAND_DRBG *drbg, int type, unsigned int flags);
-static int rand_drbg_init_method(RAND_DRBG *drbg);
-
-static int is_ctr(int type)
+static int get_drbg_params(int type, unsigned int flags, const char **name,
+ OSSL_PARAM params[3])
{
+ OSSL_PARAM *p = params;
+
switch (type) {
- case NID_aes_128_ctr:
- case NID_aes_192_ctr:
- case NID_aes_256_ctr:
+ case 0:
return 1;
default:
return 0;
+
+#define CTR(v) \
+ *name = "CTR-DRBG"; \
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER, v, 0)
+
+ case NID_aes_128_ctr:
+ CTR(SN_aes_128_ctr);
+ break;
+ case NID_aes_192_ctr:
+ CTR(SN_aes_192_ctr);
+ break;
+ case NID_aes_256_ctr:
+ CTR(SN_aes_256_ctr);
+ break;
+
+#define DGST(v) \
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_DIGEST, v, 0); \
+ if ((flags & RAND_DRBG_FLAG_HMAC) == 0) { \
+ *name = "HASH-DRBG"; \
+ } else { \
+ *name = "HMAC-DRBG"; \
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_MAC, \
+ SN_hmac, 0); \
}
-}
-static int is_digest(int type)
-{
- switch (type) {
case NID_sha1:
+ DGST(SN_sha1);
+ break;
case NID_sha224:
+ DGST(SN_sha224);
+ break;
case NID_sha256:
+ DGST(SN_sha256);
+ break;
case NID_sha384:
+ DGST(SN_sha384);
+ break;
case NID_sha512:
+ DGST(SN_sha512);
+ break;
case NID_sha512_224:
+ DGST(SN_sha512_224);
+ break;
case NID_sha512_256:
+ DGST(SN_sha512_256);
+ break;
case NID_sha3_224:
+ DGST(SN_sha3_224);
+ break;
case NID_sha3_256:
+ DGST(SN_sha3_256);
+ break;
case NID_sha3_384:
+ DGST(SN_sha3_384);
+ break;
case NID_sha3_512:
- return 1;
- default:
- return 0;
+ DGST(SN_sha3_512);
}
+ *p = OSSL_PARAM_construct_end();
+ return 1;
}
/*
@@ -169,23 +200,23 @@ static void *drbg_ossl_ctx_new(OPENSSL_CTX *libctx)
OPENSSL_init_crypto(0, NULL);
#endif
+ dgbl->lock = CRYPTO_THREAD_lock_new();
+ if (dgbl->lock == NULL)
+ goto err0;
+
if (!CRYPTO_THREAD_init_local(&dgbl->private_drbg, NULL))
goto err1;
if (!CRYPTO_THREAD_init_local(&dgbl->public_drbg, NULL))
goto err2;
- dgbl->master_drbg = drbg_setup(libctx, NULL, RAND_DRBG_TYPE_MASTER);
- if (dgbl->master_drbg == NULL)
- goto err3;
-
return dgbl;
- err3:
- CRYPTO_THREAD_cleanup_local(&dgbl->public_drbg);
err2:
CRYPTO_THREAD_cleanup_local(&dgbl->private_drbg);
err1:
+ CRYPTO_THREAD_lock_free(dgbl->lock);
+ err0:
OPENSSL_free(dgbl);
return NULL;
}
@@ -197,6 +228,7 @@ static void drbg_ossl_ctx_free(void *vdgbl)
if (dgbl == NULL)
return;
+ CRYPTO_THREAD_lock_free(dgbl->lock);
RAND_DRBG_free(dgbl->master_drbg);
CRYPTO_THREAD_cleanup_local(&dgbl->private_drbg);
CRYPTO_THREAD_cleanup_local(&dgbl->public_drbg);
@@ -209,104 +241,12 @@ static const OPENSSL_CTX_METHOD drbg_ossl_ctx_method = {
drbg_ossl_ctx_free,
};
-/*
- * drbg_ossl_ctx_new() calls drgb_setup() which calls rand_drbg_get_nonce()
- * which needs to get the rand_nonce_lock out of the OPENSSL_CTX...but since
- * drbg_ossl_ctx_new() hasn't finished running yet we need the rand_nonce_lock
- * to be in a different global data object. Otherwise we will go into an
- * infinite recursion loop.
- */
-static void *drbg_nonce_ossl_ctx_new(OPENSSL_CTX *libctx)
-{
- DRBG_NONCE_GLOBAL *dngbl = OPENSSL_zalloc(sizeof(*dngbl));
-
- if (dngbl == NULL)
- return NULL;
-
- dngbl->rand_nonce_lock = CRYPTO_THREAD_lock_new();
- if (dngbl->rand_nonce_lock == NULL) {
- OPENSSL_free(dngbl);
- return NULL;
- }
-
- return dngbl;
-}
-
-static void drbg_nonce_ossl_ctx_free(void *vdngbl)
-{
- DRBG_NONCE_GLOBAL *dngbl = vdngbl;
-
- if (dngbl == NULL)
- return;
-
- CRYPTO_THREAD_lock_free(dngbl->rand_nonce_lock);
-
- OPENSSL_free(dngbl);
-}
-
-static const OPENSSL_CTX_METHOD drbg_nonce_ossl_ctx_method = {
- drbg_nonce_ossl_ctx_new,
- drbg_nonce_ossl_ctx_free,
-};
-
static DRBG_GLOBAL *drbg_get_global(OPENSSL_CTX *libctx)
{
return openssl_ctx_get_data(libctx, OPENSSL_CTX_DRBG_INDEX,
&drbg_ossl_ctx_method);
}
-/* Implements the get_nonce() callback (see RAND_DRBG_set_callbacks()) */
-size_t rand_drbg_get_nonce(RAND_DRBG *drbg,
- unsigned char **pout,
- int entropy, size_t min_len, size_t max_len)
-{
- size_t ret = 0;
- RAND_POOL *pool;
- DRBG_NONCE_GLOBAL *dngbl
- = openssl_ctx_get_data(drbg->libctx, OPENSSL_CTX_DRBG_NONCE_INDEX,
- &drbg_nonce_ossl_ctx_method);
- struct {
- void *instance;
- int count;
- } data;
-
- if (dngbl == NULL)
- return 0;
-
- memset(&data, 0, sizeof(data));
- pool = rand_pool_new(0, 0, min_len, max_len);
- if (pool == NULL)
- return 0;
-
- if (rand_pool_add_nonce_data(pool) == 0)
- goto err;
-
- data.instance = drbg;
- CRYPTO_atomic_add(&dngbl->rand_nonce_count, 1, &data.count,
- dngbl->rand_nonce_lock);
-
- if (rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0) == 0)
- goto err;
-
- ret = rand_pool_length(pool);
- *pout = rand_pool_detach(pool);
-
- err:
- rand_pool_free(pool);
-
- return ret;
-}
-
-/*
- * Implements the cleanup_nonce() callback (see RAND_DRBG_set_callbacks())
- *
- */
-void rand_drbg_cleanup_nonce(RAND_DRBG *drbg,
- unsigned char *out, size_t outlen)
-{
- OPENSSL_clear_free(out, outlen);
-}
-
/*
* Set the |drbg|'s callback data pointer for the entropy and nonce callbacks
*
@@ -321,8 +261,8 @@ void rand_drbg_cleanup_nonce(RAND_DRBG *drbg,
*/
int RAND_DRBG_set_callback_data(RAND_DRBG *drbg, void *data)
{
- if (drbg->state != DRBG_UNINITIALISED
- || drbg->parent != NULL)
+ if (EVP_RAND_state(drbg->rand) != EVP_RAND_STATE_UNINITIALISED
+ || drbg->parent != NULL)
return 0;
drbg->callback_data = data;
@@ -344,68 +284,71 @@ void *RAND_DRBG_get_callback_data(RAND_DRBG *drbg)
*/
int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags)
{
- return rand_drbg_set(drbg, type, flags) && rand_drbg_init_method(drbg);
-}
+ OSSL_PARAM params[6], *p = params;
+ unsigned int reseed_interval;
+ time_t reseed_time_interval;
+ const char *name = NULL;
+ EVP_RAND *rand;
+ EVP_RAND_CTX *pctx;
+ int use_df;
-static int rand_drbg_set(RAND_DRBG *drbg, int type, unsigned int flags)
-{
if (type == 0 && flags == 0) {
type = rand_drbg_type[RAND_DRBG_TYPE_MASTER];
flags = rand_drbg_flags[RAND_DRBG_TYPE_MASTER];
}
- /* If set is called multiple times - clear the old one */
- if (drbg->type != 0 && (type != drbg->type || flags != drbg->flags)) {
- if (drbg->meth != NULL)
- drbg->meth->uninstantiate(drbg);
- rand_pool_free(drbg->adin_pool);
- drbg->adin_pool = NULL;
+ if (drbg->parent == NULL) {
+ reseed_interval = master_reseed_interval;
+ reseed_time_interval = master_reseed_time_interval;
+ } else {
+ reseed_interval = slave_reseed_interval;
+ reseed_time_interval = slave_reseed_time_interval;
+ }
+ *p++ = OSSL_PARAM_construct_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS,
+ &reseed_interval);
+ *p++ = OSSL_PARAM_construct_time_t(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL,
+ &reseed_time_interval);
+ use_df = (flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0;
+ *p++ = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_USE_DF, &use_df);
+
+ if (!get_drbg_params(type, flags, &name, p)) {
+ RANDerr(0, RAND_R_UNSUPPORTED_DRBG_TYPE);
+ return 0;
}
- drbg->state = DRBG_UNINITIALISED;
+ rand = EVP_RAND_fetch(drbg->libctx, name, NULL);
+ if (rand == NULL) {
+ RANDerr(0, RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED);
+ return 0;
+ }
+
+ EVP_RAND_CTX_free(drbg->rand);
+ drbg->rand = NULL;
+
drbg->flags = flags;
drbg->type = type;
- drbg->meth = NULL;
- if (type == 0 || is_ctr(type) || is_digest(type))
- return 1;
+ pctx = drbg->parent != NULL ? drbg->parent->rand : NULL;
+ drbg->rand = EVP_RAND_CTX_new(rand, pctx);
+ EVP_RAND_free(rand);
+ if (drbg->rand == NULL) {
+ RANDerr(0, RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED);
+ goto err;
+ }
+ if (!EVP_RAND_set_ctx_params(drbg->rand, params)) {
+ RANDerr(0, RAND_R_ERROR_INITIALISING_DRBG);
+ goto err;
+ }
+ return 1;
+err:
+ EVP_RAND_CTX_free(drbg->rand);
+ drbg->rand = NULL;
drbg->type = 0;
drbg->flags = 0;
- RANDerr(RAND_F_RAND_DRBG_SET, RAND_R_UNSUPPORTED_DRBG_TYPE);
-
return 0;
}
-static int rand_drbg_init_method(RAND_DRBG *drbg)
-{
- int ret;
-
- if (drbg->meth != NULL)
- return 1;
-
- if (is_ctr(drbg->type)) {
- ret = drbg_ctr_init(drbg);
- } else if (is_digest(drbg->type)) {
- if (drbg->flags & RAND_DRBG_FLAG_HMAC)
- ret = drbg_hmac_init(drbg);
- else
- ret = drbg_hash_init(drbg);
- } else {
- /* other cases should already be excluded */
- RANDerr(RAND_F_RAND_DRBG_INIT_METHOD, ERR_R_INTERNAL_ERROR);
- drbg->type = 0;
- drbg->flags = 0;
- return 0;
- }
-
- if (ret == 0) {
- drbg->state = DRBG_ERROR;
- RANDerr(RAND_F_RAND_DRBG_INIT_METHOD, RAND_R_ERROR_INITIALISING_DRBG);
- }
- return ret;
-}
-
/*
* Set/initialize default |type| and |flag| for new drbg instances.
*
@@ -414,7 +357,10 @@ static int rand_drbg_init_method(RAND_DRBG *drbg)
int RAND_DRBG_set_defaults(int type, unsigned int flags)
{
int all;
- if (!(is_digest(type) || is_ctr(type))) {
+ const char *name;
+ OSSL_PARAM params[3];
+
+ if (!get_drbg_params(type, flags, &name, params)) {
RANDerr(RAND_F_RAND_DRBG_SET_DEFAULTS, RAND_R_UNSUPPORTED_DRBG_TYPE);
return 0;
}
@@ -442,20 +388,17 @@ int RAND_DRBG_set_defaults(int type, unsigned int flags)
/*
- * Allocate memory and initialize a new DRBG. The DRBG is allocated on
- * the secure heap if |secure| is nonzero and the secure heap is enabled.
+ * Allocate memory and initialize a new DRBG.
* The |parent|, if not NULL, will be used as random source for reseeding.
*
* Returns a pointer to the new DRBG instance on success, NULL on failure.
*/
static RAND_DRBG *rand_drbg_new(OPENSSL_CTX *ctx,
- int secure,
int type,
unsigned int flags,
RAND_DRBG *parent)
{
- RAND_DRBG *drbg = secure ? OPENSSL_secure_zalloc(sizeof(*drbg))
- : OPENSSL_zalloc(sizeof(*drbg));
+ RAND_DRBG *drbg = OPENSSL_zalloc(sizeof(*drbg));
if (drbg == NULL) {
RANDerr(RAND_F_RAND_DRBG_NEW, ERR_R_MALLOC_FAILURE);
@@ -463,54 +406,11 @@ static RAND_DRBG *rand_drbg_new(OPENSSL_CTX *ctx,
}
drbg->libctx = ctx;
- drbg->secure = secure && CRYPTO_secure_allocated(drbg);
- drbg->fork_id = openssl_get_fork_id();
drbg->parent = parent;
- if (parent == NULL) {
-#ifdef FIPS_MODULE
- drbg->get_entropy = rand_crngt_get_entropy;
- drbg->cleanup_entropy = rand_crngt_cleanup_entropy;
-#else
- drbg->get_entropy = rand_drbg_get_entropy;
- drbg->cleanup_entropy = rand_drbg_cleanup_entropy;
-#endif
-#ifndef RAND_DRBG_GET_RANDOM_NONCE
- drbg->get_nonce = rand_drbg_get_nonce;
- drbg->cleanup_nonce = rand_drbg_cleanup_nonce;
-#endif
-
- drbg->reseed_interval = master_reseed_interval;
- drbg->reseed_time_interval = master_reseed_time_interval;
- } else {
- drbg->get_entropy = rand_drbg_get_entropy;
- drbg->cleanup_entropy = rand_drbg_cleanup_entropy;
- /*
- * Do not provide nonce callbacks, the child DRBGs will
- * obtain their nonce using random bits from the parent.
- */
-
- drbg->reseed_interval = slave_reseed_interval;
- drbg->reseed_time_interval = slave_reseed_time_interval;
- }
-
if (RAND_DRBG_set(drbg, type, flags) == 0)
goto err;
- if (parent != NULL) {
- rand_drbg_lock(parent);
- if (drbg->strength > parent->strength) {
- /*
- * We currently don't support the algorithm from NIST SP 800-90C
- * 10.1.2 to use a weaker DRBG as source
- */
- rand_drbg_unlock(parent);
- RANDerr(RAND_F_RAND_DRBG_NEW, RAND_R_PARENT_STRENGTH_TOO_WEAK);
- goto err;
- }
- rand_drbg_unlock(parent);
- }
-
return drbg;
err:
@@ -522,7 +422,7 @@ static RAND_DRBG *rand_drbg_new(OPENSSL_CTX *ctx,
RAND_DRBG *RAND_DRBG_new_ex(OPENSSL_CTX *ctx, int type, unsigned int flags,
RAND_DRBG *parent)
{
- return rand_drbg_new(ctx, 0, type, flags, parent);
+ return rand_drbg_new(ctx, type, flags, parent);
}
RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent)
@@ -530,16 +430,6 @@ RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent)
return RAND_DRBG_new_ex(NULL, type, flags, parent);
}
-RAND_DRBG *RAND_DRBG_secure_new_ex(OPENSSL_CTX *ctx, int type,
- unsigned int flags, RAND_DRBG *parent)
-{
- return rand_drbg_new(ctx, 1, type, flags, parent);
-}
-
-RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent)
-{
- return RAND_DRBG_secure_new_ex(NULL, type, flags, parent);
-}
/*
* Uninstantiate |drbg| and free all memory.
*/
@@ -548,18 +438,9 @@ void RAND_DRBG_free(RAND_DRBG *drbg)
if (drbg == NULL)
return;
- if (drbg->meth != NULL)
- drbg->meth->uninstantiate(drbg);
- rand_pool_free(drbg->adin_pool);
- CRYPTO_THREAD_lock_free(drbg->lock);
-#ifndef FIPS_MODULE
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RAND_DRBG, drbg, &drbg->ex_data);
-#endif
-
- if (drbg->secure)
- OPENSSL_secure_clear_free(drbg, sizeof(*drbg));
- else
- OPENSSL_clear_free(drbg, sizeof(*drbg));
+ EVP_RAND_CTX_free(drbg->rand);
+ OPENSSL_free(drbg);
}
/*
@@ -573,92 +454,8 @@ void RAND_DRBG_free(RAND_DRBG *drbg)
int RAND_DRBG_instantiate(RAND_DRBG *drbg,
const unsigned char *pers, size_t perslen)
{
- unsigned char *nonce = NULL, *entropy = NULL;
- size_t noncelen = 0, entropylen = 0;
- size_t min_entropy, min_entropylen, max_entropylen;
-
- if (drbg->meth == NULL && !rand_drbg_init_method(drbg)) {
- RANDerr(RAND_F_RAND_DRBG_INSTANTIATE,
- RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED);
- goto end;
- }
-
- min_entropy = drbg->strength;
- min_entropylen = drbg->min_entropylen;
- max_entropylen = drbg->max_entropylen;
-
- if (perslen > drbg->max_perslen) {
- RANDerr(RAND_F_RAND_DRBG_INSTANTIATE,
- RAND_R_PERSONALISATION_STRING_TOO_LONG);
- goto end;
- }
-
- if (drbg->state != DRBG_UNINITIALISED) {
- if (drbg->state == DRBG_ERROR)
- RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_IN_ERROR_STATE);
- else
- RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ALREADY_INSTANTIATED);
- goto end;
- }
-
- drbg->state = DRBG_ERROR;
-
- /*
- * NIST SP800-90Ar1 section 9.1 says you can combine getting the entropy
- * and nonce in 1 call by increasing the entropy with 50% and increasing
- * the minimum length to accommodate the length of the nonce.
- * We do this in case a nonce is require and get_nonce is NULL.
- */
- if (drbg->min_noncelen > 0 && drbg->get_nonce == NULL) {
- min_entropy += drbg->strength / 2;
- min_entropylen += drbg->min_noncelen;
- max_entropylen += drbg->max_noncelen;
- }
-
- drbg->reseed_next_counter = tsan_load(&drbg->reseed_prop_counter);
- if (drbg->reseed_next_counter) {
- drbg->reseed_next_counter++;
- if(!drbg->reseed_next_counter)
- drbg->reseed_next_counter = 1;
- }
-
- if (drbg->get_entropy != NULL)
- entropylen = drbg->get_entropy(drbg, &entropy, min_entropy,
- min_entropylen, max_entropylen, 0);
- if (entropylen < min_entropylen
- || entropylen > max_entropylen) {
- RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_RETRIEVING_ENTROPY);
- goto end;
- }
-
- if (drbg->min_noncelen > 0 && drbg->get_nonce != NULL) {
- noncelen = drbg->get_nonce(drbg, &nonce, drbg->strength / 2,
- drbg->min_noncelen, drbg->max_noncelen);
- if (noncelen < drbg->min_noncelen || noncelen > drbg->max_noncelen) {
- RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_RETRIEVING_NONCE);
- goto end;
- }
- }
-
- if (!drbg->meth->instantiate(drbg, entropy, entropylen,
- nonce, noncelen, pers, perslen)) {
- RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_INSTANTIATING_DRBG);
- goto end;
- }
-
- drbg->state = DRBG_READY;
- drbg->reseed_gen_counter = 1;
- drbg->reseed_time = time(NULL);
- tsan_store(&drbg->reseed_prop_counter, drbg->reseed_next_counter);
-
- end:
- if (entropy != NULL && drbg->cleanup_entropy != NULL)
- drbg->cleanup_entropy(drbg, entropy, entropylen);
- if (nonce != NULL && drbg->cleanup_nonce != NULL)
- drbg->cleanup_nonce(drbg, nonce, noncelen);
- if (drbg->state == DRBG_READY)
- return 1;
- return 0;
+ return EVP_RAND_instantiate(drbg->rand, EVP_RAND_strength(drbg->rand), 0,
+ pers, perslen);
}
/*
@@ -671,10 +468,9 @@ int RAND_DRBG_instantiate(RAND_DRBG *drbg,
int RAND_DRBG_uninstantiate(RAND_DRBG *drbg)
{
int index = -1, type, flags;
- if (drbg->meth != NULL) {
- drbg->meth->uninstantiate(drbg);
- drbg->meth = NULL;
- }
+
+ if (!EVP_RAND_uninstantiate(drbg->rand))
+ return 0;
/* The reset uses the default values for type and flags */
if (drbg->flags & RAND_DRBG_FLAG_MASTER)
@@ -691,7 +487,7 @@ int RAND_DRBG_uninstantiate(RAND_DRBG *drbg)
flags = drbg->flags;
type = drbg->type;
}
- return rand_drbg_set(drbg, type, flags);
+ return RAND_DRBG_set(drbg, type, flags);
}
/*
@@ -705,288 +501,152 @@ int RAND_DRBG_reseed(RAND_DRBG *drbg,
const unsigned char *adin, size_t adinlen,
int prediction_resistance)
{
- unsigned char *entropy = NULL;
- size_t entropylen = 0;
-
- if (drbg->state == DRBG_ERROR) {
- RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_IN_ERROR_STATE);
- return 0;
- }
- if (drbg->state == DRBG_UNINITIALISED) {
- RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_NOT_INSTANTIATED);
- return 0;
- }
-
- if (adin == NULL) {
- adinlen = 0;
- } else if (adinlen > drbg->max_adinlen) {
- RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_ADDITIONAL_INPUT_TOO_LONG);
- return 0;
- }
-
- drbg->state = DRBG_ERROR;
-
- drbg->reseed_next_counter = tsan_load(&drbg->reseed_prop_counter);
- if (drbg->reseed_next_counter) {
- drbg->reseed_next_counter++;
- if(!drbg->reseed_next_counter)
- drbg->reseed_next_counter = 1;
- }
-
- if (drbg->get_entropy != NULL)
- entropylen = drbg->get_entropy(drbg, &entropy, drbg->strength,
- drbg->min_entropylen,
- drbg->max_entropylen,
- prediction_resistance);
- if (entropylen < drbg->min_entropylen
- || entropylen > drbg->max_entropylen) {
- RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_ERROR_RETRIEVING_ENTROPY);
- goto end;
- }
-
- if (!drbg->meth->reseed(drbg, entropy, entropylen, adin, adinlen))
- goto end;
-
- drbg->state = DRBG_READY;
- drbg->reseed_gen_counter = 1;
- drbg->reseed_time = time(NULL);
- tsan_store(&drbg->reseed_prop_counter, drbg->reseed_next_counter);
-
- end:
- if (entropy != NULL && drbg->cleanup_entropy != NULL)
- drbg->cleanup_entropy(drbg, entropy, entropylen);
- if (drbg->state == DRBG_READY)
- return 1;
- return 0;
+ return EVP_RAND_reseed(drbg->rand, prediction_resistance, NULL, 0,
+ adin, adinlen);
}
/*
- * Restart |drbg|, using the specified entropy or additional input
- *
- * Tries its best to get the drbg instantiated by all means,
- * regardless of its current state.
+ * Generate |outlen| bytes into the buffer at |out|. Reseed if we need
+ * to or if |prediction_resistance| is set. Additional input can be
+ * sent in |adin| and |adinlen|.
*
- * Optionally, a |buffer| of |len| random bytes can be passed,
- * which is assumed to contain at least |entropy| bits of entropy.
+ * Requires that drbg->lock is already locked for write, if non-null.
*
- * If |entropy| > 0, the buffer content is used as entropy input.
+ * Returns 1 on success, 0 on failure.
*
- * If |entropy| == 0, the buffer content is used as additional input
+ */
+int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,
+ int prediction_resistance,
+ const unsigned char *adin, size_t adinlen)
+{
+ return EVP_RAND_generate(drbg->rand, out, outlen, 0,
+ prediction_resistance, adin, adinlen);
+}
+
+/*
+ * Generates |outlen| random bytes and stores them in |out|. It will
+ * using the given |drbg| to generate the bytes.
*
- * Returns 1 on success, 0 on failure.
+ * Requires that drbg->lock is already locked for write, if non-null.
*
- * This function is used internally only.
+ * Returns 1 on success 0 on failure.
*/
-int rand_drbg_restart(RAND_DRBG *drbg,
- const unsigned char *buffer, size_t len, size_t entropy)
+int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen)
+{
+ return EVP_RAND_generate(drbg->rand, out, outlen, 0, 0, NULL, 0);
+}
+
+/* DRBG call back shims */
+static int rand_drbg_get_entroy_cb(const OSSL_PARAM *params, OSSL_PARAM *out,
+ void *vdrbg)
{
- int reseeded = 0;
- const unsigned char *adin = NULL;
- size_t adinlen = 0;
-
- if (drbg->seed_pool != NULL) {
- RANDerr(RAND_F_RAND_DRBG_RESTART, ERR_R_INTERNAL_ERROR);
- drbg->state = DRBG_ERROR;
- rand_pool_free(drbg->seed_pool);
- drbg->seed_pool = NULL;
+ RAND_DRBG *drbg = (RAND_DRBG *)vdrbg;
+ int entropy = 0, prediction_resistance = 0;
+ size_t min_len = 0, max_len = 2048;
+ const OSSL_PARAM *p;
+ OSSL_PARAM *q;
+
+ if (drbg->get_entropy == NULL)
return 0;
- }
- if (buffer != NULL) {
- if (entropy > 0) {
- if (drbg->max_entropylen < len) {
- RANDerr(RAND_F_RAND_DRBG_RESTART,
- RAND_R_ENTROPY_INPUT_TOO_LONG);
- drbg->state = DRBG_ERROR;
- return 0;
- }
-
- if (entropy > 8 * len) {
- RANDerr(RAND_F_RAND_DRBG_RESTART, RAND_R_ENTROPY_OUT_OF_RANGE);
- drbg->state = DRBG_ERROR;
- return 0;
- }
-
- /* will be picked up by the rand_drbg_get_entropy() callback */
- drbg->seed_pool = rand_pool_attach(buffer, len, entropy);
- if (drbg->seed_pool == NULL)
- return 0;
- } else {
- if (drbg->max_adinlen < len) {
- RANDerr(RAND_F_RAND_DRBG_RESTART,
- RAND_R_ADDITIONAL_INPUT_TOO_LONG);
- drbg->state = DRBG_ERROR;
- return 0;
- }
- adin = buffer;
- adinlen = len;
- }
- }
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_ENTROPY_REQUIRED);
+ if (p == NULL || !OSSL_PARAM_get_int(p, &entropy))
+ return 0;
- /* repair error state */
- if (drbg->state == DRBG_ERROR)
- RAND_DRBG_uninstantiate(drbg);
-
- /* repair uninitialized state */
- if (drbg->state == DRBG_UNINITIALISED) {
- /* reinstantiate drbg */
- RAND_DRBG_instantiate(drbg,
- (const unsigned char *) ossl_pers_string,
- sizeof(ossl_pers_string) - 1);
- /* already reseeded. prevent second reseeding below */
- reseeded = (drbg->state == DRBG_READY);
- }
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_PREDICTION_RESISTANCE);
+ if (p == NULL || !OSSL_PARAM_get_int(p, &prediction_resistance))
+ return 0;
- /* refresh current state if entropy or additional input has been provided */
- if (drbg->state == DRBG_READY) {
- if (adin != NULL) {
- /*
- * mix in additional input without reseeding
- *
- * Similar to RAND_DRBG_reseed(), but the provided additional
- * data |adin| is mixed into the current state without pulling
- * entropy from the trusted entropy source using get_entropy().
- * This is not a reseeding in the strict sense of NIST SP 800-90A.
- */
- drbg->meth->reseed(drbg, adin, adinlen, NULL, 0);
- } else if (reseeded == 0) {
- /* do a full reseeding if it has not been done yet above */
- RAND_DRBG_reseed(drbg, NULL, 0, 0);
- }
- }
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_MAX_LENGTH);
+ if (p == NULL || !OSSL_PARAM_get_size_t(p, &max_len))
+ return 0;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_MIN_LENGTH);
+ if (p == NULL || !OSSL_PARAM_get_size_t(p, &min_len))
+ return 0;
- rand_pool_free(drbg->seed_pool);
- drbg->seed_pool = NULL;
+ q = OSSL_PARAM_locate(out, OSSL_DRBG_PARAM_RANDOM_DATA);
+ if (q == NULL || q->data_type != OSSL_PARAM_OCTET_PTR || q->data == NULL)
+ return 0;
- return drbg->state == DRBG_READY;
+ q->return_size = drbg->get_entropy(drbg, (unsigned char **)q->data, entropy,
+ min_len, max_len, prediction_resistance);
+ return 1;
}
-/*
- * Generate |outlen| bytes into the buffer at |out|. Reseed if we need
- * to or if |prediction_resistance| is set. Additional input can be
- * sent in |adin| and |adinlen|.
- *
- * Requires that drbg->lock is already locked for write, if non-null.
- *
- * Returns 1 on success, 0 on failure.
- *
- */
-int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,
- int prediction_resistance,
- const unsigned char *adin, size_t adinlen)
+static int rand_drbg_cleanup_entropy_cb(const OSSL_PARAM *params, void *vdrbg)
{
- int fork_id;
- int reseed_required = 0;
-
- if (drbg->state != DRBG_READY) {
- /* try to recover from previous errors */
- rand_drbg_restart(drbg, NULL, 0, 0);
-
- if (drbg->state == DRBG_ERROR) {
- RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_IN_ERROR_STATE);
- return 0;
- }
- if (drbg->state == DRBG_UNINITIALISED) {
- RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_NOT_INSTANTIATED);
- return 0;
- }
- }
+ RAND_DRBG *drbg = (RAND_DRBG *)vdrbg;
+ const OSSL_PARAM *p;
+ size_t sz;
- if (outlen > drbg->max_request) {
- RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG);
+ if (drbg->cleanup_entropy == NULL)
return 0;
- }
- if (adinlen > drbg->max_adinlen) {
- RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_ADDITIONAL_INPUT_TOO_LONG);
+
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_SIZE);
+ if (p == NULL || !OSSL_PARAM_get_size_t(p, &sz))
return 0;
- }
- fork_id = openssl_get_fork_id();
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_RANDOM_DATA);
+ if (p == NULL || p->data_type != OSSL_PARAM_OCTET_PTR)
+ return 0;
- if (drbg->fork_id != fork_id) {
- drbg->fork_id = fork_id;
- reseed_required = 1;
- }
+ drbg->cleanup_entropy(drbg, p->data, sz);
+ return 1;
+}
- if (drbg->reseed_interval > 0) {
- if (drbg->reseed_gen_counter > drbg->reseed_interval)
- reseed_required = 1;
- }
- if (drbg->reseed_time_interval > 0) {
- time_t now = time(NULL);
- if (now < drbg->reseed_time
- || now - drbg->reseed_time >= drbg->reseed_time_interval)
- reseed_required = 1;
- }
- if (drbg->parent != NULL) {
- unsigned int reseed_counter = tsan_load(&drbg->reseed_prop_counter);
- if (reseed_counter > 0
- && tsan_load(&drbg->parent->reseed_prop_counter)
- != reseed_counter)
- reseed_required = 1;
- }
+static int rand_drbg_get_nonce_cb(const OSSL_PARAM *params, OSSL_PARAM *out,
+ void *vdrbg)
+{
+ RAND_DRBG *drbg = (RAND_DRBG *)vdrbg;
+ int entropy = 0;
+ size_t min_len = 0, max_len = 10240;
+ const OSSL_PARAM *p;
+ OSSL_PARAM *q;
- if (reseed_required || prediction_resistance) {
- if (!RAND_DRBG_reseed(drbg, adin, adinlen, prediction_resistance)) {
- RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_RESEED_ERROR);
- return 0;
- }
- adin = NULL;
- adinlen = 0;
- }
+ if (drbg->get_nonce == NULL)
+ return 0;
- if (!drbg->meth->generate(drbg, out, outlen, adin, adinlen)) {
- drbg->state = DRBG_ERROR;
- RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_GENERATE_ERROR);
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_ENTROPY_REQUIRED);
+ if (p == NULL || !OSSL_PARAM_get_int(p, &entropy))
+ return 0;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_MAX_LENGTH);
+ if (p == NULL || !OSSL_PARAM_get_size_t(p, &max_len))
return 0;
- }
- drbg->reseed_gen_counter++;
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_MIN_LENGTH);
+ if (p == NULL || !OSSL_PARAM_get_size_t(p, &min_len))
+ return 0;
+ q = OSSL_PARAM_locate(out, OSSL_DRBG_PARAM_RANDOM_DATA);
+ if (q == NULL || q->data_type != OSSL_PARAM_OCTET_PTR || q->data == NULL)
+ return 0;
+
+ q->return_size = drbg->get_nonce(drbg, (unsigned char **)q->data, entropy,
+ min_len, max_len);
return 1;
}
-/*
- * Generates |outlen| random bytes and stores them in |out|. It will
- * using the given |drbg| to generate the bytes.
- *
- * Requires that drbg->lock is already locked for write, if non-null.
- *
- * Returns 1 on success 0 on failure.
- */
-int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen)
+static int rand_drbg_cleanup_nonce_cb(const OSSL_PARAM *params, void *vdrbg)
{
- unsigned char *additional = NULL;
- size_t additional_len;
- size_t chunk;
- size_t ret = 0;
-
- if (drbg->adin_pool == NULL) {
- if (drbg->type == 0)
- goto err;
- drbg->adin_pool = rand_pool_new(0, 0, 0, drbg->max_adinlen);
- if (drbg->adin_pool == NULL)
- goto err;
- }
+ RAND_DRBG *drbg = (RAND_DRBG *)vdrbg;
+ const OSSL_PARAM *p;
+ size_t sz;
- additional_len = rand_drbg_get_additional_data(drbg->adin_pool,
- &additional);
+ if (drbg->cleanup_nonce == NULL)
+ return 0;
- for ( ; outlen > 0; outlen -= chunk, out += chunk) {
- chunk = outlen;
- if (chunk > drbg->max_request)
- chunk = drbg->max_request;
- ret = RAND_DRBG_generate(drbg, out, chunk, 0, additional, additional_len);
- if (!ret)
- goto err;
- }
- ret = 1;
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_SIZE);
+ if (p == NULL || !OSSL_PARAM_get_size_t(p, &sz))
+ return 0;
- err:
- if (additional != NULL)
- rand_drbg_cleanup_additional_data(drbg->adin_pool, additional);
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_RANDOM_DATA);
+ if (p == NULL || p->data_type != OSSL_PARAM_OCTET_PTR)
+ return 0;
- return ret;
+ drbg->cleanup_nonce(drbg, p->data, sz);
+ return 1;
}
/*
@@ -1003,13 +663,25 @@ int RAND_DRBG_set_callbacks(RAND_DRBG *drbg,
RAND_DRBG_get_nonce_fn get_nonce,
RAND_DRBG_cleanup_nonce_fn cleanup_nonce)
{
- if (drbg->state != DRBG_UNINITIALISED
- || drbg->parent != NULL)
+ EVP_RAND_CTX *rand = drbg->rand;
+ OSSL_INOUT_CALLBACK *g_ent = NULL, *g_nonce = NULL;
+ OSSL_CALLBACK *c_ent = NULL, *c_nonce = NULL;
+
+ if (get_entropy != NULL) {
+ g_ent = &rand_drbg_get_entroy_cb;
+ c_ent = &rand_drbg_cleanup_entropy_cb;
+ }
+ if (get_nonce != NULL) {
+ g_nonce = rand_drbg_get_nonce_cb;
+ c_nonce = rand_drbg_cleanup_nonce_cb;
+ }
+ if (!EVP_RAND_set_callbacks(rand, g_ent, c_ent, g_nonce, c_nonce, drbg))
return 0;
- drbg->get_entropy = get_entropy;
- drbg->cleanup_entropy = cleanup_entropy;
- drbg->get_nonce = get_nonce;
- drbg->cleanup_nonce = cleanup_nonce;
+
+ drbg->get_entropy = g_ent != NULL ? get_entropy : NULL;
+ drbg->cleanup_entropy = c_ent != NULL ? cleanup_entropy : NULL;
+ drbg->get_nonce = g_nonce != NULL ? get_nonce : NULL;
+ drbg->cleanup_nonce = c_nonce != NULL ? cleanup_nonce : NULL;
return 1;
}
@@ -1024,10 +696,13 @@ int RAND_DRBG_set_callbacks(RAND_DRBG *drbg,
*/
int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval)
{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+
if (interval > MAX_RESEED_INTERVAL)
return 0;
- drbg->reseed_interval = interval;
- return 1;
+ params[0] = OSSL_PARAM_construct_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS,
+ &interval);
+ return EVP_RAND_set_ctx_params(drbg->rand, params);
}
/*
@@ -1042,10 +717,14 @@ int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval)
*/
int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval)
{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+
if (interval > MAX_RESEED_TIME_INTERVAL)
return 0;
- drbg->reseed_time_interval = interval;
- return 1;
+ params[0] =
+ OSSL_PARAM_construct_time_t(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL,
+ &interval);
+ return EVP_RAND_set_ctx_params(drbg->rand, params);
}
/*
@@ -1081,69 +760,6 @@ int RAND_DRBG_set_reseed_defaults(
return 1;
}
-/*
- * Locks the given drbg. Locking a drbg which does not have locking
- * enabled is considered a successful no-op.
- *
- * Returns 1 on success, 0 on failure.
- */
-int rand_drbg_lock(RAND_DRBG *drbg)
-{
- if (drbg->lock != NULL)
- return CRYPTO_THREAD_write_lock(drbg->lock);
-
- return 1;
-}
-
-/*
- * Unlocks the given drbg. Unlocking a drbg which does not have locking
- * enabled is considered a successful no-op.
- *
- * Returns 1 on success, 0 on failure.
- */
-int rand_drbg_unlock(RAND_DRBG *drbg)
-{
- if (drbg->lock != NULL)
- return CRYPTO_THREAD_unlock(drbg->lock);
-
- return 1;
-}
-
-/*
- * Enables locking for the given drbg
- *
- * Locking can only be enabled if the random generator
- * is in the uninitialized state.
- *
- * Returns 1 on success, 0 on failure.
- */
-int rand_drbg_enable_locking(RAND_DRBG *drbg)
-{
- if (drbg->state != DRBG_UNINITIALISED) {
- RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING,
- RAND_R_DRBG_ALREADY_INITIALIZED);
- return 0;
- }
-
- if (drbg->lock == NULL) {
- if (drbg->parent != NULL && drbg->parent->lock == NULL) {
- RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING,
- RAND_R_PARENT_LOCKING_NOT_ENABLED);
- return 0;
- }
-
- drbg->lock = CRYPTO_THREAD_lock_new();
- if (drbg->lock == NULL) {
- RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING,
- RAND_R_FAILED_TO_CREATE_LOCK);
- return 0;
- }
- }
-
- return 1;
-}
-
-#ifndef FIPS_MODULE
/*
* Get and set the EXDATA
*/
@@ -1156,7 +772,6 @@ void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx)
{
return CRYPTO_get_ex_data(&drbg->ex_data, idx);
}
-#endif
/*
* The following functions provide a RAND_METHOD that works on the
@@ -1173,27 +788,22 @@ static RAND_DRBG *drbg_setup(OPENSSL_CTX *ctx, RAND_DRBG *parent, int drbg_type)
{
RAND_DRBG *drbg;
- drbg = RAND_DRBG_secure_new_ex(ctx, rand_drbg_type[drbg_type],
- rand_drbg_flags[drbg_type], parent);
+ drbg = RAND_DRBG_new_ex(ctx, rand_drbg_type[drbg_type],
+ rand_drbg_flags[drbg_type], parent);
if (drbg == NULL)
return NULL;
/* Only the master DRBG needs to have a lock */
- if (parent == NULL && rand_drbg_enable_locking(drbg) == 0)
+ if (parent == NULL && EVP_RAND_enable_locking(drbg->rand) == 0)
goto err;
- /* enable seed propagation */
- tsan_store(&drbg->reseed_prop_counter, 1);
-
/*
* Ignore instantiation error to support just-in-time instantiation.
*
* The state of the drbg will be checked in RAND_DRBG_generate() and
* an automatic recovery is attempted.
*/
- (void)RAND_DRBG_instantiate(drbg,
- (const unsigned char *) ossl_pers_string,
- sizeof(ossl_pers_string) - 1);
+ (void)RAND_DRBG_instantiate(drbg, NULL, 0);
return drbg;
err:
@@ -1232,112 +842,15 @@ static int drbg_bytes(unsigned char *out, int count)
return ret;
}
-/*
- * Calculates the minimum length of a full entropy buffer
- * which is necessary to seed (i.e. instantiate) the DRBG
- * successfully.
- */
-size_t rand_drbg_seedlen(RAND_DRBG *drbg)
-{
- /*
- * If no os entropy source is available then RAND_seed(buffer, bufsize)
- * is expected to succeed if and only if the buffer length satisfies
- * the following requirements, which follow from the calculations
- * in RAND_DRBG_instantiate().
- */
- size_t min_entropy = drbg->strength;
- size_t min_entropylen = drbg->min_entropylen;
-
- /*
- * Extra entropy for the random nonce in the absence of a
- * get_nonce callback, see comment in RAND_DRBG_instantiate().
- */
- if (drbg->min_noncelen > 0 && drbg->get_nonce == NULL) {
- min_entropy += drbg->strength / 2;
- min_entropylen += drbg->min_noncelen;
- }
-
- /*
- * Convert entropy requirement from bits to bytes
- * (dividing by 8 without rounding upwards, because
- * all entropy requirements are divisible by 8).
- */
- min_entropy >>= 3;
-
- /* Return a value that satisfies both requirements */
- return min_entropy > min_entropylen ? min_entropy : min_entropylen;
-}
-
/* Implements the default OpenSSL RAND_add() method */
static int drbg_add(const void *buf, int num, double randomness)
{
- int ret = 0;
RAND_DRBG *drbg = RAND_DRBG_get0_master();
- size_t buflen;
- size_t seedlen;
-
- if (drbg == NULL)
- return 0;
- if (num < 0 || randomness < 0.0)
+ if (drbg == NULL || num <= 0)
return 0;
- rand_drbg_lock(drbg);
- seedlen = rand_drbg_seedlen(drbg);
-
- buflen = (size_t)num;
-
-#ifdef FIPS_MODULE
- /*
- * NIST SP-800-90A mandates that entropy *shall not* be provided
- * by the consuming application. By setting the randomness to zero,
- * we ensure that the buffer contents will be added to the internal
- * state of the DRBG only as additional data.
- *
- * (NIST SP-800-90Ar1, Sections 9.1 and 9.2)
- */
- randomness = 0.0;
-#endif
- if (buflen < seedlen || randomness < (double) seedlen) {
-#if defined(OPENSSL_RAND_SEED_NONE)
- /*
- * If no os entropy source is available, a reseeding will fail
- * inevitably. So we use a trick to mix the buffer contents into
- * the DRBG state without forcing a reseeding: we generate a
- * dummy random byte, using the buffer content as additional data.
- * Note: This won't work with RAND_DRBG_FLAG_CTR_NO_DF.
- */
- unsigned char dummy[1];
-
- ret = RAND_DRBG_generate(drbg, dummy, sizeof(dummy), 0, buf, buflen);
- rand_drbg_unlock(drbg);
- return ret;
-#else
- /*
- * If an os entropy source is available then we declare the buffer content
- * as additional data by setting randomness to zero and trigger a regular
- * reseeding.
- */
- randomness = 0.0;
-#endif
- }
-
- if (randomness > (double)seedlen) {
- /*
- * The purpose of this check is to bound |randomness| by a
- * relatively small value in order to prevent an integer
- * overflow when multiplying by 8 in the rand_drbg_restart()
- * call below. Note that randomness is measured in bytes,
- * not bits, so this value corresponds to eight times the
- * security strength.
- */
- randomness = (double)seedlen;
- }
-
- ret = rand_drbg_restart(drbg, buf, buflen, (size_t)(8 * randomness));
- rand_drbg_unlock(drbg);
-
- return ret;
+ return EVP_RAND_reseed(drbg->rand, 0, NULL, 0, buf, num);
}
/* Implements the default OpenSSL RAND_seed() method */
@@ -1355,12 +868,15 @@ static int drbg_status(void)
if (drbg == NULL)
return 0;
- rand_drbg_lock(drbg);
- ret = drbg->state == DRBG_READY ? 1 : 0;
- rand_drbg_unlock(drbg);
+ ret = EVP_RAND_state(drbg->rand) == EVP_RAND_STATE_READY ? 1 : 0;
return ret;
}
+int RAND_DRBG_verify_zeroization(RAND_DRBG *drbg)
+{
+ return EVP_RAND_verify_zeroization(drbg->rand);
+}
+
/*
* Get the master DRBG.
* Returns pointer to the DRBG on success, NULL on failure.
@@ -1373,6 +889,13 @@ RAND_DRBG *OPENSSL_CTX_get0_master_drbg(OPENSSL_CTX *ctx)
if (dgbl == NULL)
return NULL;
+ if (dgbl->master_drbg == NULL) {
+ if (!CRYPTO_THREAD_write_lock(dgbl->lock))
+ return NULL;
+ if (dgbl->master_drbg == NULL)
+ dgbl->master_drbg = drbg_setup(ctx, NULL, RAND_DRBG_TYPE_MASTER);
+ CRYPTO_THREAD_unlock(dgbl->lock);
+ }
return dgbl->master_drbg;
}
@@ -1388,13 +911,17 @@ RAND_DRBG *RAND_DRBG_get0_master(void)
RAND_DRBG *OPENSSL_CTX_get0_public_drbg(OPENSSL_CTX *ctx)
{
DRBG_GLOBAL *dgbl = drbg_get_global(ctx);
- RAND_DRBG *drbg;
+ RAND_DRBG *drbg, *master;
if (dgbl == NULL)
return NULL;
drbg = CRYPTO_THREAD_get_local(&dgbl->public_drbg);
if (drbg == NULL) {
+ master = OPENSSL_CTX_get0_master_drbg(ctx);
+ if (master == NULL)
+ return NULL;
+
ctx = openssl_ctx_get_concrete(ctx);
/*
* If the private_drbg is also NULL then this is the first time we've
@@ -1403,7 +930,7 @@ RAND_DRBG *OPENSSL_CTX_get0_public_drbg(OPENSSL_CTX *ctx)
if (CRYPTO_THREAD_get_local(&dgbl->private_drbg) == NULL
&& !ossl_init_thread_start(NULL, ctx, drbg_delete_thread_state))
return NULL;
- drbg = drbg_setup(ctx, dgbl->master_drbg, RAND_DRBG_TYPE_PUBLIC);
+ drbg = drbg_setup(ctx, master, RAND_DRBG_TYPE_PUBLIC);
CRYPTO_THREAD_set_local(&dgbl->public_drbg, drbg);
}
return drbg;
@@ -1421,13 +948,17 @@ RAND_DRBG *RAND_DRBG_get0_public(void)
RAND_DRBG *OPENSSL_CTX_get0_private_drbg(OPENSSL_CTX *ctx)
{
DRBG_GLOBAL *dgbl = drbg_get_global(ctx);
- RAND_DRBG *drbg;
+ RAND_DRBG *drbg, *master;
if (dgbl == NULL)
return NULL;
drbg = CRYPTO_THREAD_get_local(&dgbl->private_drbg);
if (drbg == NULL) {
+ master = OPENSSL_CTX_get0_master_drbg(ctx);
+ if (master == NULL)
+ return NULL;
+
ctx = openssl_ctx_get_concrete(ctx);
/*
* If the public_drbg is also NULL then this is the first time we've
@@ -1436,7 +967,7 @@ RAND_DRBG *OPENSSL_CTX_get0_private_drbg(OPENSSL_CTX *ctx)
if (CRYPTO_THREAD_get_local(&dgbl->public_drbg) == NULL
&& !ossl_init_thread_start(NULL, ctx, drbg_delete_thread_state))
return NULL;
- drbg = drbg_setup(ctx, dgbl->master_drbg, RAND_DRBG_TYPE_PRIVATE);
+ drbg = drbg_setup(ctx, master, RAND_DRBG_TYPE_PRIVATE);
CRYPTO_THREAD_set_local(&dgbl->private_drbg, drbg);
}
return drbg;
diff --git a/crypto/rand/rand_deprecated.c b/crypto/rand/rand_deprecated.c
new file mode 100644
index 0000000000..dd69f1beb7
--- /dev/null
+++ b/crypto/rand/rand_deprecated.c
@@ -0,0 +1,35 @@
+/*
+ * Copyright 1995-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <e_os.h>
+#include <openssl/macros.h>
+#include <openssl/rand.h>
+
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
+# include <windows.h>
+# if OPENSSL_API_COMPAT < 0x10100000L
+
+# define DEPRECATED_RAND_FUNCTIONS_DEFINED
+
+int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+ RAND_poll();
+ return RAND_status();
+}
+
+void RAND_screen(void)
+{
+ RAND_poll();
+}
+# endif
+#endif
+
+#ifndef DEPRECATED_RAND_FUNCTIONS_DEFINED
+NON_EMPTY_TRANSLATION_UNIT
+#endif
diff --git a/crypto/rand/rand_err.c b/crypto/rand/rand_err.c
index 73b488fb90..39f547c7f1 100644
--- a/crypto/rand/rand_err.c
+++ b/crypto/rand/rand_err.c
@@ -49,6 +49,8 @@ static const ERR_STRING_DATA RAND_str_reasons[] = {
"Function not implemented"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_FWRITE_ERROR), "Error writing file"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_GENERATE_ERROR), "generate error"},
+ {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_INSUFFICIENT_DRBG_STRENGTH),
+ "insufficient drbg strength"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_INTERNAL_ERROR), "internal error"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_IN_ERROR_STATE), "in error state"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_NOT_A_REGULAR_FILE),
@@ -77,6 +79,14 @@ static const ERR_STRING_DATA RAND_str_reasons[] = {
"too little nonce requested"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_TOO_MUCH_NONCE_REQUESTED),
"too much nonce requested"},
+ {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER),
+ "unable to get parent reseed prop counter"},
+ {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_UNABLE_TO_GET_PARENT_STRENGTH),
+ "unable to get parent strength"},
+ {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_UNABLE_TO_GET_RESEED_PROP_CTR),
+ "unable to get reseed prop ctr"},
+ {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_UNABLE_TO_LOCK_PARENT),
+ "unable to lock parent"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_UNSUPPORTED_DRBG_FLAGS),
"unsupported drbg flags"},
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_UNSUPPORTED_DRBG_TYPE),
diff --git a/crypto/rand/rand_lib.c b/crypto/rand/rand_lib.c
index a5eb0bc7ae..e7dfb07de2 100644
--- a/crypto/rand/rand_lib.c
+++ b/crypto/rand/rand_lib.c
@@ -18,6 +18,9 @@
#include "e_os.h"
#ifndef FIPS_MODULE
+# include "prov/rand_pool.h"
+# include "prov/seeding.h"
+
# ifndef OPENSSL_NO_ENGINE
/* non-NULL if default_RAND_meth is ENGINE-provided */
static ENGINE *funct_ref;
@@ -28,217 +31,7 @@ static const RAND_METHOD *default_RAND_meth;
static CRYPTO_ONCE rand_init = CRYPTO_ONCE_STATIC_INIT;
static int rand_inited = 0;
-#endif /* FIPS_MODULE */
-
-#ifdef OPENSSL_RAND_SEED_RDTSC
-/*
- * IMPORTANT NOTE: It is not currently possible to use this code
- * because we are not sure about the amount of randomness it provides.
- * Some SP900 tests have been run, but there is internal skepticism.
- * So for now this code is not used.
- */
-# error "RDTSC enabled? Should not be possible!"
-
-/*
- * Acquire entropy from high-speed clock
- *
- * Since we get some randomness from the low-order bits of the
- * high-speed clock, it can help.
- *
- * Returns the total entropy count, if it exceeds the requested
- * entropy count. Otherwise, returns an entropy count of 0.
- */
-size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool)
-{
- unsigned char c;
- int i;
-
- if ((OPENSSL_ia32cap_P[0] & (1 << 4)) != 0) {
- for (i = 0; i < TSC_READ_COUNT; i++) {
- c = (unsigned char)(OPENSSL_rdtsc() & 0xFF);
- rand_pool_add(pool, &c, 1, 4);
- }
- }
- return rand_pool_entropy_available(pool);
-}
-#endif
-
-#ifdef OPENSSL_RAND_SEED_RDCPU
-size_t OPENSSL_ia32_rdseed_bytes(unsigned char *buf, size_t len);
-size_t OPENSSL_ia32_rdrand_bytes(unsigned char *buf, size_t len);
-
-/*
- * Acquire entropy using Intel-specific cpu instructions
- *
- * Uses the RDSEED instruction if available, otherwise uses
- * RDRAND if available.
- *
- * For the differences between RDSEED and RDRAND, and why RDSEED
- * is the preferred choice, see https://goo.gl/oK3KcN
- *
- * Returns the total entropy count, if it exceeds the requested
- * entropy count. Otherwise, returns an entropy count of 0.
- */
-size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool)
-{
- size_t bytes_needed;
- unsigned char *buffer;
-
- bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
- if (bytes_needed > 0) {
- buffer = rand_pool_add_begin(pool, bytes_needed);
-
- if (buffer != NULL) {
- /* Whichever comes first, use RDSEED, RDRAND or nothing */
- if ((OPENSSL_ia32cap_P[2] & (1 << 18)) != 0) {
- if (OPENSSL_ia32_rdseed_bytes(buffer, bytes_needed)
- == bytes_needed) {
- rand_pool_add_end(pool, bytes_needed, 8 * bytes_needed);
- }
- } else if ((OPENSSL_ia32cap_P[1] & (1 << (62 - 32))) != 0) {
- if (OPENSSL_ia32_rdrand_bytes(buffer, bytes_needed)
- == bytes_needed) {
- rand_pool_add_end(pool, bytes_needed, 8 * bytes_needed);
- }
- } else {
- rand_pool_add_end(pool, 0, 0);
- }
- }
- }
-
- return rand_pool_entropy_available(pool);
-}
-#endif
-
-
-/*
- * Implements the get_entropy() callback (see RAND_DRBG_set_callbacks())
- *
- * If the DRBG has a parent, then the required amount of entropy input
- * is fetched using the parent's RAND_DRBG_generate().
- *
- * Otherwise, the entropy is polled from the system entropy sources
- * using rand_pool_acquire_entropy().
- *
- * If a random pool has been added to the DRBG using RAND_add(), then
- * its entropy will be used up first.
- */
-size_t rand_drbg_get_entropy(RAND_DRBG *drbg,
- unsigned char **pout,
- int entropy, size_t min_len, size_t max_len,
- int prediction_resistance)
-{
- size_t ret = 0;
- size_t entropy_available = 0;
- RAND_POOL *pool;
-
- if (drbg->parent != NULL && drbg->strength > drbg->parent->strength) {
- /*
- * We currently don't support the algorithm from NIST SP 800-90C
- * 10.1.2 to use a weaker DRBG as source
- */
- RANDerr(RAND_F_RAND_DRBG_GET_ENTROPY, RAND_R_PARENT_STRENGTH_TOO_WEAK);
- return 0;
- }
-
- if (drbg->seed_pool != NULL) {
- pool = drbg->seed_pool;
- pool->entropy_requested = entropy;
- } else {
- pool = rand_pool_new(entropy, drbg->secure, min_len, max_len);
- if (pool == NULL)
- return 0;
- }
-
- if (drbg->parent != NULL) {
- size_t bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
- unsigned char *buffer = rand_pool_add_begin(pool, bytes_needed);
-
- if (buffer != NULL) {
- size_t bytes = 0;
-
- /*
- * Get random data from parent. Include our address as additional input,
- * in order to provide some additional distinction between different
- * DRBG child instances.
- * Our lock is already held, but we need to lock our parent before
- * generating bits from it. (Note: taking the lock will be a no-op
- * if locking if drbg->parent->lock == NULL.)
- */
- rand_drbg_lock(drbg->parent);
- if (RAND_DRBG_generate(drbg->parent,
- buffer, bytes_needed,
- prediction_resistance,
- (unsigned char *)&drbg, sizeof(drbg)) != 0)
- bytes = bytes_needed;
- drbg->reseed_next_counter
- = tsan_load(&drbg->parent->reseed_prop_counter);
- rand_drbg_unlock(drbg->parent);
-
- rand_pool_add_end(pool, bytes, 8 * bytes);
- entropy_available = rand_pool_entropy_available(pool);
- }
-
- } else {
- /* Get entropy by polling system entropy sources. */
- entropy_available = rand_pool_acquire_entropy(pool);
- }
-
- if (entropy_available > 0) {
- ret = rand_pool_length(pool);
- *pout = rand_pool_detach(pool);
- }
-
- if (drbg->seed_pool == NULL)
- rand_pool_free(pool);
- return ret;
-}
-
-/*
- * Implements the cleanup_entropy() callback (see RAND_DRBG_set_callbacks())
- *
- */
-void rand_drbg_cleanup_entropy(RAND_DRBG *drbg,
- unsigned char *out, size_t outlen)
-{
- if (drbg->seed_pool == NULL) {
- if (drbg->secure)
- OPENSSL_secure_clear_free(out, outlen);
- else
- OPENSSL_clear_free(out, outlen);
- }
-}
-
-/*
- * Generate additional data that can be used for the drbg. The data does
- * not need to contain entropy, but it's useful if it contains at least
- * some bits that are unpredictable.
- *
- * Returns 0 on failure.
- *
- * On success it allocates a buffer at |*pout| and returns the length of
- * the data. The buffer should get freed using OPENSSL_secure_clear_free().
- */
-size_t rand_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout)
-{
- size_t ret = 0;
-
- if (rand_pool_add_additional_data(pool) == 0)
- goto err;
-
- ret = rand_pool_length(pool);
- *pout = rand_pool_detach(pool);
-
- err:
- return ret;
-}
-
-void rand_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out)
-{
- rand_pool_reattach(pool, out);
-}
-#ifndef FIPS_MODULE
DEFINE_RUN_ONCE_STATIC(do_rand_init)
{
# ifndef OPENSSL_NO_ENGINE
@@ -287,10 +80,10 @@ void rand_cleanup_int(void)
rand_inited = 0;
}
-/* TODO(3.0): Do we need to handle this somehow in the FIPS module? */
/*
* RAND_close_seed_files() ensures that any seed file descriptors are
- * closed after use.
+ * closed after use. This only applies to libcrypto/default provider,
+ * it does not apply to other providers.
*/
void RAND_keep_random_devices_open(int keep)
{
@@ -307,29 +100,14 @@ void RAND_keep_random_devices_open(int keep)
*/
int RAND_poll(void)
{
- int ret = 0;
-
const RAND_METHOD *meth = RAND_get_rand_method();
+ int ret = meth == RAND_OpenSSL();
+ RAND_POOL *pool;
if (meth == NULL)
return 0;
- if (meth == RAND_OpenSSL()) {
- /* fill random pool and seed the master DRBG */
- RAND_DRBG *drbg = RAND_DRBG_get0_master();
-
- if (drbg == NULL)
- return 0;
-
- rand_drbg_lock(drbg);
- ret = rand_drbg_restart(drbg, NULL, 0, 0);
- rand_drbg_unlock(drbg);
-
- return ret;
-
- } else {
- RAND_POOL *pool = NULL;
-
+ if (!ret) {
/* fill random pool and seed the current legacy RNG */
pool = rand_pool_new(RAND_DRBG_STRENGTH, 1,
(RAND_DRBG_STRENGTH + 7) / 8,
@@ -337,7 +115,7 @@ int RAND_poll(void)
if (pool == NULL)
return 0;
- if (rand_pool_acquire_entropy(pool) == 0)
+ if (prov_pool_acquire_entropy(pool) == 0)
goto err;
if (meth->add == NULL
@@ -347,413 +125,12 @@ int RAND_poll(void)
goto err;
ret = 1;
-
err:
rand_pool_free(pool);
}
-
- return ret;
-}
-#endif /* FIPS_MODULE */
-
-/*
- * Allocate memory and initialize a new random pool
- */
-
-RAND_POOL *rand_pool_new(int entropy_requested, int secure,
- size_t min_len, size_t max_len)
-{
- RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool));
- size_t min_alloc_size = RAND_POOL_MIN_ALLOCATION(secure);
-
- if (pool == NULL) {
- RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE);
- return NULL;
- }
-
- pool->min_len = min_len;
- pool->max_len = (max_len > RAND_POOL_MAX_LENGTH) ?
- RAND_POOL_MAX_LENGTH : max_len;
- pool->alloc_len = min_len < min_alloc_size ? min_alloc_size : min_len;
- if (pool->alloc_len > pool->max_len)
- pool->alloc_len = pool->max_len;
-
- if (secure)
- pool->buffer = OPENSSL_secure_zalloc(pool->alloc_len);
- else
- pool->buffer = OPENSSL_zalloc(pool->alloc_len);
-
- if (pool->buffer == NULL) {
- RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE);
- goto err;
- }
-
- pool->entropy_requested = entropy_requested;
- pool->secure = secure;
-
- return pool;
-
-err:
- OPENSSL_free(pool);
- return NULL;
-}
-
-/*
- * Attach new random pool to the given buffer
- *
- * This function is intended to be used only for feeding random data
- * provided by RAND_add() and RAND_seed() into the <master> DRBG.
- */
-RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len,
- size_t entropy)
-{
- RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool));
-
- if (pool == NULL) {
- RANDerr(RAND_F_RAND_POOL_ATTACH, ERR_R_MALLOC_FAILURE);
- return NULL;
- }
-
- /*
- * The const needs to be cast away, but attached buffers will not be
- * modified (in contrary to allocated buffers which are zeroed and
- * freed in the end).
- */
- pool->buffer = (unsigned char *) buffer;
- pool->len = len;
-
- pool->attached = 1;
-
- pool->min_len = pool->max_len = pool->alloc_len = pool->len;
- pool->entropy = entropy;
-
- return pool;
-}
-
-/*
- * Free |pool|, securely erasing its buffer.
- */
-void rand_pool_free(RAND_POOL *pool)
-{
- if (pool == NULL)
- return;
-
- /*
- * Although it would be advisable from a cryptographical viewpoint,
- * we are not allowed to clear attached buffers, since they are passed
- * to rand_pool_attach() as `const unsigned char*`.
- * (see corresponding comment in rand_pool_attach()).
- */
- if (!pool->attached) {
- if (pool->secure)
- OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
- else
- OPENSSL_clear_free(pool->buffer, pool->alloc_len);
- }
-
- OPENSSL_free(pool);
-}
-
-/*
- * Return the |pool|'s buffer to the caller (readonly).
- */
-const unsigned char *rand_pool_buffer(RAND_POOL *pool)
-{
- return pool->buffer;
-}
-
-/*
- * Return the |pool|'s entropy to the caller.
- */
-size_t rand_pool_entropy(RAND_POOL *pool)
-{
- return pool->entropy;
-}
-
-/*
- * Return the |pool|'s buffer length to the caller.
- */
-size_t rand_pool_length(RAND_POOL *pool)
-{
- return pool->len;
-}
-
-/*
- * Detach the |pool| buffer and return it to the caller.
- * It's the responsibility of the caller to free the buffer
- * using OPENSSL_secure_clear_free() or to re-attach it
- * again to the pool using rand_pool_reattach().
- */
-unsigned char *rand_pool_detach(RAND_POOL *pool)
-{
- unsigned char *ret = pool->buffer;
- pool->buffer = NULL;
- pool->entropy = 0;
return ret;
}
-/*
- * Re-attach the |pool| buffer. It is only allowed to pass
- * the |buffer| which was previously detached from the same pool.
- */
-void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer)
-{
- pool->buffer = buffer;
- OPENSSL_cleanse(pool->buffer, pool->len);
- pool->len = 0;
-}
-
-/*
- * If |entropy_factor| bits contain 1 bit of entropy, how many bytes does one
- * need to obtain at least |bits| bits of entropy?
- */
-#define ENTROPY_TO_BYTES(bits, entropy_factor) \
- (((bits) * (entropy_factor) + 7) / 8)
-
-
-/*
- * Checks whether the |pool|'s entropy is available to the caller.
- * This is the case when entropy count and buffer length are high enough.
- * Returns
- *
- * |entropy| if the entropy count and buffer size is large enough
- * 0 otherwise
- */
-size_t rand_pool_entropy_available(RAND_POOL *pool)
-{
- if (pool->entropy < pool->entropy_requested)
- return 0;
-
- if (pool->len < pool->min_len)
- return 0;
-
- return pool->entropy;
-}
-
-/*
- * Returns the (remaining) amount of entropy needed to fill
- * the random pool.
- */
-
-size_t rand_pool_entropy_needed(RAND_POOL *pool)
-{
- if (pool->entropy < pool->entropy_requested)
- return pool->entropy_requested - pool->entropy;
-
- return 0;
-}
-
-/* Increase the allocation size -- not usable for an attached pool */
-static int rand_pool_grow(RAND_POOL *pool, size_t len)
-{
- if (len > pool->alloc_len - pool->len) {
- unsigned char *p;
- const size_t limit = pool->max_len / 2;
- size_t newlen = pool->alloc_len;
-
- if (pool->attached || len > pool->max_len - pool->len) {
- RANDerr(RAND_F_RAND_POOL_GROW, ERR_R_INTERNAL_ERROR);
- return 0;
- }
-
- do
- newlen = newlen < limit ? newlen * 2 : pool->max_len;
- while (len > newlen - pool->len);
-
- if (pool->secure)
- p = OPENSSL_secure_zalloc(newlen);
- else
- p = OPENSSL_zalloc(newlen);
- if (p == NULL) {
- RANDerr(RAND_F_RAND_POOL_GROW, ERR_R_MALLOC_FAILURE);
- return 0;
- }
- memcpy(p, pool->buffer, pool->len);
- if (pool->secure)
- OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
- else
- OPENSSL_clear_free(pool->buffer, pool->alloc_len);
- pool->buffer = p;
- pool->alloc_len = newlen;
- }
- return 1;
-}
-
-/*
- * Returns the number of bytes needed to fill the pool, assuming
- * the input has 1 / |entropy_factor| entropy bits per data bit.
- * In case of an error, 0 is returned.
- */
-
-size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor)
-{
- size_t bytes_needed;
- size_t entropy_needed = rand_pool_entropy_needed(pool);
-
- if (entropy_factor < 1) {
- RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_ARGUMENT_OUT_OF_RANGE);
- return 0;
- }
-
- bytes_needed = ENTROPY_TO_BYTES(entropy_needed, entropy_factor);
-
- if (bytes_needed > pool->max_len - pool->len) {
- /* not enough space left */
- RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_RANDOM_POOL_OVERFLOW);
- return 0;
- }
-
- if (pool->len < pool->min_len &&
- bytes_needed < pool->min_len - pool->len)
- /* to meet the min_len requirement */
- bytes_needed = pool->min_len - pool->len;
-
- /*
- * Make sure the buffer is large enough for the requested amount
- * of data. This guarantees that existing code patterns where
- * rand_pool_add_begin, rand_pool_add_end or rand_pool_add
- * are used to collect entropy data without any error handling
- * whatsoever, continue to be valid.
- * Furthermore if the allocation here fails once, make sure that
- * we don't fall back to a less secure or even blocking random source,
- * as that could happen by the existing code patterns.
- * This is not a concern for additional data, therefore that
- * is not needed if rand_pool_grow fails in other places.
- */
- if (!rand_pool_grow(pool, bytes_needed)) {
- /* persistent error for this pool */
- pool->max_len = pool->len = 0;
- return 0;
- }
-
- return bytes_needed;
-}
-
-/* Returns the remaining number of bytes available */
-size_t rand_pool_bytes_remaining(RAND_POOL *pool)
-{
- return pool->max_len - pool->len;
-}
-
-/*
- * Add random bytes to the random pool.
- *
- * It is expected that the |buffer| contains |len| bytes of
- * random input which contains at least |entropy| bits of
- * randomness.
- *
- * Returns 1 if the added amount is adequate, otherwise 0
- */
-int rand_pool_add(RAND_POOL *pool,
- const unsigned char *buffer, size_t len, size_t entropy)
-{
- if (len > pool->max_len - pool->len) {
- RANDerr(RAND_F_RAND_POOL_ADD, RAND_R_ENTROPY_INPUT_TOO_LONG);
- return 0;
- }
-
- if (pool->buffer == NULL) {
- RANDerr(RAND_F_RAND_POOL_ADD, ERR_R_INTERNAL_ERROR);
- return 0;
- }
-
- if (len > 0) {
- /*
- * This is to protect us from accidentally passing the buffer
- * returned from rand_pool_add_begin.
- * The check for alloc_len makes sure we do not compare the
- * address of the end of the allocated memory to something
- * different, since that comparison would have an
- * indeterminate result.
- */
- if (pool->alloc_len > pool->len && pool->buffer + pool->len == buffer) {
- RANDerr(RAND_F_RAND_POOL_ADD, ERR_R_INTERNAL_ERROR);
- return 0;
- }
- /*
- * We have that only for cases when a pool is used to collect
- * additional data.
- * For entropy data, as long as the allocation request stays within
- * the limits given by rand_pool_bytes_needed this rand_pool_grow
- * below is guaranteed to succeed, thus no allocation happens.
- */
- if (!rand_pool_grow(pool, len))
- return 0;
- memcpy(pool->buffer + pool->len, buffer, len);
- pool->len += len;
- pool->entropy += entropy;
- }
-
- return 1;
-}
-
-/*
- * Start to add random bytes to the random pool in-place.
- *
- * Reserves the next |len| bytes for adding random bytes in-place
- * and returns a pointer to the buffer.
- * The caller is allowed to copy up to |len| bytes into the buffer.
- * If |len| == 0 this is considered a no-op and a NULL pointer
- * is returned without producing an error message.
- *
- * After updating the buffer, rand_pool_add_end() needs to be called
- * to finish the update operation (see next comment).
- */
-unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len)
-{
- if (len == 0)
- return NULL;
-
- if (len > pool->max_len - pool->len) {
- RANDerr(RAND_F_RAND_POOL_ADD_BEGIN, RAND_R_RANDOM_POOL_OVERFLOW);
- return NULL;
- }
-
- if (pool->buffer == NULL) {
- RANDerr(RAND_F_RAND_POOL_ADD_BEGIN, ERR_R_INTERNAL_ERROR);
- return NULL;
- }
-
- /*
- * As long as the allocation request stays within the limits given
- * by rand_pool_bytes_needed this rand_pool_grow below is guaranteed
- * to succeed, thus no allocation happens.
- * We have that only for cases when a pool is used to collect
- * additional data. Then the buffer might need to grow here,
- * and of course the caller is responsible to check the return
- * value of this function.
- */
- if (!rand_pool_grow(pool, len))
- return NULL;
-
- return pool->buffer + pool->len;
-}
-
-/*
- * Finish to add random bytes to the random pool in-place.
- *
- * Finishes an in-place update of the random pool started by
- * rand_pool_add_begin() (see previous comment).
- * It is expected that |len| bytes of random input have been added
- * to the buffer which contain at least |entropy| bits of randomness.
- * It is allowed to add less bytes than originally reserved.
- */
-int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy)
-{
- if (len > pool->alloc_len - pool->len) {
- RANDerr(RAND_F_RAND_POOL_ADD_END, RAND_R_RANDOM_POOL_OVERFLOW);
- return 0;
- }
-
- if (len > 0) {
- pool->len += len;
- pool->entropy += entropy;
- }
-
- return 1;
-}
-
-#ifndef FIPS_MODULE
int RAND_set_rand_method(const RAND_METHOD *meth)
{
if (!RUN_ONCE(&rand_init, do_rand_init))
@@ -768,13 +145,9 @@ int RAND_set_rand_method(const RAND_METHOD *meth)
CRYPTO_THREAD_unlock(rand_meth_lock);
return 1;
}
-#endif
const RAND_METHOD *RAND_get_rand_method(void)
{
-#ifdef FIPS_MODULE
- return NULL;
-#else
const RAND_METHOD *tmp_meth = NULL;
if (!RUN_ONCE(&rand_init, do_rand_init))
@@ -801,10 +174,9 @@ const RAND_METHOD *RAND_get_rand_method(void)
tmp_meth = default_RAND_meth;
CRYPTO_THREAD_unlock(rand_meth_lock);
return tmp_meth;
-#endif
}
-#if !defined(OPENSSL_NO_ENGINE) && !defined(FIPS_MODULE)
+# if !defined(OPENSSL_NO_ENGINE)
int RAND_set_rand_engine(ENGINE *engine)
{
const RAND_METHOD *tmp_meth = NULL;
@@ -828,7 +200,7 @@ int RAND_set_rand_engine(ENGINE *engine)
CRYPTO_THREAD_unlock(rand_engine_lock);
return 1;
}
-#endif
+# endif
void RAND_seed(const void *buf, int num)
{
@@ -846,6 +218,38 @@ void RAND_add(const void *buf, int num, double randomness)
meth->add(buf, num, randomness);
}
+# if !defined(OPENSSL_NO_DEPRECATED_1_1_0)
+int RAND_pseudo_bytes(unsigned char *buf, int num)
+{
+ const RAND_METHOD *meth = RAND_get_rand_method();
+
+ if (meth != NULL && meth->pseudorand != NULL)
+ return meth->pseudorand(buf, num);
+ RANDerr(RAND_F_RAND_PSEUDO_BYTES, RAND_R_FUNC_NOT_IMPLEMENTED);
+ return -1;
+}
+# endif
+
+int RAND_status(void)
+{
+ RAND_DRBG *drbg;
+ const RAND_METHOD *meth = RAND_get_rand_method();
+
+ if (meth != NULL && meth != RAND_OpenSSL())
+ return meth->status != NULL ? meth->status() : 0;
+
+ if ((drbg = RAND_DRBG_get0_master()) == NULL || drbg->rand == NULL)
+ return EVP_RAND_STATE_UNINITIALISED;
+ return EVP_RAND_state(drbg->rand) == EVP_RAND_STATE_READY;
+}
+#else /* !FIPS_MODULE */
+
+const RAND_METHOD *RAND_get_rand_method(void)
+{
+ return NULL;
+}
+#endif /* !FIPS_MODULE */
+
/*
* This function is not part of RAND_METHOD, so if we're not using
* the default method, then just call RAND_bytes(). Otherwise make
@@ -898,24 +302,3 @@ int RAND_bytes(unsigned char *buf, int num)
{
return RAND_bytes_ex(NULL, buf, num);
}
-
-#if !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(FIPS_MODULE)
-int RAND_pseudo_bytes(unsigned char *buf, int num)
-{
- const RAND_METHOD *meth = RAND_get_rand_method();
-
- if (meth != NULL && meth->pseudorand != NULL)
- return meth->pseudorand(buf, num);
- RANDerr(RAND_F_RAND_PSEUDO_BYTES, RAND_R_FUNC_NOT_IMPLEMENTED);
- return -1;
-}
-#endif
-
-int RAND_status(void)
-{
- const RAND_METHOD *meth = RAND_get_rand_method();
-
- if (meth != NULL && meth->status != NULL)
- return meth->status();
- return 0;
-}
diff --git a/crypto/rand/rand_local.h b/crypto/rand/rand_local.h
index 76e50fa2fa..e46248cf9b 100644
--- a/crypto/rand/rand_local.h
+++ b/crypto/rand/rand_local.h
@@ -21,9 +21,6 @@
# include "internal/numbers.h"
-/* How many times to read the TSC as a randomness source. */
-# define TSC_READ_COUNT 4
-
/* Maximum reseed intervals */
# define MAX_RESEED_INTERVAL (1 << 24)
# define MAX_RESEED_TIME_INTERVAL (1 << 20) /* approx. 12 days */
@@ -31,299 +28,24 @@
/* Default reseed intervals */
# define MASTER_RESEED_INTERVAL (1 << 8)
# define SLAVE_RESEED_INTERVAL (1 << 16)
-# define MASTER_RESEED_TIME_INTERVAL (60*60) /* 1 hour */
-# define SLAVE_RESEED_TIME_INTERVAL (7*60) /* 7 minutes */
-
-/*
- * The number of bytes that constitutes an atomic lump of entropy with respect
- * to the FIPS 140-2 section 4.9.2 Conditional Tests. The size is somewhat
- * arbitrary, the smaller the value, the less entropy is consumed on first
- * read but the higher the probability of the test failing by accident.
- *
- * The value is in bytes.
- */
-#define CRNGT_BUFSIZ 16
-
-/*
- * Maximum input size for the DRBG (entropy, nonce, personalization string)
- *
- * NIST SP800 90Ar1 allows a maximum of (1 << 35) bits i.e., (1 << 32) bytes.
- *
- * We lower it to 'only' INT32_MAX bytes, which is equivalent to 2 gigabytes.
- */
-# define DRBG_MAX_LENGTH INT32_MAX
-
-/* The default nonce */
-#ifdef CHARSET_EBCDIC
-# define DRBG_DEFAULT_PERS_STRING { 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, \
- 0x4c, 0x20, 0x4e, 0x49, 0x53, 0x54, 0x20, 0x53, 0x50, 0x20, 0x38, 0x30, \
- 0x30, 0x2d, 0x39, 0x30, 0x41, 0x20, 0x44, 0x52, 0x42, 0x47, 0x00};
-#else
-# define DRBG_DEFAULT_PERS_STRING "OpenSSL NIST SP 800-90A DRBG"
-#endif
-
-/*
- * Maximum allocation size for RANDOM_POOL buffers
- *
- * The max_len value for the buffer provided to the rand_drbg_get_entropy()
- * callback is currently 2^31 bytes (2 gigabytes), if a derivation function
- * is used. Since this is much too large to be allocated, the rand_pool_new()
- * function chooses more modest values as default pool length, bounded
- * by RAND_POOL_MIN_LENGTH and RAND_POOL_MAX_LENGTH
- *
- * The choice of the RAND_POOL_FACTOR is large enough such that the
- * RAND_POOL can store a random input which has a lousy entropy rate of
- * 8/256 (= 0.03125) bits per byte. This input will be sent through the
- * derivation function which 'compresses' the low quality input into a
- * high quality output.
- *
- * The factor 1.5 below is the pessimistic estimate for the extra amount
- * of entropy required when no get_nonce() callback is defined.
- */
-# define RAND_POOL_FACTOR 256
-# define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * \
- 3 * (RAND_DRBG_STRENGTH / 16))
-/*
- * = (RAND_POOL_FACTOR * \
- * 1.5 * (RAND_DRBG_STRENGTH / 8))
- */
-
-/*
- * Initial allocation minimum.
- *
- * There is a distinction between the secure and normal allocation minimums.
- * Ideally, the secure allocation size should be a power of two. The normal
- * allocation size doesn't have any such restriction.
- *
- * The secure value is based on 128 bits of secure material, which is 16 bytes.
- * Typically, the DRBGs will set a minimum larger than this so optimal
- * allocation ought to take place (for full quality seed material).
- *
- * The normal value has been chosen by noticing that the rand_drbg_get_nonce
- * function is usually the largest of the built in allocation (twenty four
- * bytes and then appending another sixteen bytes). This means the buffer ends
- * with 40 bytes. The value of forty eight is comfortably above this which
- * allows some slack in the platform specific values used.
- */
-# define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48)
-
-/* DRBG status values */
-typedef enum drbg_status_e {
- DRBG_UNINITIALISED,
- DRBG_READY,
- DRBG_ERROR
-} DRBG_STATUS;
-
-
-/* instantiate */
-typedef int (*RAND_DRBG_instantiate_fn)(RAND_DRBG *ctx,
- const unsigned char *ent,
- size_t entlen,
- const unsigned char *nonce,
- size_t noncelen,
- const unsigned char *pers,
- size_t perslen);
-/* reseed */
-typedef int (*RAND_DRBG_reseed_fn)(RAND_DRBG *ctx,
- const unsigned char *ent,
- size_t entlen,
- const unsigned char *adin,
- size_t adinlen);
-/* generate output */
-typedef int (*RAND_DRBG_generate_fn)(RAND_DRBG *ctx,
- unsigned char *out,
- size_t outlen,
- const unsigned char *adin,
- size_t adinlen);
-/* uninstantiate */
-typedef int (*RAND_DRBG_uninstantiate_fn)(RAND_DRBG *ctx);
-
-
+# define MASTER_RESEED_TIME_INTERVAL (60 * 60) /* 1 hour */
+# define SLAVE_RESEED_TIME_INTERVAL (7 * 60) /* 7 minutes */
/*
- * The DRBG methods
- */
-
-typedef struct rand_drbg_method_st {
- RAND_DRBG_instantiate_fn instantiate;
- RAND_DRBG_reseed_fn reseed;
- RAND_DRBG_generate_fn generate;
- RAND_DRBG_uninstantiate_fn uninstantiate;
-} RAND_DRBG_METHOD;
-
-/* 888 bits from SP800-90Ar1 10.1 table 2 */
-#define HASH_PRNG_MAX_SEEDLEN (888/8)
-
-typedef struct rand_drbg_hash_st {
- EVP_MD *md;
- EVP_MD_CTX *ctx;
- size_t blocklen;
- unsigned char V[HASH_PRNG_MAX_SEEDLEN];
- unsigned char C[HASH_PRNG_MAX_SEEDLEN];
- /* Temporary value storage: should always exceed max digest length */
- unsigned char vtmp[HASH_PRNG_MAX_SEEDLEN];
-} RAND_DRBG_HASH;
-
-typedef struct rand_drbg_hmac_st {
- EVP_MD *md;
- HMAC_CTX *ctx;
- size_t blocklen;
- unsigned char K[EVP_MAX_MD_SIZE];
- unsigned char V[EVP_MAX_MD_SIZE];
-} RAND_DRBG_HMAC;
-
-/*
- * The state of a DRBG AES-CTR.
- */
-typedef struct rand_drbg_ctr_st {
- EVP_CIPHER_CTX *ctx_ecb;
- EVP_CIPHER_CTX *ctx_ctr;
- EVP_CIPHER_CTX *ctx_df;
- EVP_CIPHER *cipher_ecb;
- EVP_CIPHER *cipher_ctr;
- size_t keylen;
- unsigned char K[32];
- unsigned char V[16];
- /* Temporary block storage used by ctr_df */
- unsigned char bltmp[16];
- size_t bltmp_pos;
- unsigned char KX[48];
-} RAND_DRBG_CTR;
-
-
-/*
- * The 'random pool' acts as a dumb container for collecting random
- * input from various entropy sources. The pool has no knowledge about
- * whether its randomness is fed into a legacy RAND_METHOD via RAND_add()
- * or into a new style RAND_DRBG. It is the callers duty to 1) initialize the
- * random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and
- * 4) cleanup the random pool again.
- *
- * The random pool contains no locking mechanism because its scope and
- * lifetime is intended to be restricted to a single stack frame.
- */
-struct rand_pool_st {
- unsigned char *buffer; /* points to the beginning of the random pool */
- size_t len; /* current number of random bytes contained in the pool */
-
- int attached; /* true pool was attached to existing buffer */
- int secure; /* 1: allocated on the secure heap, 0: otherwise */
-
- size_t min_len; /* minimum number of random bytes requested */
- size_t max_len; /* maximum number of random bytes (allocated buffer size) */
- size_t alloc_len; /* current number of bytes allocated */
- size_t entropy; /* current entropy count in bits */
- size_t entropy_requested; /* requested entropy count in bits */
-};
-
-/*
- * The state of all types of DRBGs, even though we only have CTR mode
- * right now.
+ * The state of all types of DRBGs.
*/
struct rand_drbg_st {
CRYPTO_RWLOCK *lock;
/* The library context this DRBG is associated with, if any */
OPENSSL_CTX *libctx;
RAND_DRBG *parent;
- int secure; /* 1: allocated on the secure heap, 0: otherwise */
int type; /* the nid of the underlying algorithm */
- /*
- * Stores the return value of openssl_get_fork_id() as of when we last
- * reseeded. The DRBG reseeds automatically whenever drbg->fork_id !=
- * openssl_get_fork_id(). Used to provide fork-safety and reseed this
- * DRBG in the child process.
- */
- int fork_id;
unsigned short flags; /* various external flags */
- /*
- * The random_data is used by RAND_add()/drbg_add() to attach random
- * data to the global drbg, such that the rand_drbg_get_entropy() callback
- * can pull it during instantiation and reseeding. This is necessary to
- * reconcile the different philosophies of the RAND and the RAND_DRBG
- * with respect to how randomness is added to the RNG during reseeding
- * (see PR #4328).
- */
- struct rand_pool_st *seed_pool;
-
- /*
- * Auxiliary pool for additional data.
- */
- struct rand_pool_st *adin_pool;
-
- /*
- * The following parameters are setup by the per-type "init" function.
- *
- * The supported types and their init functions are:
- * (1) CTR_DRBG: drbg_ctr_init().
- * (2) HMAC_DRBG: drbg_hmac_init().
- * (3) HASH_DRBG: drbg_hash_init().
- *
- * The parameters are closely related to the ones described in
- * section '10.2.1 CTR_DRBG' of [NIST SP 800-90Ar1], with one
- * crucial difference: In the NIST standard, all counts are given
- * in bits, whereas in OpenSSL entropy counts are given in bits
- * and buffer lengths are given in bytes.
- *
- * Since this difference has lead to some confusion in the past,
- * (see [GitHub Issue #2443], formerly [rt.openssl.org #4055])
- * the 'len' suffix has been added to all buffer sizes for
- * clarification.
- */
-
- int strength;
- size_t max_request;
- size_t min_entropylen, max_entropylen;
- size_t min_noncelen, max_noncelen;
- size_t max_perslen, max_adinlen;
-
- /*
- * Counts the number of generate requests since the last reseed
- * (Starts at 1). This value is the reseed_counter as defined in
- * NIST SP 800-90Ar1
- */
- unsigned int reseed_gen_counter;
- /*
- * Maximum number of generate requests until a reseed is required.
- * This value is ignored if it is zero.
- */
- unsigned int reseed_interval;
- /* Stores the time when the last reseeding occurred */
- time_t reseed_time;
- /*
- * Specifies the maximum time interval (in seconds) between reseeds.
- * This value is ignored if it is zero.
- */
- time_t reseed_time_interval;
- /*
- * Counts the number of reseeds since instantiation.
- * This value is ignored if it is zero.
- *
- * This counter is used only for seed propagation from the <master> DRBG
- * to its two children, the <public> and <private> DRBG. This feature is
- * very special and its sole purpose is to ensure that any randomness which
- * is added by RAND_add() or RAND_seed() will have an immediate effect on
- * the output of RAND_bytes() resp. RAND_priv_bytes().
- */
- TSAN_QUALIFIER unsigned int reseed_prop_counter;
- unsigned int reseed_next_counter;
-
- size_t seedlen;
- DRBG_STATUS state;
-
-#ifndef FIPS_MODULE
/* Application data, mainly used in the KATs. */
CRYPTO_EX_DATA ex_data;
-#endif
- /* Implementation specific data */
- union {
- RAND_DRBG_CTR ctr;
- RAND_DRBG_HASH hash;
- RAND_DRBG_HMAC hmac;
- } data;
-
- /* Implementation specific methods */
- RAND_DRBG_METHOD *meth;
+ /* Implementation */
+ EVP_RAND_CTX *rand;
/* Callback functions. See comments in rand_lib.c */
RAND_DRBG_get_entropy_fn get_entropy;
@@ -337,30 +59,4 @@ struct rand_drbg_st {
/* The global RAND method, and the global buffer and DRBG instance. */
extern RAND_METHOD rand_meth;
-/* DRBG helpers */
-int rand_drbg_restart(RAND_DRBG *drbg,
- const unsigned char *buffer, size_t len, size_t entropy);
-size_t rand_drbg_seedlen(RAND_DRBG *drbg);
-/* locking api */
-int rand_drbg_lock(RAND_DRBG *drbg);
-int rand_drbg_unlock(RAND_DRBG *drbg);
-int rand_drbg_enable_locking(RAND_DRBG *drbg);
-
-
-/* initializes the DRBG implementation */
-int drbg_ctr_init(RAND_DRBG *drbg);
-int drbg_hash_init(RAND_DRBG *drbg);
-int drbg_hmac_init(RAND_DRBG *drbg);
-
-/*
- * Entropy call back for the FIPS 140-2 section 4.9.2 Conditional Tests.
- * These need to be exposed for the unit tests.
- */
-int rand_crngt_get_entropy_cb(OPENSSL_CTX *ctx, RAND_POOL *pool,
- unsigned char *buf, unsigned char *md,
- unsigned int *md_size);
-extern int (*crngt_get_entropy)(OPENSSL_CTX *ctx, RAND_POOL *pool,
- unsigned char *buf, unsigned char *md,
- unsigned int *md_size);
-
#endif
diff --git a/doc/man1/openssl-list.pod.in b/doc/man1/openssl-list.pod.in
index d7e062bf01..1eb62d3feb 100644
--- a/doc/man1/openssl-list.pod.in
+++ b/doc/man1/openssl-list.pod.in
@@ -16,6 +16,7 @@ B<openssl list>
[B<-digest-algorithms>]
[B<-kdf-algorithms>]
[B<-mac-algorithms>]
+[B<-random-generators>]
[B<-cipher-commands>]
[B<-cipher-algorithms>]
[B<-public-key-algorithms>]
@@ -73,6 +74,16 @@ displayed.
In verbose mode, the algorithms provided by a provider will get additional
information on what parameters each implementation supports.
+=item B<-random-generators>
+
+Display a list of random number generators.
+
+See L</Display of algorithm names> for a description of how names are
+displayed.
+
+In verbose mode, the algorithms provided by a provider will get additional
+information on what parameters each implementation supports.
+
=item B<-public-key-algorithms>
Display a list of public key algorithms, with each algorithm as
diff --git a/doc/man3/EVP_RAND.pod b/doc/man3/EVP_RAND.pod
new file mode 100644
index 0000000000..c32217543e
--- /dev/null
+++ b/doc/man3/EVP_RAND.pod
@@ -0,0 +1,379 @@
+=pod
+
+=head1 NAME
+
+EVP_RAND, EVP_RAND_fetch, EVP_RAND_free, EVP_RAND_up_ref, EVP_RAND_CTX,
+EVP_RAND_CTX_new, EVP_RAND_CTX_free, EVP_RAND_instantiate,
+EVP_RAND_uninstantiate, EVP_RAND_generate, EVP_RAND_reseed,
+EVP_RAND_nonce, EVP_RAND_enable_locking, EVP_RAND_set_callbacks,
+EVP_RAND_verify_zeroization, EVP_RAND_strength, EVP_RAND_state,
+EVP_RAND_provider, EVP_RAND_CTX_rand, EVP_RAND_is_a, EVP_RAND_number,
+EVP_RAND_name, EVP_RAND_names_do_all, EVP_RAND_get_ctx_params,
+EVP_RAND_set_ctx_params, EVP_RAND_do_all_provided, EVP_RAND_get_params,
+EVP_RAND_gettable_ctx_params, EVP_RAND_settable_ctx_params,
+EVP_RAND_gettable_params, EVP_RAND_STATE_UNINITIALISED, EVP_RAND_STATE_READY,
+EVP_RAND_STATE_ERROR - EVP RAND routines
+
+=head1 SYNOPSIS
+
+ #include <openssl/evp.h>
+
+ typedef struct evp_rand_st EVP_RAND;
+ typedef struct evp_rand_ctx_st EVP_RAND_CTX;
+
+ EVP_RAND *EVP_RAND_fetch(OPENSSL_CTX *libctx, const char *algorithm,
+ const char *properties);
+ int EVP_RAND_up_ref(EVP_RAND *rand);
+ void EVP_RAND_free(EVP_RAND *rand);
+ EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent);
+ void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx);
+ EVP_RAND *EVP_RAND_CTX_rand(EVP_RAND_CTX *ctx);
+ int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]);
+ int EVP_RAND_get_ctx_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]);
+ int EVP_RAND_set_ctx_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]);
+ const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand);
+ const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand);
+ const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand);
+ int EVP_RAND_number(const EVP_RAND *rand);
+ const char *EVP_RAND_name(const EVP_RAND *rand);
+ int EVP_RAND_is_a(const EVP_RAND *rand, const char *name);
+ const OSSL_PROVIDER *EVP_RAND_provider(const EVP_RAND *rand);
+ void EVP_RAND_do_all_provided(OPENSSL_CTX *libctx,
+ void (*fn)(EVP_RAND *rand, void *arg),
+ void *arg);
+ void EVP_RAND_names_do_all(const EVP_RAND *rand,
+ void (*fn)(const char *name, void *data),
+ void *data);
+
+ int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr, size_t pstr_len);
+ int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx);
+ int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *addin, size_t addin_len);
+ int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *addin, size_t addin_len);
+ int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen);
+ int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx);
+ int EVP_RAND_set_callbacks(EVP_RAND_CTX *ctx, OSSL_CALLBACK *get_entropy,
+ OSSL_CALLBACK *cleanup_entropy,
+ OSSL_CALLBACK *get_nonce,
+ OSSL_CALLBACK *cleanup_nonce, void *arg);
+ int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx);
+ unsigned int EVP_RAND_strength(EVP_RAND_CTX *ctx);
+ int EVP_RAND_state(EVP_RAND_CTX *ctx);
+
+ #define EVP_RAND_STATE_UNINITIALISED 0
+ #define EVP_RAND_STATE_READY 1
+ #define EVP_RAND_STATE_ERROR 2
+
+=head1 DESCRIPTION
+
+The EVP RAND routines are a high level interface to random number generators
+both deterministic and not.
+If you just want to generate random bytes then you don't need to use
+these functions: just call RAND_bytes() or RAND_priv_bytes().
+If you want to do more, these calls should be used instead of the older
+RAND and RAND_DRBG functions.
+
+After creating a B<EVP_RAND_CTX> for the required algorithm using
+EVP_RAND_CTX_new(), inputs to the algorithm are supplied
+using calls to EVP_RAND_set_ctx_params() before
+calling EVP_RAND_instantiate() and then EVP_RAND_generate() to produce
+cryptographically secure random bytes.
+
+=head2 Types
+
+B<EVP_RAND> is a type that holds the implementation of a RAND.
+
+B<EVP_RAND_CTX> is a context type that holds the algorithm inputs.
+
+=head2 Algorithm implementation fetching
+
+EVP_RAND_fetch() fetches an implementation of a RAND I<algorithm>, given
+a library context I<libctx> and a set of I<properties>.
+See L<provider(7)/Fetching algorithms> for further information.
+
+The returned value must eventually be freed with
+L<EVP_RAND_free(3)>.
+
+EVP_RAND_up_ref() increments the reference count of an already fetched
+RAND.
+
+EVP_RAND_free() frees a fetched algorithm.
+NULL is a valid parameter, for which this function is a no-op.
+
+=head2 Context manipulation functions
+
+EVP_RAND_CTX_new() creates a new context for the RAND implementation I<rand>.
+If not NULL, I<parent> specifies the seed source for this implementation.
+Not all random number generators need to have a seed source specified.
+If a parent is required, a NULL I<parent> will utilise the operating
+system entropy sources.
+It is recommended to minimise the number of random number generators that
+rely on the operating system for their randomness because this is often scarce.
+
+EVP_RAND_CTX_free() frees up the context I<ctx>. If I<ctx> is NULL, nothing
+is done.
+
+EVP_RAND_CTX_rand() returns the B<EVP_RAND> associated with the context
+I<ctx>.
+
+=head2 Random Number Generator Functions
+
+EVP_RAND_instantiate() instantiates the RAND I<ctx> with a minimum security
+strength of <strength> and personalisation string I<pstr> of length <pstr_len>.
+If I<prediction_resistance> is specified, fresh entropy from a live source
+will be sought. This call operates as per NIST SP 800-90A and SP 800-90C.
+
+EVP_RAND_uninstantiate() uninstantiates the RAND I<ctx> as per
+NIST SP 800-90A and SP 800-90C. Subsequent to this call, the RAND cannot
+be used to generate bytes. It can only be freed or instantiated again.
+
+EVP_RAND_generate() produces random bytes from the RAND I<ctx> with the
+additional input I<addin> of length I<addin_len>. The bytes
+produced will meet the security I<strength>.
+If I<prediction_resistance> is specified, fresh entropy from a live source
+will be sought. This call operates as per NIST SP 800-90A and SP 800-90C.
+
+EVP_RAND_reseed() reseeds the RAND with new entropy.
+Entropy I<ent> of length I<ent_len> bytes can be supplied as can additional
+input I<addin> of length I<addin_len> bytes. In the FIPS provider, both are
+treated as additional input as per NIST SP-800-90Ar1, Sections 9.1 and 9.2.
+Additional seed material is also drawn from the RAND's parent or the
+operating system. If I<prediction_resistance> is specified, fresh entropy
+from a live source will be sought. This call operates as per NIST SP 800-90A
+and SP 800-90C.
+
+EVP_RAND_nonce() creates a nonce in I<out> of maximum length I<outlen>
+bytes from the RAND I<ctx>. The function returns the length of the generated
+nonce. If I<out> is NULL, the length is still returned but no generation
+takes place. This allows a caller to dynamically allocate a buffer of the
+appropriate size.
+
+EVP_RAND_enable_locking() enables locking for the RAND I<ctx> and all of
+its parents. After this I<ctx> will operate in a thread safe manner, albeit
+more slowly.
+
+EVP_RAND_set_callbacks() sets callbacks on the RAND I<ctx> to accept
+external entropy and nonce input. The callback I<get_entropy> fills a buffer
+with new randomness and the callback I<cleanup_entropy> clears and frees the
+buffer. Likewise for I<get_nonce> and I<cleanup_nonce>. In all cases the
+callbacks are passed I<arg> in addition to an OSSL_PARAM array.
+
+EVP_RAND_get_params() retrieves details about the implementation
+I<rand>.
+The set of parameters given with I<params> determine exactly what
+parameters should be retrieved.
+Note that a parameter that is unknown in the underlying context is
+simply ignored.
+
+EVP_RAND_get_ctx_params() retrieves chosen parameters, given the
+context I<ctx> and its underlying context.
+The set of parameters given with I<params> determine exactly what
+parameters should be retrieved.
+Note that a parameter that is unknown in the underlying context is
+simply ignored.
+
+EVP_RAND_set_ctx_params() passes chosen parameters to the underlying
+context, given a context I<ctx>.
+The set of parameters given with I<params> determine exactly what
+parameters are passed down.
+Note that a parameter that is unknown in the underlying context is
+simply ignored.
+Also, what happens when a needed parameter isn't passed down is
+defined by the implementation.
+
+EVP_RAND_gettable_params(), EVP_RAND_gettable_ctx_params() and
+EVP_RAND_settable_ctx_params() get a constant B<OSSL_PARAM> array that
+describes the retrievable and settable parameters, i.e. parameters that
+can be used with EVP_RAND_get_params(), EVP_RAND_get_ctx_params()
+and EVP_RAND_set_ctx_params(), respectively.
+See L<OSSL_PARAM(3)> for the use of B<OSSL_PARAM> as parameter descriptor.
+
+=head2 Information functions
+
+EVP_RAND_strength() returns the security strength of the RAND I<ctx>.
+
+EVP_RAND_state() returns the current state of the RAND I<ctx>.
+States defined by the OpenSSL DRBGs are:
+
+=over 4
+
+=item *
+
+EVP_RAND_STATE_UNINITIALISED: this DRBG is currently uninitalised.
+The instantiate call will change this to the ready state.
+
+=item *
+
+EVP_RAND_STATE_READY: this DRBG is currently ready to generate output.
+
+=item *
+
+EVP_RAND_STATE_ERROR: this DRBG is in an error state.
+
+=back
+
+EVP_RAND_is_a() returns 1 if I<rand> is an implementation of an
+algorithm that's identifiable with I<name>, otherwise 0.
+
+EVP_RAND_provider() returns the provider that holds the implementation
+of the given I<rand>.
+
+EVP_RAND_do_all_provided() traverses all RAND implemented by all activated
+providers in the given library context I<libctx>, and for each of the
+implementations, calls the given function I<fn> with the implementation method
+and the given I<arg> as argument.
+
+EVP_RAND_number() returns the internal dynamic number assigned to
+I<rand>.
+
+EVP_RAND_name() returns the canonical name of I<rand>.
+
+EVP_RAND_names_do_all() traverses all names for I<rand>, and calls
+I<fn> with each name and I<data>.
+
+EVP_RAND_verify_zeroization() confirms if the internal DRBG state is
+currently zeroed. This is used by the FIPS provider to support the mandatory
+self tests.
+
+=head1 PARAMETERS
+
+The standard parameter names are:
+
+=over 4
+
+=item "state" (B<OSSL_RAND_PARAM_STATE>) <integer>
+
+Returns the state of the random number generator.
+
+=item "strength" (B<OSSL_RAND_PARAM_STRENGTH>) <unsigned integer>
+
+Returns the bit strength of the random number generator.
+
+=back
+
+For rands that are also deterministic random bit generators (DRBGs), these
+additional parameters are recognised. Not all
+parameters are relevant to, or are understood by all DRBG rands:
+
+=over 4
+
+=item "reseed_requests" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+Reads or set the number of generate requests before reseeding the
+associated RAND ctx.
+
+=item "reseed_time_interval" (B<OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL>) <integer>
+
+Reads or set the number of elapsed seconds before reseeding the
+associated RAND ctx.
+
+=item "max_request" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+Specifies the maximum number of bytes that can be generated in a single
+call to OP_rand_generate.
+
+=item "min_entropylen" (B<OSSL_DRBG_PARAM_MIN_ENTROPYLEN>) <unsigned integer>
+
+=item "max_entropylen" (B<OSSL_DRBG_PARAM_MAX_ENTROPYLEN>) <unsigned integer>
+
+Specify the minimum and maximum number of bytes of random material that
+can be used to seed the DRBG.
+
+=item "min_noncelen" (B<OSSL_DRBG_PARAM_MIN_NONCELEN>) <unsigned integer>
+
+=item "max_noncelen" (B<OSSL_DRBG_PARAM_MAX_NONCELEN>) <unsigned integer>
+
+Specify the minimum and maximum number of bytes of nonce that can be used to
+seed the DRBG.
+
+=item "max_perslen" (B<OSSL_DRBG_PARAM_MAX_PERSLEN>) <unsigned integer>
+
+=item "max_adinlen" (B<OSSL_DRBG_PARAM_MAX_ADINLEN>) <unsigned integer>
+
+Specify the minimum and maximum number of bytes of personalisation string
+that can be used with the DRBG.
+
+=item "reseed_counter" (B<OSSL_DRBG_PARAM_RESEED_CTR>) <unsigned integer>
+
+Specifies the number of times the DRBG has been seeded or reseeded.
+
+=item "properties" (B<OSSL_RAND_PARAM_PROPERTIES>) <UTF8 string>
+
+=item "mac" (B<OSSL_RAND_PARAM_MAC>) <UTF8 string>
+
+=item "digest" (B<OSSL_RAND_PARAM_DIGEST>) <UTF8 string>
+
+=item "cipher" (B<OSSL_RAND_PARAM_CIPHER>) <UTF8 string>
+
+For RAND implementations that use an underlying computation MAC, digest or
+cipher, these parameters set what the algorithm should be.
+
+The value is always the name of the intended algorithm,
+or the properties in the case of B<OSSL_RAND_PARAM_PROPERTIES>.
+
+=back
+
+=head1 RETURN VALUES
+
+EVP_RAND_fetch() returns a pointer to a newly fetched B<EVP_RAND>, or
+NULL if allocation failed.
+
+EVP_RAND_provider() returns a pointer to the provider for the RAND, or
+NULL on error.
+
+EVP_RAND_CTX_rand() returns a pointer to the B<EVP_RAND> associated with the
+context.
+
+EVP_RAND_name() returns the name of the random number generation algorithm.
+
+EVP_RAND_number() returns the provider specific identification number
+for the specified algorithm.
+
+EVP_RAND_up_ref() returns 1 on success, 0 on error.
+
+EVP_RAND_CTX_new() returns either the newly allocated
+B<EVP_RAND_CTX> structure or NULL if an error occurred.
+
+EVP_RAND_CTX_free() does not return a value.
+
+EVP_RAND_nonce() returns the length of the nonce.
+
+EVP_RAND_strength() returns the strenght of the random number generator in bits.
+
+EVP_RAND_gettable_params(), EVP_RAND_gettable_ctx_params() and
+EVP_RAND_settable_ctx_params() return an array of OSSL_PARAMs.
+
+EVP_RAND_verify_zeroization() returns 1 if the internal DRBG state is
+currently zeroed, and 0 if not.
+
+The remaining functions return 1 for success and 0 or a negative value for
+failure.
+
+=head1 SEE ALSO
+
+L<RAND_bytes(3)>,
+L<EVP_RAND-CTR-DRBG(7)>,
+L<EVP_RAND-HASH-DRBG(7)>,
+L<EVP_RAND-HMAC-DRBG(7)>,
+L<EVP_RAND-TEST-RAND(7)>,
+L<provider-rand(7)>
+
+=head1 HISTORY
+
+This functionality was added to OpenSSL 3.0.
+
+=head1 COPYRIGHT
+
+Copyright 2020 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
diff --git a/doc/man3/OSSL_PARAM_BLD.pod b/doc/man3/OSSL_PARAM_BLD.pod
index ed82e32073..844b715820 100644
--- a/doc/man3/OSSL_PARAM_BLD.pod
+++ b/doc/man3/OSSL_PARAM_BLD.pod
@@ -8,10 +8,10 @@ OSSL_PARAM_BLD_push_uint, OSSL_PARAM_BLD_push_long,
OSSL_PARAM_BLD_push_ulong, OSSL_PARAM_BLD_push_int32,
OSSL_PARAM_BLD_push_uint32, OSSL_PARAM_BLD_push_int64,
OSSL_PARAM_BLD_push_uint64, OSSL_PARAM_BLD_push_size_t,
-OSSL_PARAM_BLD_push_double, OSSL_PARAM_BLD_push_BN,
-OSSL_PARAM_BLD_push_BN_pad, OSSL_PARAM_BLD_push_utf8_string,
-OSSL_PARAM_BLD_push_utf8_ptr, OSSL_PARAM_BLD_push_octet_string,
-OSSL_PARAM_BLD_push_octet_ptr
+OSSL_PARAM_BLD_push_time_t, OSSL_PARAM_BLD_push_double,
+OSSL_PARAM_BLD_push_BN, OSSL_PARAM_BLD_push_BN_pad,
+OSSL_PARAM_BLD_push_utf8_string, OSSL_PARAM_BLD_push_utf8_ptr,
+OSSL_PARAM_BLD_push_octet_string, OSSL_PARAM_BLD_push_octet_ptr
- functions to assist in the creation of OSSL_PARAM arrays
=head1 SYNOPSIS
diff --git a/doc/man3/OSSL_PARAM_int.pod b/doc/man3/OSSL_PARAM_int.pod
index 739c2a8c2d..7aa6b9377f 100644
--- a/doc/man3/OSSL_PARAM_int.pod
+++ b/doc/man3/OSSL_PARAM_int.pod
@@ -3,31 +3,33 @@
=head1 NAME
OSSL_PARAM_double, OSSL_PARAM_int, OSSL_PARAM_int32, OSSL_PARAM_int64,
-OSSL_PARAM_long, OSSL_PARAM_size_t, OSSL_PARAM_uint, OSSL_PARAM_uint32,
-OSSL_PARAM_uint64, OSSL_PARAM_ulong, OSSL_PARAM_BN, OSSL_PARAM_utf8_string,
-OSSL_PARAM_octet_string, OSSL_PARAM_utf8_ptr, OSSL_PARAM_octet_ptr,
+OSSL_PARAM_long, OSSL_PARAM_size_t, OSSL_PARAM_time_t, OSSL_PARAM_uint,
+OSSL_PARAM_uint32, OSSL_PARAM_uint64, OSSL_PARAM_ulong, OSSL_PARAM_BN,
+OSSL_PARAM_utf8_string, OSSL_PARAM_octet_string, OSSL_PARAM_utf8_ptr,
+OSSL_PARAM_octet_ptr,
OSSL_PARAM_END,
OSSL_PARAM_construct_double, OSSL_PARAM_construct_int,
OSSL_PARAM_construct_int32, OSSL_PARAM_construct_int64,
OSSL_PARAM_construct_long, OSSL_PARAM_construct_size_t,
-OSSL_PARAM_construct_uint, OSSL_PARAM_construct_uint32,
-OSSL_PARAM_construct_uint64, OSSL_PARAM_construct_ulong,
-OSSL_PARAM_construct_BN, OSSL_PARAM_construct_utf8_string,
-OSSL_PARAM_construct_utf8_ptr, OSSL_PARAM_construct_octet_string,
-OSSL_PARAM_construct_octet_ptr, OSSL_PARAM_construct_end,
+OSSL_PARAM_construct_time_t, OSSL_PARAM_construct_uint,
+OSSL_PARAM_construct_uint32, OSSL_PARAM_construct_uint64,
+OSSL_PARAM_construct_ulong, OSSL_PARAM_construct_BN,
+OSSL_PARAM_construct_utf8_string, OSSL_PARAM_construct_utf8_ptr,
+OSSL_PARAM_construct_octet_string, OSSL_PARAM_construct_octet_ptr,
+OSSL_PARAM_construct_end,
OSSL_PARAM_locate, OSSL_PARAM_locate_const,
OSSL_PARAM_get_double, OSSL_PARAM_get_int, OSSL_PARAM_get_int32,
OSSL_PARAM_get_int64, OSSL_PARAM_get_long, OSSL_PARAM_get_size_t,
-OSSL_PARAM_get_uint, OSSL_PARAM_get_uint32, OSSL_PARAM_get_uint64,
-OSSL_PARAM_get_ulong, OSSL_PARAM_get_BN, OSSL_PARAM_get_utf8_string,
-OSSL_PARAM_get_octet_string, OSSL_PARAM_get_utf8_ptr,
-OSSL_PARAM_get_octet_ptr,
+OSSL_PARAM_get_time_t, OSSL_PARAM_get_uint, OSSL_PARAM_get_uint32,
+OSSL_PARAM_get_uint64, OSSL_PARAM_get_ulong, OSSL_PARAM_get_BN,
+OSSL_PARAM_get_utf8_string, OSSL_PARAM_get_octet_string,
+OSSL_PARAM_get_utf8_ptr, OSSL_PARAM_get_octet_ptr,
OSSL_PARAM_set_double, OSSL_PARAM_set_int, OSSL_PARAM_set_int32,
OSSL_PARAM_set_int64, OSSL_PARAM_set_long, OSSL_PARAM_set_size_t,
-OSSL_PARAM_set_uint, OSSL_PARAM_set_uint32, OSSL_PARAM_set_uint64,
-OSSL_PARAM_set_ulong, OSSL_PARAM_set_BN, OSSL_PARAM_set_utf8_string,
-OSSL_PARAM_set_octet_string, OSSL_PARAM_set_utf8_ptr,
-OSSL_PARAM_set_octet_ptr,
+OSSL_PARAM_set_time_t, OSSL_PARAM_set_uint, OSSL_PARAM_set_uint32,
+OSSL_PARAM_set_uint64, OSSL_PARAM_set_ulong, OSSL_PARAM_set_BN,
+OSSL_PARAM_set_utf8_string, OSSL_PARAM_set_octet_string,
+OSSL_PARAM_set_utf8_ptr, OSSL_PARAM_set_octet_ptr,
OSSL_PARAM_UNMODIFIED, OSSL_PARAM_modified, OSSL_PARAM_set_all_unmodified
- OSSL_PARAM helpers
@@ -39,9 +41,9 @@ OSSL_PARAM_UNMODIFIED, OSSL_PARAM_modified, OSSL_PARAM_set_all_unmodified
/*
* TYPE in function names is one of:
- * double, int, int32, int64, long, size_t, uint, uint32, uint64, ulong
+ * double, int, int32, int64, long, size_t, time_t, uint, uint32, uint64, ulong
* Corresponding TYPE in function arguments is one of:
- * double, int, int32_t, int64_t, long, size_t, unsigned int, uint32_t,
+ * double, int, int32_t, int64_t, long, size_t, time_t, unsigned int, uint32_t,
* uint64_t, unsigned long
*/
@@ -126,6 +128,10 @@ long int (long)
=item *
+time_t
+
+=item *
+
size_t
=item *
diff --git a/doc/man3/RAND_DRBG_new.pod b/doc/man3/RAND_DRBG_new.pod
index 3ff98ae052..7d7cdbad44 100644
--- a/doc/man3/RAND_DRBG_new.pod
+++ b/doc/man3/RAND_DRBG_new.pod
@@ -4,13 +4,12 @@
RAND_DRBG_new_ex,
RAND_DRBG_new,
-RAND_DRBG_secure_new_ex,
-RAND_DRBG_secure_new,
RAND_DRBG_set,
RAND_DRBG_set_defaults,
RAND_DRBG_instantiate,
RAND_DRBG_uninstantiate,
-RAND_DRBG_free
+RAND_DRBG_free,
+RAND_DRBG_verify_zeroization
- initialize and cleanup a RAND_DRBG instance
=head1 SYNOPSIS
@@ -26,18 +25,6 @@ RAND_DRBG_free
unsigned int flags,
RAND_DRBG *parent);
- RAND_DRBG *RAND_DRBG_secure_new_ex(OPENSSL_CTX *ctx,
- int type,
- unsigned int flags,
- RAND_DRBG *parent);
-
- RAND_DRBG *RAND_DRBG_secure_new(int type,
- unsigned int flags,
- RAND_DRBG *parent);
-
- int RAND_DRBG_set(RAND_DRBG *drbg,
- int type, unsigned int flags);
-
int RAND_DRBG_set_defaults(int type, unsigned int flags);
int RAND_DRBG_instantiate(RAND_DRBG *drbg,
@@ -46,19 +33,26 @@ RAND_DRBG_free
int RAND_DRBG_uninstantiate(RAND_DRBG *drbg);
void RAND_DRBG_free(RAND_DRBG *drbg);
+ int RAND_DRBG_verify_zeroization(RAND_DRBG *drbg);
+
+Deprecated since OpenSSL 3.0, can be hidden entirely by defining
+B<OPENSSL_API_COMPAT> with a suitable version value, see
+L<openssl_user_macros(7)>:
+ int RAND_DRBG_set(RAND_DRBG *drbg,
+ int type, unsigned int flags);
=head1 DESCRIPTION
-RAND_DRBG_new_ex() and RAND_DRBG_secure_new_ex()
-create a new DRBG instance of the given B<type>, allocated from the heap resp.
-the secure heap, for the given OPENSSL_CTX <ctx>
-(using OPENSSL_zalloc() resp. OPENSSL_secure_zalloc()). The <ctx> parameter can
-be NULL in which case the default OPENSSL_CTX is used. RAND_DRBG_new() and
-RAND_DRBG_secure_new() are the same as RAND_DRBG_new_ex() and
-RAND_DRBG_secure_new_ex() except that the default OPENSSL_CTX is always used.
+RAND_DRBG_new_ex() creates a new DRBG instance of the given B<type> for the
+given OPENSSL_CTX <ctx>.
+The <ctx> parameter can be NULL in which case the default OPENSSL_CTX is used.
+RAND_DRBG_new() is the same as RAND_DRBG_new_ex() except that the default
+OPENSSL_CTX is always used.
RAND_DRBG_set() initializes the B<drbg> with the given B<type> and B<flags>.
+This function is deprecated. Applications should instead use
+RAND_DRBG_new_ex() to create a new DRBG.
RAND_DRBG_set_defaults() sets the default B<type> and B<flags> for new DRBG
instances.
@@ -108,7 +102,6 @@ the default entropy source for reseeding the B<drbg>. It is said that the
B<drbg> is I<chained> to its B<parent>.
For more information, see the NOTES section.
-
RAND_DRBG_instantiate()
seeds the B<drbg> instance using random input from trusted entropy sources.
Optionally, a personalization string B<pers> of length B<perslen> can be
@@ -119,18 +112,23 @@ RAND_DRBG_uninstantiate()
clears the internal state of the B<drbg> and puts it back in the
uninstantiated state.
+RAND_DRBG_verify_zeroization() confirms if the internal DRBG state is
+currently zeroed.
+
=head1 RETURN VALUES
-RAND_DRBG_new_ex(), RAND_DRBG_new(), RAND_DRBG_secure_new_ex() and
-RAND_DRBG_secure_new() return a pointer to a DRBG instance allocated on the
-heap, resp. secure heap.
+RAND_DRBG_new_ex() and RAND_DRBG_new() return a pointer to a DRBG instance
+allocated on the heap.
RAND_DRBG_set(),
RAND_DRBG_instantiate(), and
RAND_DRBG_uninstantiate()
return 1 on success, and 0 on failure.
+RAND_DRBG_verify_zeroization() returns 1 if the DRBG state is current zeroed,
+and 0 if not.
+
RAND_DRBG_free() does not return a value.
=head1 NOTES
@@ -151,13 +149,13 @@ cryptographic routines that obtain random data directly or indirectly.
=head1 SEE ALSO
-L<OPENSSL_zalloc(3)>,
-L<OPENSSL_secure_zalloc(3)>,
L<RAND_DRBG_generate(3)>,
L<RAND_DRBG(7)>
=head1 HISTORY
+The RAND_DRBG_set() function was deprecated in OpenSSL 3.0.
+
The RAND_DRBG functions were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
diff --git a/doc/man3/RAND_DRBG_set_callbacks.pod b/doc/man3/RAND_DRBG_set_callbacks.pod
index d00397da62..543b3cc911 100644
--- a/doc/man3/RAND_DRBG_set_callbacks.pod
+++ b/doc/man3/RAND_DRBG_set_callbacks.pod
@@ -127,11 +127,12 @@ entropy from a live entropy source (section 5.5.2 of [NIST SP 800-90C]).
It is up to the user to ensure that a live entropy source is configured
and is being used.
-The derivation function is disabled during initialization by calling the
-RAND_DRBG_set() function with the RAND_DRBG_FLAG_CTR_NO_DF flag.
-For more information on the derivation function and when it can be omitted,
-see [NIST SP 800-90A Rev. 1]. Roughly speaking it can be omitted if the random
-source has "full entropy", i.e., contains 8 bits of entropy per byte.
+The derivation function is disabled by calling the RAND_DRBG_new_ex()
+function with the RAND_DRBG_FLAG_CTR_NO_DF flag. For more information on
+the derivation function and when it can be omitted, see [NIST SP 800-90A
+Rev. 1]. Roughly speaking it can be omitted if the random source has "full
+entropy", that is, it contains 8 bits of entropy per byte. In a FIPS context,
+the derivation function can never be omitted.
Even if a nonce is required, the B<get_nonce>() and B<cleanup_nonce>()
callbacks can be omitted by setting them to NULL.
diff --git a/doc/man3/RAND_add.pod b/doc/man3/RAND_add.pod
index b4151164c2..7eafe7bb53 100644
--- a/doc/man3/RAND_add.pod
+++ b/doc/man3/RAND_add.pod
@@ -69,7 +69,8 @@ chroot(2) jail without the associated device nodes being available. When
the B<keep> argument is zero, this call disables the retention of file
descriptors. Conversely, a nonzero argument enables the retention of
file descriptors. This function is usually called during initialization
-and it takes effect immediately.
+and it takes effect immediately. This capability only applies to the default
+provider.
RAND_event() and RAND_screen() are equivalent to RAND_poll() and exist
for compatibility reasons only. See HISTORY section below.
diff --git a/doc/man7/EVP_RAND-CTR-DRBG.pod b/doc/man7/EVP_RAND-CTR-DRBG.pod
new file mode 100644
index 0000000000..e35703670f
--- /dev/null
+++ b/doc/man7/EVP_RAND-CTR-DRBG.pod
@@ -0,0 +1,108 @@
+=pod
+
+=head1 NAME
+
+EVP_RAND-CTR-DRBG - The CTR DRBG EVP_RAND implementation
+
+=head1 DESCRIPTION
+
+Support for the counter deterministic random bit generator through the
+B<EVP_RAND> API.
+
+=head2 Identity
+
+"CTR-DRBG" is the name for this implementation; it can be used with the
+EVP_RAND_fetch() function.
+
+=head2 Supported parameters
+
+The supported parameters are:
+
+=over 4
+
+=item "state" (B<OSSL_RAND_PARAM_STATE>) <integer>
+
+=item "strength" (B<OSSL_RAND_PARAM_STRENGTH>) <unsigned integer>
+
+=item "reseed_requests" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+=item "reseed_time_interval" (B<OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL>) <integer>
+
+=item "max_request" (B<OSSL_DRBG_PARAM_MAX_REQUEST>) <unsigned integer>
+
+=item "min_entropylen" (B<OSSL_DRBG_PARAM_MIN_ENTROPYLEN>) <unsigned integer>
+
+=item "max_entropylen" (B<OSSL_DRBG_PARAM_MAX_ENTROPYLEN>) <unsigned integer>
+
+=item "min_noncelen" (B<OSSL_DRBG_PARAM_MIN_NONCELEN>) <unsigned integer>
+
+=item "max_noncelen" (B<OSSL_DRBG_PARAM_MAX_NONCELEN>) <unsigned integer>
+
+=item "max_perslen" (B<OSSL_DRBG_PARAM_MAX_PERSLEN>) <unsigned integer>
+
+=item "max_adinlen" (B<OSSL_DRBG_PARAM_MAX_ADINLEN>) <unsigned integer>
+
+=item "reseed_counter" (B<OSSL_DRBG_PARAM_RESEED_CTR>) <unsigned integer>
+
+=item "properties" (B<OSSL_DRBG_PARAM_PROPERTIES>) <UTF8 string>
+
+=item "cipher" (B<OSSL_DRBG_PARAM_CIPHER>) <UTF8 string>
+
+These parameters work as described in L<EVP_RAND(3)/PARAMETERS>.
+
+=item "use_derivation_function" (B<OSSL_DRBG_PARAM_USE_DF>) <int>
+
+This Boolean indicates if a derivation function should be used or not.
+A nonzero value (the default) uses the derivation function. A zero value
+does not. The FIPS provider always uses the derivation function and attempts
+to set this value result in an error.
+
+=back
+
+=head1 NOTES
+
+A context for CTR DRBG can be obtained by calling:
+
+ EVP_RAND *rand = EVP_RAND_fetch(NULL, "CTR-DRBG", NULL);
+ EVP_RAND_CTX *rctx = EVP_RAND_CTX_new(rand);
+
+=head1 EXAMPLES
+
+ EVP_RAND *rand;
+ EVP_RAND_CTX *rctx;
+ unsigned char bytes[100];
+ OSSL_PARAM params[2], *p = params;
+ unsigned int strength = 128;
+
+ rand = EVP_RAND_fetch(NULL, "CTR-DRBG", NULL);
+ rctx = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_free(rand);
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER,
+ SN_aes_256_ctr, 0);
+ *p = OSSL_PARAM_construct_end();
+ EVP_RAND_set_ctx_params(rctx, params);
+
+ EVP_RAND_generate(rctx, bytes, sizeof(bytes), strength, 0, NULL, 0);
+
+ EVP_RAND_CTX_free(rctx);
+
+=head1 CONFORMING TO
+
+NIST SP 800-90A and SP 800-90B
+
+=head1 SEE ALSO
+
+L<EVP_RAND(3)>,
+L<EVP_RAND(3)/PARAMETERS>
+
+=head1 COPYRIGHT
+
+Copyright 2020 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
diff --git a/doc/man7/EVP_RAND-HASH-DRBG.pod b/doc/man7/EVP_RAND-HASH-DRBG.pod
new file mode 100644
index 0000000000..879384993e
--- /dev/null
+++ b/doc/man7/EVP_RAND-HASH-DRBG.pod
@@ -0,0 +1,100 @@
+=pod
+
+=head1 NAME
+
+EVP_RAND-HASH-DRBG - The HASH DRBG EVP_RAND implementation
+
+=head1 DESCRIPTION
+
+Support for the hash deterministic random bit generator through the
+B<EVP_RAND> API.
+
+=head2 Identity
+
+"HASH-DRBG" is the name for this implementation; it can be used with the
+EVP_RAND_fetch() function.
+
+=head2 Supported parameters
+
+The supported parameters are:
+
+=over 4
+
+=item "state" (B<OSSL_RAND_PARAM_STATE>) <integer>
+
+=item "strength" (B<OSSL_RAND_PARAM_STRENGTH>) <unsigned integer>
+
+=item "reseed_requests" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+=item "reseed_time_interval" (B<OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL>) <integer>
+
+=item "max_request" (B<OSSL_DRBG_PARAM_MAX_REQUEST>) <unsigned integer>
+
+=item "min_entropylen" (B<OSSL_DRBG_PARAM_MIN_ENTROPYLEN>) <unsigned integer>
+
+=item "max_entropylen" (B<OSSL_DRBG_PARAM_MAX_ENTROPYLEN>) <unsigned integer>
+
+=item "min_noncelen" (B<OSSL_DRBG_PARAM_MIN_NONCELEN>) <unsigned integer>
+
+=item "max_noncelen" (B<OSSL_DRBG_PARAM_MAX_NONCELEN>) <unsigned integer>
+
+=item "max_perslen" (B<OSSL_DRBG_PARAM_MAX_PERSLEN>) <unsigned integer>
+
+=item "max_adinlen" (B<OSSL_DRBG_PARAM_MAX_ADINLEN>) <unsigned integer>
+
+=item "reseed_counter" (B<OSSL_DRBG_PARAM_RESEED_CTR>) <unsigned integer>
+
+=item "properties" (B<OSSL_DRBG_PARAM_PROPERTIES>) <UTF8 string>
+
+=item "digest" (B<OSSL_DRBG_PARAM_DIGEST>) <UTF8 string>
+
+These parameters work as described in L<EVP_RAND(3)/PARAMETERS>.
+
+=back
+
+=head1 NOTES
+
+A context for HASH DRBG can be obtained by calling:
+
+ EVP_RAND *rand = EVP_RAND_fetch(NULL, "HASH-DRBG", NULL);
+ EVP_RAND_CTX *rctx = EVP_RAND_CTX_new(rand);
+
+=head1 EXAMPLES
+
+ EVP_RAND *rand;
+ EVP_RAND_CTX *rctx;
+ unsigned char bytes[100];
+ OSSL_PARAM params[2], *p = params;
+ unsigned int strength = 128;
+
+ rand = EVP_RAND_fetch(NULL, "HASH-DRBG", NULL);
+ rctx = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_free(rand);
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_DIGEST, SN_sha512, 0);
+ *p = OSSL_PARAM_construct_end();
+ EVP_RAND_set_ctx_params(rctx, params);
+
+ EVP_RAND_generate(rctx, bytes, sizeof(bytes), strength, 0, NULL, 0);
+
+ EVP_RAND_CTX_free(rctx);
+
+=head1 CONFORMING TO
+
+NIST SP 800-90A and SP 800-90B
+
+=head1 SEE ALSO
+
+L<EVP_RAND(3)>,
+L<EVP_RAND(3)/PARAMETERS>
+
+=head1 COPYRIGHT
+
+Copyright 2020 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
diff --git a/doc/man7/EVP_RAND-HMAC-DRBG.pod b/doc/man7/EVP_RAND-HMAC-DRBG.pod
new file mode 100644
index 0000000000..31b17a97ba
--- /dev/null
+++ b/doc/man7/EVP_RAND-HMAC-DRBG.pod
@@ -0,0 +1,103 @@
+=pod
+
+=head1 NAME
+
+EVP_RAND-HMAC-DRBG - The HMAC DRBG EVP_RAND implementation
+
+=head1 DESCRIPTION
+
+Support for the HMAC deterministic random bit generator through the
+B<EVP_RAND> API.
+
+=head2 Identity
+
+"HMAC-DRBG" is the name for this implementation; it can be used with the
+EVP_RAND_fetch() function.
+
+=head2 Supported parameters
+
+The supported parameters are:
+
+=over 4
+
+=item "state" (B<OSSL_RAND_PARAM_STATE>) <integer>
+
+=item "strength" (B<OSSL_RAND_PARAM_STRENGTH>) <unsigned integer>
+
+=item "reseed_requests" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+=item "reseed_time_interval" (B<OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL>) <integer>
+
+=item "max_request" (B<OSSL_DRBG_PARAM_MAX_REQUEST>) <unsigned integer>
+
+=item "min_entropylen" (B<OSSL_DRBG_PARAM_MIN_ENTROPYLEN>) <unsigned integer>
+
+=item "max_entropylen" (B<OSSL_DRBG_PARAM_MAX_ENTROPYLEN>) <unsigned integer>
+
+=item "min_noncelen" (B<OSSL_DRBG_PARAM_MIN_NONCELEN>) <unsigned integer>
+
+=item "max_noncelen" (B<OSSL_DRBG_PARAM_MAX_NONCELEN>) <unsigned integer>
+
+=item "max_perslen" (B<OSSL_DRBG_PARAM_MAX_PERSLEN>) <unsigned integer>
+
+=item "max_adinlen" (B<OSSL_DRBG_PARAM_MAX_ADINLEN>) <unsigned integer>
+
+=item "reseed_counter" (B<OSSL_DRBG_PARAM_RESEED_CTR>) <unsigned integer>
+
+=item "properties" (B<OSSL_DRBG_PARAM_PROPERTIES>) <UTF8 string>
+
+=item "mac" (B<OSSL_DRBG_PARAM_MAC>) <UTF8 string>
+
+=item "digest" (B<OSSL_DRBG_PARAM_DIGEST>) <UTF8 string>
+
+These parameters work as described in L<EVP_RAND(3)/PARAMETERS>.
+
+=back
+
+=head1 NOTES
+
+A context for HMAC DRBG can be obtained by calling:
+
+ EVP_RAND *rand = EVP_RAND_fetch(NULL, "HMAC-DRBG", NULL);
+ EVP_RAND_CTX *rctx = EVP_RAND_CTX_new(rand);
+
+=head1 EXAMPLES
+
+ EVP_RAND *rand;
+ EVP_RAND_CTX *rctx;
+ unsigned char bytes[100];
+ OSSL_PARAM params[3], *p = params;
+ unsigned int strength = 128;
+
+ rand = EVP_RAND_fetch(NULL, "HMAC-DRBG", NULL);
+ rctx = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_free(rand);
+
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_MAC, SN_hmac, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_DIGEST, SN_sha256, 0);
+ *p = OSSL_PARAM_construct_end();
+ EVP_RAND_set_ctx_params(rctx, params);
+
+ EVP_RAND_generate(rctx, bytes, sizeof(bytes), strength, 0, NULL, 0);
+
+ EVP_RAND_CTX_free(rctx);
+
+=head1 CONFORMING TO
+
+NIST SP 800-90A and SP 800-90B
+
+=head1 SEE ALSO
+
+L<EVP_RAND(3)>,
+L<EVP_RAND(3)/PARAMETERS>
+
+=head1 COPYRIGHT
+
+Copyright 2020 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
diff --git a/doc/man7/EVP_RAND-TEST-RAND.pod b/doc/man7/EVP_RAND-TEST-RAND.pod
new file mode 100644
index 0000000000..4736b5a976
--- /dev/null
+++ b/doc/man7/EVP_RAND-TEST-RAND.pod
@@ -0,0 +1,113 @@
+=pod
+
+=head1 NAME
+
+EVP_RAND-TEST-RAND - The test EVP_RAND implementation
+
+=head1 DESCRIPTION
+
+Support for a test generator through the B<EVP_RAND> API. This generator is
+for test purposes only, it does not generate random numbers.
+
+=head2 Identity
+
+"TEST-RAND" is the name for this implementation; it can be used with the
+EVP_RAND_fetch() function.
+
+=head2 Supported parameters
+
+The supported parameters are:
+
+=over 4
+
+=item "state" (B<OSSL_RAND_PARAM_STATE>) <integer>
+
+These parameter works as described in L<EVP_RAND(3)/PARAMETERS>.
+
+=item "strength" (B<OSSL_RAND_PARAM_STRENGTH>) <unsigned integer>
+
+=item "reseed_requests" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+=item "reseed_time_interval" (B<OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL>) <integer>
+
+=item "max_request" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+=item "min_entropylen" (B<OSSL_DRBG_PARAM_MIN_ENTROPYLEN>) <unsigned integer>
+
+=item "max_entropylen" (B<OSSL_DRBG_PARAM_MAX_ENTROPYLEN>) <unsigned integer>
+
+=item "min_noncelen" (B<OSSL_DRBG_PARAM_MIN_NONCELEN>) <unsigned integer>
+
+=item "max_noncelen" (B<OSSL_DRBG_PARAM_MAX_NONCELEN>) <unsigned integer>
+
+=item "max_perslen" (B<OSSL_DRBG_PARAM_MAX_PERSLEN>) <unsigned integer>
+
+=item "max_adinlen" (B<OSSL_DRBG_PARAM_MAX_ADINLEN>) <unsigned integer>
+
+=item "reseed_counter" (B<OSSL_DRBG_PARAM_RESEED_CTR>) <unsigned integer>
+
+These parameters work as described in L<EVP_RAND(3)/PARAMETERS>, except that
+they can all be set as well as read.
+
+=item "test_entropy" (B<OSSL_RAND_PARAM_TEST_ENTROPY>) <octet string>
+
+Sets the bytes returned when the test generator is sent an entropy request.
+When entropy is requested, these bytes are treated as a cyclic buffer and they
+are repeated as required. The current position is remembered across generate
+calls.
+
+=item "test_nonce" (B<OSSL_RAND_PARAM_TEST_NONCE>) <octet string>
+
+Sets the bytes returned when the test generator is sent a nonce request.
+Each nonce request will return all of the bytes.
+
+=back
+
+=head1 NOTES
+
+A context for a test generator can be obtained by calling:
+
+ EVP_RAND *rand = EVP_RAND_fetch(NULL, "TEST-RAND", NULL);
+ EVP_RAND_CTX *rctx = EVP_RAND_CTX_new(rand);
+
+=head1 EXAMPLES
+
+ EVP_RAND *rand;
+ EVP_RAND_CTX *rctx;
+ unsigned char bytes[100];
+ OSSL_PARAM params[4], *p = params;
+ unsigned char entropy[1000] = { ... };
+ unsigned char nonce[20] = { ... };
+ unsigned int strength = 48;
+
+ rand = EVP_RAND_fetch(NULL, "TEST-RAND", NULL);
+ rctx = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_free(rand);
+
+ *p++ = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH, &strength);
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
+ entropy, sizeof(entropy));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_NONCE,
+ nonce, sizeof(nonce));
+ *p = OSSL_PARAM_construct_end();
+ EVP_RAND_set_ctx_params(rctx, params);
+
+ EVP_RAND_generate(rctx, bytes, sizeof(bytes), strength, 0, NULL, 0);
+
+ EVP_RAND_CTX_free(rctx);
+
+=head1 SEE ALSO
+
+L<EVP_RAND(3)>,
+L<EVP_RAND(3)/PARAMETERS>
+
+=head1 COPYRIGHT
+
+Copyright 2020 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
diff --git a/doc/man7/provider-rand.pod b/doc/man7/provider-rand.pod
new file mode 100644
index 0000000000..891b824561
--- /dev/null
+++ b/doc/man7/provider-rand.pod
@@ -0,0 +1,276 @@
+=pod
+
+=head1 NAME
+
+provider-rand - The random number generation library E<lt>-E<gt> provider
+functions
+
+=head1 SYNOPSIS
+
+=for openssl multiple includes
+
+ #include <openssl/core_numbers.h>
+ #include <openssl/core_names.h>
+
+ /*
+ * None of these are actual functions, but are displayed like this for
+ * the function signatures for functions that are offered as function
+ * pointers in OSSL_DISPATCH arrays.
+ */
+
+ /* Context management */
+ void *OP_rand_newctx(void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_calls);
+ void OP_rand_freectx(void *ctx);
+
+ /* Random number generator functions: NIST */
+ int OP_rand_instantiate(void *ctx, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr, size_t pstr_len);
+ int OP_rand_uninstantiate(void *ctx);
+ int OP_rand_generate(void *ctx, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *addin, size_t addin_len);
+ int OP_rand_reseed(void *ctx, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *addin, size_t addin_len);
+
+ /* Random number generator functions: additional */
+ size_t OP_rand_nonce(void *ctx, unsigned char *out, size_t outlen,
+ int strength, size_t min_noncelen, size_t max_noncelen);
+ void OP_rand_set_callbacks(void *ctx, OSSL_CALLBACK *get_entropy,
+ OSSL_CALLBACK *cleanup_entropy,
+ OSSL_CALLBACK *get_nonce,
+ OSSL_CALLBACK *cleanup_nonce, void *arg);
+ int OP_rand_verify_zeroization(void *ctx);
+
+ /* Context Locking */
+ int OP_rand_enable_locking(void *ctx);
+ int OP_rand_lock(void *ctx);
+ void OP_rand_unlock(void *ctx);
+
+ /* RAND parameter descriptors */
+ const OSSL_PARAM *OP_rand_gettable_params(void);
+ const OSSL_PARAM *OP_rand_gettable_ctx_params(void);
+ const OSSL_PARAM *OP_rand_settable_ctx_params(void);
+
+ /* RAND parameters */
+ int OP_rand_get_params(OSSL_PARAM params[]);
+ int OP_rand_get_ctx_params(void *ctx, OSSL_PARAM params[]);
+ int OP_rand_set_ctx_params(void *ctx, const OSSL_PARAM params[]);
+
+=head1 DESCRIPTION
+
+This documentation is primarily aimed at provider authors. See L<provider(7)>
+for further information.
+
+The RAND operation enables providers to implement random number generation
+algorithms and random number sources and make
+them available to applications via the API function L<EVP_RAND(3)>.
+
+=head2 Context Management Functions
+
+OP_rand_newctx() should create and return a pointer to a provider side
+structure for holding context information during a rand operation.
+A pointer to this context will be passed back in a number of the other rand
+operation function calls.
+The parameter I<provctx> is the provider context generated during provider
+initialisation (see L<provider(7)>).
+The parameter I<parent> specifies another rand instance to be used for
+seeding purposes. If NULL and the specific instance supports it, the
+operating system will be used for seeding.
+The parameter I<parent_calls> points to the dispatch table for I<parent>.
+Thus, the parent need not be from the same provider as the new instance.
+
+OP_rand_freectx() is passed a pointer to the provider side rand context in
+the I<mctx> parameter.
+If it receives NULL as I<ctx> value, it should not do anything other than
+return.
+This function should free any resources associated with that context.
+
+=head2 Random Number Generator Functions: NIST
+
+These functions correspond to those defined in NIST SP 800-90A and SP 800-90C.
+
+OP_rand_instantiate() is used to instantiate the DRBG I<ctx> at a requested
+security I<strength>. In addition, I<prediction_resistance> can be requested.
+Additional input I<addin> of length I<addin_len> bytes can optionally
+be provided.
+
+OP_rand_uninstantiate() is used to uninstantiate the DRBG I<ctx>. After being
+uninstantiated, a DRBG is unable to produce output until it is instantiated
+anew.
+
+OP_rand_generate() is used to generate random bytes from the DRBG I<ctx>.
+It will generate I<outlen> bytes placing them into the buffer pointed to by
+I<out>. The generated bytes will meet the specified security I<strength> and,
+if I<prediction_resistance> is true, the bytes will be produced after reseeding
+from a live entropy source. Additional input I<addin> of length I<addin_len>
+bytes can optionally be provided.
+
+=head2 Random Number Generator Functions: Additional
+
+OP_rand_nonce() is used to generate a nonce of the given I<strength> with a
+length from I<min_noncelen> to I<max_noncelen>. If the output buffer I<out> is
+NULL, the length of the nonce should be returned.
+
+OP_rand_set_callbacks() is used to supply custom entropy and nonce callbacks.
+Instead of gathering seed material from its usual sources, the DRBG I<ctx>
+should call these functions.
+The I<get_entropy> and I<cleanup_entropy> callbacks obtain and release bytes
+of entropy.
+The I<get_nonce> and I<cleanup_nonce> functions obtain and release nonce bytes.
+In all cases, the additional argument I<arg> is passed to the callbacks.
+
+OP_rand_verify_zeroization() is used to determine if the internal state of the
+DRBG is zero. This capability is mandated by NIST as part of the self
+tests, it is unlikely to be useful in other circumstances.
+
+=head2 Context Locking
+
+When DRBGs are used by multiple threads, there must be locking employed to
+ensure their proper operation. Because locking introduces an overhead, it
+is disabled by default.
+
+OP_rand_enable_locking() allows locking to be turned on for a DRBG and all of
+its parent DRBGs. From this call onwards, the DRBG can be used in a thread
+safe manner.
+
+OP_rand_lock() is used to lock a DRBG. Once locked, exclusive access
+is guaranteed.
+
+OP_rand_unlock() is used to unlock a DRBG.
+
+=head2 Rand Parameters
+
+See L<OSSL_PARAM(3)> for further details on the parameters structure used by
+these functions.
+
+OP_rand_get_params() gets details of parameter values associated with the
+provider algorithm and stores them in I<params>.
+
+OP_rand_set_ctx_params() sets rand parameters associated with the given
+provider side rand context I<ctx> to I<params>.
+Any parameter settings are additional to any that were previously set.
+
+OP_rand_get_ctx_params() gets details of currently set parameter values
+associated with the given provider side rand context I<ctx> and stores them
+in I<params>.
+
+OP_rand_gettable_params(), OP_rand_gettable_ctx_params(), and
+OP_rand_settable_ctx_params() all return constant B<OSSL_PARAM> arrays
+as descriptors of the parameters that OP_rand_get_params(),
+OP_rand_get_ctx_params(), and OP_rand_set_ctx_params() can handle,
+respectively.
+
+Parameters currently recognised by built-in rands are as follows. Not all
+parameters are relevant to, or are understood by all rands:
+
+=over 4
+
+=item "state" (B<OSSL_RAND_PARAM_STATE>) <integer>
+
+Returns the state of the random number generator.
+
+=item "strength" (B<OSSL_RAND_PARAM_STRENGTH>) <unsigned integer>
+
+Returns the bit strength of the random number generator.
+
+=back
+
+For rands that are also deterministic random bit generators (DRBGs), these
+additional parameters are recognised. Not all
+parameters are relevant to, or are understood by all DRBG rands:
+
+=over 4
+
+=item "reseed_requests" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+Reads or set the number of generate requests before reseeding the
+associated RAND ctx.
+
+=item "reseed_time_interval" (B<OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL>) <integer>
+
+Reads or set the number of elapsed seconds before reseeding the
+associated RAND ctx.
+
+=item "max_request" (B<OSSL_DRBG_PARAM_RESEED_REQUESTS>) <unsigned integer>
+
+Specifies the maximum number of bytes that can be generated in a single
+call to OP_rand_generate.
+
+=item "min_entropylen" (B<OSSL_DRBG_PARAM_MIN_ENTROPYLEN>) <unsigned integer>
+
+=item "max_entropylen" (B<OSSL_DRBG_PARAM_MAX_ENTROPYLEN>) <unsigned integer>
+
+Specify the minimum and maximum number of bytes of random material that
+can be used to seed the DRBG.
+
+=item "min_noncelen" (B<OSSL_DRBG_PARAM_MIN_NONCELEN>) <unsigned integer>
+
+=item "max_noncelen" (B<OSSL_DRBG_PARAM_MAX_NONCELEN>) <unsigned integer>
+
+Specify the minimum and maximum number of bytes of nonce that can be used to
+instantiate the DRBG.
+
+=item "max_perslen" (B<OSSL_DRBG_PARAM_MAX_PERSLEN>) <unsigned integer>
+
+=item "max_adinlen" (B<OSSL_DRBG_PARAM_MAX_ADINLEN>) <unsigned integer>
+
+Specify the minimum and maximum number of bytes of personalisation string
+that can be used with the DRBG.
+
+=item "reseed_counter" (B<OSSL_DRBG_PARAM_RESEED_CTR>) <unsigned integer>
+
+Specifies the number of times the DRBG has been seeded or reseeded.
+
+=item "digest" (B<OSSL_DRBG_PARAM_DIGEST>) <UTF8 string>
+
+=item "cipher" (B<OSSL_DRBG_PARAM_CIPHER>) <UTF8 string>
+
+=item "mac" (B<OSSL_DRBG_PARAM_MAC>) <UTF8 string>
+
+Sets the name of the underlying cipher, digest or MAC to be used.
+It must name a suitable algorithm for the DRBG that's being used.
+
+=item "properties" (B<OSSL_DRBG_PARAM_PROPERTIES>) <UTF8 string>
+
+Sets the properties to be queried when trying to fetch an underlying algorithm.
+This must be given together with the algorithm naming parameter to be
+considered valid.
+
+=back
+
+=head1 RETURN VALUES
+
+OP_rand_newctx() should return the newly created
+provider side rand context, or NULL on failure.
+
+OP_rand_gettable_params(), OP_rand_gettable_ctx_params() and
+OP_rand_settable_ctx_params() should return a constant B<OSSL_PARAM>
+array, or NULL if none is offered.
+
+OP_rand_nonce() returns the size of the generated nonce, or 0 on error.
+
+All of the remaining functions should return 1 for success or 0 on error.
+
+=head1 SEE ALSO
+
+L<provider(7)>,
+L<RAND(7)>,
+L<RAND_DRBG(7)>
+
+=head1 HISTORY
+
+The provider RAND interface was introduced in OpenSSL 3.0.
+
+=head1 COPYRIGHT
+
+Copyright 2020 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
diff --git a/include/crypto/rand.h b/include/crypto/rand.h
index 1e559ad619..c5eef81462 100644
--- a/include/crypto/rand.h
+++ b/include/crypto/rand.h
@@ -20,9 +20,6 @@
# include <openssl/rand.h>
-/* forward declaration */
-typedef struct rand_pool_st RAND_POOL;
-
/*
* Defines related to seed sources
*/
@@ -74,101 +71,6 @@ typedef struct rand_pool_st RAND_POOL;
void rand_cleanup_int(void);
-/* Hardware-based seeding functions. */
-size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool);
-size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool);
-
-/* DRBG entropy callbacks. */
-size_t rand_drbg_get_entropy(RAND_DRBG *drbg,
- unsigned char **pout,
- int entropy, size_t min_len, size_t max_len,
- int prediction_resistance);
-void rand_drbg_cleanup_entropy(RAND_DRBG *drbg,
- unsigned char *out, size_t outlen);
-size_t rand_drbg_get_nonce(RAND_DRBG *drbg,
- unsigned char **pout,
- int entropy, size_t min_len, size_t max_len);
-void rand_drbg_cleanup_nonce(RAND_DRBG *drbg,
- unsigned char *out, size_t outlen);
-
-size_t rand_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout);
-
-void rand_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out);
-
-/* CRNG test entropy filter callbacks. */
-size_t rand_crngt_get_entropy(RAND_DRBG *drbg,
- unsigned char **pout,
- int entropy, size_t min_len, size_t max_len,
- int prediction_resistance);
-void rand_crngt_cleanup_entropy(RAND_DRBG *drbg,
- unsigned char *out, size_t outlen);
-
-/*
- * RAND_POOL functions
- */
-RAND_POOL *rand_pool_new(int entropy_requested, int secure,
- size_t min_len, size_t max_len);
-RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len,
- size_t entropy);
-void rand_pool_free(RAND_POOL *pool);
-
-const unsigned char *rand_pool_buffer(RAND_POOL *pool);
-unsigned char *rand_pool_detach(RAND_POOL *pool);
-void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer);
-
-size_t rand_pool_entropy(RAND_POOL *pool);
-size_t rand_pool_length(RAND_POOL *pool);
-
-size_t rand_pool_entropy_available(RAND_POOL *pool);
-size_t rand_pool_entropy_needed(RAND_POOL *pool);
-/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */
-size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor);
-size_t rand_pool_bytes_remaining(RAND_POOL *pool);
-
-int rand_pool_add(RAND_POOL *pool,
- const unsigned char *buffer, size_t len, size_t entropy);
-unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len);
-int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy);
-
-
-/*
- * Add random bytes to the pool to acquire requested amount of entropy
- *
- * This function is platform specific and tries to acquire the requested
- * amount of entropy by polling platform specific entropy sources.
- *
- * If the function succeeds in acquiring at least |entropy_requested| bits
- * of entropy, the total entropy count is returned. If it fails, it returns
- * an entropy count of 0.
- */
-size_t rand_pool_acquire_entropy(RAND_POOL *pool);
-
-/*
- * Add some application specific nonce data
- *
- * This function is platform specific and adds some application specific
- * data to the nonce used for instantiating the drbg.
- *
- * This data currently consists of the process and thread id, and a high
- * resolution timestamp. The data does not include an atomic counter,
- * because that is added by the calling function rand_drbg_get_nonce().
- *
- * Returns 1 on success and 0 on failure.
- */
-int rand_pool_add_nonce_data(RAND_POOL *pool);
-
-
-/*
- * Add some platform specific additional data
- *
- * This function is platform specific and adds some random noise to the
- * additional data used for generating random bytes and for reseeding
- * the drbg.
- *
- * Returns 1 on success and 0 on failure.
- */
-int rand_pool_add_additional_data(RAND_POOL *pool);
-
/*
* Initialise the random pool reseeding sources.
*
diff --git a/include/openssl/core.h b/include/openssl/core.h
index 5eb992a5c2..e77c2ba22f 100644
--- a/include/openssl/core.h
+++ b/include/openssl/core.h
@@ -212,7 +212,8 @@ extern OSSL_provider_init_fn OSSL_provider_init;
* application callback it knows about.
*/
typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg);
-
+typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[],
+ OSSL_PARAM out_params[], void *arg);
/*
* Passphrase callback function signature
*
diff --git a/include/openssl/core_names.h b/include/openssl/core_names.h
index 7da0186392..fe126ccd7a 100644
--- a/include/openssl/core_names.h
+++ b/include/openssl/core_names.h
@@ -180,6 +180,38 @@ extern "C" {
#define OSSL_KDF_NAME_KBKDF "KBKDF"
#define OSSL_KDF_NAME_KRB5KDF "KRB5KDF"
+/* Known RAND names */
+#define OSSL_RAND_PARAM_STATE "state"
+#define OSSL_RAND_PARAM_STRENGTH "strength"
+#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy"
+#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce"
+
+/* RAND/DRBG names */
+#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests"
+#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval"
+#define OSSL_DRBG_PARAM_MAX_REQUEST "max_request"
+#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen"
+#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen"
+#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen"
+#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen"
+#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen"
+#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen"
+#define OSSL_DRBG_PARAM_RESEED_CTR "reseed_counter"
+#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time"
+#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES
+#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST
+#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER
+#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC
+#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function"
+
+/* DRBG call back parameters */
+#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required"
+#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance"
+#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length"
+#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length"
+#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data"
+#define OSSL_DRBG_PARAM_SIZE "size"
+
/* PKEY parameters */
/* Common PKEY parameters */
#define OSSL_PKEY_PARAM_BITS "bits" /* integer */
diff --git a/include/openssl/core_numbers.h b/include/openssl/core_numbers.h
index 667bb21ffb..af2a35efc0 100644
--- a/include/openssl/core_numbers.h
+++ b/include/openssl/core_numbers.h
@@ -178,6 +178,7 @@ OSSL_CORE_MAKE_FUNC(int, provider_get_capabilities, (void *provctx,
# define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */
# define OSSL_OP_MAC 3
# define OSSL_OP_KDF 4
+# define OSSL_OP_RAND 5
# define OSSL_OP_KEYMGMT 10
# define OSSL_OP_KEYEXCH 11
# define OSSL_OP_SIGNATURE 12
@@ -339,6 +340,66 @@ OSSL_CORE_MAKE_FUNC(int, OP_kdf_get_ctx_params,
OSSL_CORE_MAKE_FUNC(int, OP_kdf_set_ctx_params,
(void *kctx, const OSSL_PARAM params[]))
+/* RAND */
+
+# define OSSL_FUNC_RAND_NEWCTX 1
+# define OSSL_FUNC_RAND_FREECTX 2
+# define OSSL_FUNC_RAND_INSTANTIATE 3
+# define OSSL_FUNC_RAND_UNINSTANTIATE 4
+# define OSSL_FUNC_RAND_GENERATE 5
+# define OSSL_FUNC_RAND_RESEED 6
+# define OSSL_FUNC_RAND_NONCE 7
+# define OSSL_FUNC_RAND_ENABLE_LOCKING 8
+# define OSSL_FUNC_RAND_LOCK 9
+# define OSSL_FUNC_RAND_UNLOCK 10
+# define OSSL_FUNC_RAND_GETTABLE_PARAMS 11
+# define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS 12
+# define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS 13
+# define OSSL_FUNC_RAND_GET_PARAMS 14
+# define OSSL_FUNC_RAND_GET_CTX_PARAMS 15
+# define OSSL_FUNC_RAND_SET_CTX_PARAMS 16
+# define OSSL_FUNC_RAND_SET_CALLBACKS 17
+# define OSSL_FUNC_RAND_VERIFY_ZEROIZATION 18
+
+OSSL_CORE_MAKE_FUNC(void *, OP_rand_newctx,
+ (void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_calls))
+OSSL_CORE_MAKE_FUNC(void, OP_rand_freectx, (void *vctx))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_instantiate,
+ (void *vdrbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr, size_t pstr_len))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_uninstantiate, (void *vdrbg))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_generate,
+ (void *vctx, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *addin, size_t addin_len))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_reseed,
+ (void *vctx, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *addin, size_t addin_len))
+OSSL_CORE_MAKE_FUNC(size_t, OP_rand_nonce,
+ (void *vctx, unsigned char *out, unsigned int strength,
+ size_t min_noncelen, size_t max_noncelen))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_enable_locking, (void *vctx))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_lock, (void *vctx))
+OSSL_CORE_MAKE_FUNC(void, OP_rand_unlock, (void *vctx))
+OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_rand_gettable_params, (void))
+OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_rand_gettable_ctx_params, (void))
+OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, OP_rand_settable_ctx_params, (void))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_get_params, (OSSL_PARAM params[]))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_get_ctx_params,
+ (void *vctx, OSSL_PARAM params[]))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_set_ctx_params,
+ (void *vctx, const OSSL_PARAM params[]))
+OSSL_CORE_MAKE_FUNC(void, OP_rand_set_callbacks,
+ (void *vctx, OSSL_INOUT_CALLBACK *get_entropy,
+ OSSL_CALLBACK *cleanup_entropy,
+ OSSL_INOUT_CALLBACK *get_nonce,
+ OSSL_CALLBACK *cleanup_nonce, void *arg))
+OSSL_CORE_MAKE_FUNC(int, OP_rand_verify_zeroization,
+ (void *vctx))
+
/*-
* Key management
*
diff --git a/include/openssl/evp.h b/include/openssl/evp.h
index 2b39d613b0..644a214a6e 100644
--- a/include/openssl/evp.h
+++ b/include/openssl/evp.h
@@ -1071,6 +1071,59 @@ void EVP_MD_do_all_provided(OPENSSL_CTX *libctx,
void (*fn)(EVP_MD *md, void *arg),
void *arg);
+/* RAND stuff */
+EVP_RAND *EVP_RAND_fetch(OPENSSL_CTX *libctx, const char *algorithm,
+ const char *properties);
+int EVP_RAND_up_ref(EVP_RAND *rand);
+void EVP_RAND_free(EVP_RAND *rand);
+int EVP_RAND_number(const EVP_RAND *rand);
+const char *EVP_RAND_name(const EVP_RAND *rand);
+int EVP_RAND_is_a(const EVP_RAND *rand, const char *name);
+const OSSL_PROVIDER *EVP_RAND_provider(const EVP_RAND *rand);
+int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]);
+
+EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent);
+void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx);
+EVP_RAND *EVP_RAND_CTX_rand(EVP_RAND_CTX *ctx);
+int EVP_RAND_get_ctx_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]);
+int EVP_RAND_set_ctx_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]);
+const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand);
+const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand);
+const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand);
+
+void EVP_RAND_do_all_provided(OPENSSL_CTX *libctx,
+ void (*fn)(EVP_RAND *rand, void *arg),
+ void *arg);
+void EVP_RAND_names_do_all(const EVP_RAND *rand,
+ void (*fn)(const char *name, void *data),
+ void *data);
+
+__owur int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr, size_t pstr_len);
+int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx);
+__owur int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out,
+ size_t outlen, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *addin, size_t addin_len);
+int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *addin, size_t addin_len);
+__owur int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen);
+__owur int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx);
+int EVP_RAND_set_callbacks(EVP_RAND_CTX *ctx,
+ OSSL_INOUT_CALLBACK *get_entropy,
+ OSSL_CALLBACK *cleanup_entropy,
+ OSSL_INOUT_CALLBACK *get_nonce,
+ OSSL_CALLBACK *cleanup_nonce, void *arg);
+int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx);
+unsigned int EVP_RAND_strength(EVP_RAND_CTX *ctx);
+int EVP_RAND_state(EVP_RAND_CTX *ctx);
+
+#define EVP_RAND_STATE_UNINITIALISED 0
+#define EVP_RAND_STATE_READY 1
+#define EVP_RAND_STATE_ERROR 2
+
/* PKEY stuff */
DEPRECATEDIN_3_0(int EVP_PKEY_decrypt_old(unsigned char *dec_key,
const unsigned char *enc_key,
diff --git a/include/openssl/evperr.h b/include/openssl/evperr.h
index 063cf8e2d8..6bc106812b 100644
--- a/include/openssl/evperr.h
+++ b/include/openssl/evperr.h
@@ -191,6 +191,7 @@ int ERR_load_EVP_strings(void);
# define EVP_R_FETCH_FAILED 202
# define EVP_R_FINAL_ERROR 188
# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167
+# define EVP_R_GENERATE_ERROR 214
# define EVP_R_GET_RAW_KEY_FAILED 182
# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171
# define EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS 204
@@ -203,12 +204,14 @@ int ERR_load_EVP_strings(void);
# define EVP_R_INVALID_IV_LENGTH 194
# define EVP_R_INVALID_KEY 163
# define EVP_R_INVALID_KEY_LENGTH 130
+# define EVP_R_INVALID_NULL_ALGORITHM 218
# define EVP_R_INVALID_OPERATION 148
# define EVP_R_INVALID_PROVIDER_FUNCTIONS 193
# define EVP_R_INVALID_SALT_LENGTH 186
# define EVP_R_KEYGEN_FAILURE 120
# define EVP_R_KEYMGMT_EXPORT_FAILURE 205
# define EVP_R_KEY_SETUP_FAILED 180
+# define EVP_R_LOCKING_NOT_SUPPORTED 213
# define EVP_R_MEMORY_LIMIT_EXCEEDED 172
# define EVP_R_MESSAGE_DIGEST_IS_NULL 159
# define EVP_R_METHOD_NOT_SUPPORTED 144
@@ -236,6 +239,11 @@ int ERR_load_EVP_strings(void);
# define EVP_R_PUBLIC_KEY_NOT_RSA 106
# define EVP_R_SET_DEFAULT_PROPERTY_FAILURE 209
# define EVP_R_TOO_MANY_RECORDS 183
+# define EVP_R_UNABLE_TO_ENABLE_PARENT_LOCKING 212
+# define EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE 215
+# define EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH 216
+# define EVP_R_UNABLE_TO_LOCK_CONTEXT 211
+# define EVP_R_UNABLE_TO_SET_CALLBACKS 217
# define EVP_R_UNKNOWN_CIPHER 160
# define EVP_R_UNKNOWN_DIGEST 161
# define EVP_R_UNKNOWN_KEY_TYPE 207
diff --git a/include/openssl/param_build.h b/include/openssl/param_build.h
index 45ed1bf13f..58ad9be732 100644
--- a/include/openssl/param_build.h
+++ b/include/openssl/param_build.h
@@ -33,6 +33,8 @@ int OSSL_PARAM_BLD_push_uint64(OSSL_PARAM_BLD *bld, const char *key,
uint64_t val);
int OSSL_PARAM_BLD_push_size_t(OSSL_PARAM_BLD *bld, const char *key,
size_t val);
+int OSSL_PARAM_BLD_push_time_t(OSSL_PARAM_BLD *bld, const char *key,
+ time_t val);
int OSSL_PARAM_BLD_push_double(OSSL_PARAM_BLD *bld, const char *key,
double val);
int OSSL_PARAM_BLD_push_BN(OSSL_PARAM_BLD *bld, const char *key,
diff --git a/include/openssl/params.h b/include/openssl/params.h
index 993ee8188e..44fc1a6a38 100644
--- a/include/openssl/params.h
+++ b/include/openssl/params.h
@@ -49,6 +49,8 @@ extern "C" {
sizeof(uint64_t))
# define OSSL_PARAM_size_t(key, addr) \
OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), sizeof(size_t))
+# define OSSL_PARAM_time_t(key, addr) \
+ OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(time_t))
# define OSSL_PARAM_double(key, addr) \
OSSL_PARAM_DEFN((key), OSSL_PARAM_REAL, (addr), sizeof(double))
@@ -78,6 +80,7 @@ OSSL_PARAM OSSL_PARAM_construct_uint32(const char *key, uint32_t *buf);
OSSL_PARAM OSSL_PARAM_construct_int64(const char *key, int64_t *buf);
OSSL_PARAM OSSL_PARAM_construct_uint64(const char *key, uint64_t *buf);
OSSL_PARAM OSSL_PARAM_construct_size_t(const char *key, size_t *buf);
+OSSL_PARAM OSSL_PARAM_construct_time_t(const char *key, time_t *buf);
OSSL_PARAM OSSL_PARAM_construct_BN(const char *key, unsigned char *buf,
size_t bsize);
OSSL_PARAM OSSL_PARAM_construct_double(const char *key, double *buf);
@@ -105,6 +108,7 @@ int OSSL_PARAM_get_uint32(const OSSL_PARAM *p, uint32_t *val);
int OSSL_PARAM_get_int64(const OSSL_PARAM *p, int64_t *val);
int OSSL_PARAM_get_uint64(const OSSL_PARAM *p, uint64_t *val);
int OSSL_PARAM_get_size_t(const OSSL_PARAM *p, size_t *val);
+int OSSL_PARAM_get_time_t(const OSSL_PARAM *p, time_t *val);
int OSSL_PARAM_set_int(OSSL_PARAM *p, int val);
int OSSL_PARAM_set_uint(OSSL_PARAM *p, unsigned int val);
@@ -115,6 +119,7 @@ int OSSL_PARAM_set_uint32(OSSL_PARAM *p, uint32_t val);
int OSSL_PARAM_set_int64(OSSL_PARAM *p, int64_t val);
int OSSL_PARAM_set_uint64(OSSL_PARAM *p, uint64_t val);
int OSSL_PARAM_set_size_t(OSSL_PARAM *p, size_t val);
+int OSSL_PARAM_set_time_t(OSSL_PARAM *p, time_t val);
int OSSL_PARAM_get_double(const OSSL_PARAM *p, double *val);
int OSSL_PARAM_set_double(OSSL_PARAM *p, double val);
diff --git a/include/openssl/rand.h b/include/openssl/rand.h
index a95e9d4103..d2db26a8ae 100644
--- a/include/openssl/rand.h
+++ b/include/openssl/rand.h
@@ -82,7 +82,6 @@ DEPRECATEDIN_1_1_0(void RAND_screen(void))
DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM))
# endif
-
#ifdef __cplusplus
}
#endif
diff --git a/include/openssl/rand_drbg.h b/include/openssl/rand_drbg.h
index c37df348d2..f8517b8ecd 100644
--- a/include/openssl/rand_drbg.h
+++ b/include/openssl/rand_drbg.h
@@ -80,11 +80,9 @@ extern "C" {
*/
RAND_DRBG *RAND_DRBG_new_ex(OPENSSL_CTX *ctx, int type, unsigned int flags,
RAND_DRBG *parent);
-RAND_DRBG *RAND_DRBG_secure_new_ex(OPENSSL_CTX *ctx, int type,
- unsigned int flags, RAND_DRBG *parent);
RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent);
-RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent);
-int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags);
+DEPRECATEDIN_3_0(int RAND_DRBG_set(RAND_DRBG *drbg, int type,
+ unsigned int flags))
int RAND_DRBG_set_defaults(int type, unsigned int flags);
int RAND_DRBG_instantiate(RAND_DRBG *drbg,
const unsigned char *pers, size_t perslen);
@@ -154,6 +152,8 @@ int RAND_DRBG_set_callback_data(RAND_DRBG *drbg, void *data);
void *RAND_DRBG_get_callback_data(RAND_DRBG *drbg);
+int RAND_DRBG_verify_zeroization(RAND_DRBG *drbg);
+
# ifdef __cplusplus
}
# endif
diff --git a/include/openssl/randerr.h b/include/openssl/randerr.h
index a0b82b45f7..2764894b0c 100644
--- a/include/openssl/randerr.h
+++ b/include/openssl/randerr.h
@@ -36,6 +36,7 @@ int ERR_load_RAND_strings(void);
# define RAND_F_RAND_DRBG_GENERATE 0
# define RAND_F_RAND_DRBG_GET_ENTROPY 0
# define RAND_F_RAND_DRBG_GET_NONCE 0
+# define RAND_F_RAND_DRBG_INIT_METHOD 0
# define RAND_F_RAND_DRBG_INSTANTIATE 0
# define RAND_F_RAND_DRBG_NEW 0
# define RAND_F_RAND_DRBG_RESEED 0
@@ -79,6 +80,7 @@ int ERR_load_RAND_strings(void);
# define RAND_R_FUNC_NOT_IMPLEMENTED 101
# define RAND_R_FWRITE_ERROR 123
# define RAND_R_GENERATE_ERROR 112
+# define RAND_R_INSUFFICIENT_DRBG_STRENGTH 139
# define RAND_R_INTERNAL_ERROR 113
# define RAND_R_IN_ERROR_STATE 114
# define RAND_R_NOT_A_REGULAR_FILE 122
@@ -96,6 +98,10 @@ int ERR_load_RAND_strings(void);
# define RAND_R_SELFTEST_FAILURE 119
# define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135
# define RAND_R_TOO_MUCH_NONCE_REQUESTED 136
+# define RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER 141
+# define RAND_R_UNABLE_TO_GET_PARENT_STRENGTH 138
+# define RAND_R_UNABLE_TO_GET_RESEED_PROP_CTR 142
+# define RAND_R_UNABLE_TO_LOCK_PARENT 140
# define RAND_R_UNSUPPORTED_DRBG_FLAGS 132
# define RAND_R_UNSUPPORTED_DRBG_TYPE 120
diff --git a/include/openssl/types.h b/include/openssl/types.h
index 27f90a7bdf..d43950a809 100644
--- a/include/openssl/types.h
+++ b/include/openssl/types.h
@@ -114,6 +114,9 @@ typedef struct evp_keymgmt_st EVP_KEYMGMT;
typedef struct evp_kdf_st EVP_KDF;
typedef struct evp_kdf_ctx_st EVP_KDF_CTX;
+typedef struct evp_rand_st EVP_RAND;
+typedef struct evp_rand_ctx_st EVP_RAND_CTX;
+
typedef struct evp_keyexch_st EVP_KEYEXCH;
typedef struct evp_signature_st EVP_SIGNATURE;
diff --git a/providers/build.info b/providers/build.info
index b7eef40521..873f12a853 100644
--- a/providers/build.info
+++ b/providers/build.info
@@ -48,7 +48,7 @@ $COMMON_INCLUDES=../crypto ../include implementations/include common/include
INCLUDE[$LIBCOMMON]=$COMMON_INCLUDES
INCLUDE[$LIBIMPLEMENTATIONS]=.. $COMMON_INCLUDES
INCLUDE[$LIBLEGACY]=.. $COMMON_INCLUDES
-INCLUDE[$LIBNONFIPS]=$COMMON_INCLUDES
+INCLUDE[$LIBNONFIPS]=.. $COMMON_INCLUDES
INCLUDE[$LIBFIPS]=.. $COMMON_INCLUDES
DEFINE[$LIBFIPS]=FIPS_MODULE
diff --git a/providers/common/include/prov/providercommonerr.h b/providers/common/include/prov/providercommonerr.h
index 87bea503ab..b7fd2c2bf4 100644
--- a/providers/common/include/prov/providercommonerr.h
+++ b/providers/common/include/prov/providercommonerr.h
@@ -50,8 +50,10 @@ int ERR_load_PROV_strings(void);
/*
* PROV reason codes.
*/
+# define PROV_R_ADDITIONAL_INPUT_TOO_LONG 184
# define PROV_R_AES_KEY_SETUP_FAILED 101
# define PROV_R_ALGORITHM_MISMATCH 173
+# define PROV_R_ALREADY_INSTANTIATED 185
# define PROV_R_BAD_DECRYPT 100
# define PROV_R_BAD_ENCODING 141
# define PROV_R_BAD_LENGTH 142
@@ -59,15 +61,24 @@ int ERR_load_PROV_strings(void);
# define PROV_R_BN_ERROR 160
# define PROV_R_BOTH_MODE_AND_MODE_INT 127
# define PROV_R_CIPHER_OPERATION_FAILED 102
+# define PROV_R_DERIVATION_FUNCTION_INIT_FAILED 205
+# define PROV_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS 186
# define PROV_R_DIGEST_NOT_ALLOWED 174
+# define PROV_R_DRBG_ALREADY_INITIALIZED 187
+# define PROV_R_ERROR_INSTANTIATING_DRBG 188
+# define PROV_R_ERROR_RETRIEVING_ENTROPY 189
+# define PROV_R_ERROR_RETRIEVING_NONCE 190
# define PROV_R_FAILED_DURING_DERIVATION 164
+# define PROV_R_FAILED_TO_CREATE_LOCK 180
# define PROV_R_FAILED_TO_DECRYPT 162
# define PROV_R_FAILED_TO_GENERATE_KEY 121
# define PROV_R_FAILED_TO_GET_PARAMETER 103
# define PROV_R_FAILED_TO_SET_PARAMETER 104
# define PROV_R_FAILED_TO_SIGN 175
+# define PROV_R_GENERATE_ERROR 191
# define PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 165
# define PROV_R_INAVLID_UKM_LENGTH 146
+# define PROV_R_INSUFFICIENT_DRBG_STRENGTH 181
# define PROV_R_INVALID_AAD 108
# define PROV_R_INVALID_CONSTANT_LENGTH 157
# define PROV_R_INVALID_CURVE 176
@@ -94,6 +105,7 @@ int ERR_load_PROV_strings(void);
# define PROV_R_INVALID_TAG 110
# define PROV_R_INVALID_TAGLEN 118
# define PROV_R_INVALID_X931_DIGEST 170
+# define PROV_R_IN_ERROR_STATE 192
# define PROV_R_KEY_SIZE_TOO_SMALL 171
# define PROV_R_MISSING_CEK_ALG 144
# define PROV_R_MISSING_CIPHER 155
@@ -108,18 +120,34 @@ int ERR_load_PROV_strings(void);
# define PROV_R_MISSING_SESSION_ID 133
# define PROV_R_MISSING_TYPE 134
# define PROV_R_MISSING_XCGHASH 135
+# define PROV_R_NOT_INSTANTIATED 193
# define PROV_R_NOT_SUPPORTED 136
# define PROV_R_NOT_XOF_OR_INVALID_LENGTH 113
# define PROV_R_NO_KEY_SET 114
# define PROV_R_NO_PARAMETERS_SET 177
# define PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 178
# define PROV_R_OUTPUT_BUFFER_TOO_SMALL 106
+# define PROV_R_PARENT_LOCKING_NOT_ENABLED 182
+# define PROV_R_PARENT_STRENGTH_TOO_WEAK 194
+# define PROV_R_PERSONALISATION_STRING_TOO_LONG 195
# define PROV_R_PSS_SALTLEN_TOO_SMALL 172
# define PROV_R_READ_KEY 159
+# define PROV_R_REQUEST_TOO_LARGE_FOR_DRBG 196
+# define PROV_R_REQUIRE_CTR_MODE_CIPHER 206
+# define PROV_R_RESEED_ERROR 197
# define PROV_R_TAG_NOTSET 119
# define PROV_R_TAG_NOT_NEEDED 120
+# define PROV_R_UNABLE_TO_FIND_CIPHERS 207
+# define PROV_R_UNABLE_TO_GET_ENTROPY 202
+# define PROV_R_UNABLE_TO_GET_NONCE 203
+# define PROV_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER 198
+# define PROV_R_UNABLE_TO_GET_PARENT_STRENGTH 199
+# define PROV_R_UNABLE_TO_GET_RESEED_PROP_CTR 200
+# define PROV_R_UNABLE_TO_INITIALISE_CIPHERS 208
# define PROV_R_UNABLE_TO_LOAD_SHA1 143
# define PROV_R_UNABLE_TO_LOAD_SHA256 147
+# define PROV_R_UNABLE_TO_LOCK_PARENT 201
+# define PROV_R_UNABLE_TO_RESEED 204
# define PROV_R_UNKNOWN_PADDING_TYPE 163
# define PROV_R_UNSUPPORTED_CEK_ALG 145
# define PROV_R_UNSUPPORTED_KEY_SIZE 153
@@ -128,6 +156,7 @@ int ERR_load_PROV_strings(void);
# define PROV_R_VALUE_ERROR 138
# define PROV_R_WRONG_FINAL_BLOCK_LENGTH 107
# define PROV_R_WRONG_OUTPUT_BUFFER_SIZE 139
+# define PROV_R_XOF_DIGESTS_NOT_ALLOWED 183
# define PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE 148
# define PROV_R_XTS_DUPLICATED_KEYS 149
diff --git a/providers/common/provider_err.c b/providers/common/provider_err.c
index f79cdb0e0b..08978189b9 100644
--- a/providers/common/provider_err.c
+++ b/providers/common/provider_err.c
@@ -14,10 +14,14 @@
#ifndef OPENSSL_NO_ERR
static const ERR_STRING_DATA PROV_str_reasons[] = {
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ADDITIONAL_INPUT_TOO_LONG),
+ "additional input too long"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_AES_KEY_SETUP_FAILED),
"aes key setup failed"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ALGORITHM_MISMATCH),
"algorithm mismatch"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ALREADY_INSTANTIATED),
+ "already instantiated"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_BAD_DECRYPT), "bad decrypt"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_BAD_ENCODING), "bad encoding"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_BAD_LENGTH), "bad length"},
@@ -28,10 +32,24 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
"both mode and mode int"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_CIPHER_OPERATION_FAILED),
"cipher operation failed"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_DERIVATION_FUNCTION_INIT_FAILED),
+ "derivation function init failed"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS),
+ "derivation function mandatory for fips"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_DIGEST_NOT_ALLOWED),
"digest not allowed"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_DRBG_ALREADY_INITIALIZED),
+ "drbg already initialized"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ERROR_INSTANTIATING_DRBG),
+ "error instantiating drbg"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ERROR_RETRIEVING_ENTROPY),
+ "error retrieving entropy"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ERROR_RETRIEVING_NONCE),
+ "error retrieving nonce"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_DURING_DERIVATION),
"failed during derivation"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_CREATE_LOCK),
+ "failed to create lock"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_DECRYPT), "failed to decrypt"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_GENERATE_KEY),
"failed to generate key"},
@@ -40,10 +58,13 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_SET_PARAMETER),
"failed to set parameter"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_SIGN), "failed to sign"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_GENERATE_ERROR), "generate error"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE),
"illegal or unsupported padding mode"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INAVLID_UKM_LENGTH),
"inavlid ukm length"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INSUFFICIENT_DRBG_STRENGTH),
+ "insufficient drbg strength"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_AAD), "invalid aad"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_CONSTANT_LENGTH),
"invalid constant length"},
@@ -81,6 +102,7 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_TAGLEN), "invalid taglen"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_X931_DIGEST),
"invalid x931 digest"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_IN_ERROR_STATE), "in error state"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_KEY_SIZE_TOO_SMALL),
"key size too small"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_MISSING_CEK_ALG), "missing cek alg"},
@@ -98,6 +120,7 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
"missing session id"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_MISSING_TYPE), "missing type"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_MISSING_XCGHASH), "missing xcghash"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_NOT_INSTANTIATED), "not instantiated"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_NOT_SUPPORTED), "not supported"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_NOT_XOF_OR_INVALID_LENGTH),
"not xof or invalid length"},
@@ -107,15 +130,43 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
"operation not supported for this keytype"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_OUTPUT_BUFFER_TOO_SMALL),
"output buffer too small"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_PARENT_LOCKING_NOT_ENABLED),
+ "parent locking not enabled"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_PARENT_STRENGTH_TOO_WEAK),
+ "parent strength too weak"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_PERSONALISATION_STRING_TOO_LONG),
+ "personalisation string too long"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_PSS_SALTLEN_TOO_SMALL),
"pss saltlen too small"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_READ_KEY), "read key"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_REQUEST_TOO_LARGE_FOR_DRBG),
+ "request too large for drbg"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_REQUIRE_CTR_MODE_CIPHER),
+ "require ctr mode cipher"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_RESEED_ERROR), "reseed error"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_TAG_NOTSET), "tag notset"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_TAG_NOT_NEEDED), "tag not needed"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_FIND_CIPHERS),
+ "unable to find ciphers"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_GET_ENTROPY),
+ "unable to get entropy"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_GET_NONCE),
+ "unable to get nonce"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER),
+ "unable to get parent reseed prop counter"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_GET_PARENT_STRENGTH),
+ "unable to get parent strength"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_GET_RESEED_PROP_CTR),
+ "unable to get reseed prop ctr"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_INITIALISE_CIPHERS),
+ "unable to initialise ciphers"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_LOAD_SHA1),
"unable to load sha1"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_LOAD_SHA256),
"unable to load sha256"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_LOCK_PARENT),
+ "unable to lock parent"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNABLE_TO_RESEED), "unable to reseed"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNKNOWN_PADDING_TYPE),
"unknown padding type"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_UNSUPPORTED_CEK_ALG),
@@ -131,6 +182,8 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
"wrong final block length"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_WRONG_OUTPUT_BUFFER_SIZE),
"wrong output buffer size"},
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_XOF_DIGESTS_NOT_ALLOWED),
+ "xof digests not allowed"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE),
"xts data unit is too large"},
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_XTS_DUPLICATED_KEYS),
diff --git a/providers/defltprov.c b/providers/defltprov.c
index 8e27b33fc2..7c1ffc7763 100644
--- a/providers/defltprov.c
+++ b/providers/defltprov.c
@@ -337,6 +337,14 @@ static const OSSL_ALGORITHM deflt_keyexch[] = {
{ NULL, NULL, NULL }
};
+static const OSSL_ALGORITHM deflt_rands[] = {
+ { "CTR-DRBG", "provider=default", drbg_ctr_functions },
+ { "HASH-DRBG", "provider=default", drbg_hash_functions },
+ { "HMAC-DRBG", "provider=default", drbg_hmac_functions },
+ { "TEST-RAND", "provider=default", test_rng_functions },
+ { NULL, NULL, NULL }
+};
+
static const OSSL_ALGORITHM deflt_signature[] = {
#ifndef OPENSSL_NO_DSA
{ "DSA:dsaEncryption", "provider=default", dsa_signature_functions },
@@ -536,6 +544,8 @@ static const OSSL_ALGORITHM *deflt_query(void *provctx, int operation_id,
return deflt_macs;
case OSSL_OP_KDF:
return deflt_kdfs;
+ case OSSL_OP_RAND:
+ return deflt_rands;
case OSSL_OP_KEYMGMT:
return deflt_keymgmt;
case OSSL_OP_KEYEXCH:
diff --git a/providers/fips/fipsprov.c b/providers/fips/fipsprov.c
index 4d39570464..6a1b56eeae 100644
--- a/providers/fips/fipsprov.c
+++ b/providers/fips/fipsprov.c
@@ -469,6 +469,14 @@ static const OSSL_ALGORITHM fips_kdfs[] = {
{ NULL, NULL, NULL }
};
+static const OSSL_ALGORITHM fips_rands[] = {
+ { "CTR-DRBG", "provider=fips", drbg_ctr_functions },
+ { "HASH-DRBG", "provider=fips", drbg_hash_functions },
+ { "HMAC-DRBG", "provider=fips", drbg_hmac_functions },
+ { "TEST-RAND", "provider=fips", test_rng_functions },
+ { NULL, NULL, NULL }
+};
+
static const OSSL_ALGORITHM fips_keyexch[] = {
#ifndef OPENSSL_NO_DH
{ "DH:dhKeyAgreement", "provider=fips,fips=yes", dh_keyexch_functions },
@@ -533,6 +541,8 @@ static const OSSL_ALGORITHM *fips_query(void *provctx, int operation_id,
return fips_macs;
case OSSL_OP_KDF:
return fips_kdfs;
+ case OSSL_OP_RAND:
+ return fips_rands;
case OSSL_OP_KEYMGMT:
return fips_keymgmt;
case OSSL_OP_KEYEXCH:
diff --git a/providers/fips/self_test_data.inc b/providers/fips/self_test_data.inc
index 674806edb2..17bfc950db 100644
--- a/providers/fips/self_test_data.inc
+++ b/providers/fips/self_test_data.inc
@@ -60,7 +60,8 @@ typedef struct st_kat_kdf_st {
typedef struct st_kat_drbg_st {
const char *desc;
const char *algorithm;
- int nid;
+ const char *param_name;
+ char *param_value;
const unsigned char *entropyin;
size_t entropyinlen;
const unsigned char *nonce;
@@ -458,8 +459,7 @@ static const ST_KAT_DRBG st_kat_drbg_tests[] =
{
{
OSSL_SELF_TEST_DESC_DRBG_HASH,
- "SHA256",
- NID_sha256,
+ "HASH-DRBG", "digest", "SHA256",
ITM(drbg_hash_sha256_pr_entropyin),
ITM(drbg_hash_sha256_pr_nonce),
ITM(drbg_hash_sha256_pr_persstr),
@@ -471,8 +471,7 @@ static const ST_KAT_DRBG st_kat_drbg_tests[] =
},
{
OSSL_SELF_TEST_DESC_DRBG_CTR,
- "AES-128",
- NID_aes_128_ctr,
+ "CTR-DRBG", "cipher", "AES-128-CTR",
ITM(drbg_ctr_aes128_pr_df_entropyin),
ITM(drbg_ctr_aes128_pr_df_nonce),
ITM(drbg_ctr_aes128_pr_df_persstr),
@@ -484,8 +483,7 @@ static const ST_KAT_DRBG st_kat_drbg_tests[] =
},
{
OSSL_SELF_TEST_DESC_DRBG_HMAC,
- "SHA1",
- NID_sha1,
+ "HMAC-DRBG", "digest", "SHA1",
ITM(drbg_hmac_sha1_pr_entropyin),
ITM(drbg_hmac_sha1_pr_nonce),
ITM(drbg_hmac_sha1_pr_persstr),
diff --git a/providers/fips/self_test_kats.c b/providers/fips/self_test_kats.c
index 6b75f12e5c..6dc9dbc17f 100644
--- a/providers/fips/self_test_kats.c
+++ b/providers/fips/self_test_kats.c
@@ -10,17 +10,12 @@
#include <string.h>
#include <openssl/evp.h>
#include <openssl/kdf.h>
-#include <openssl/rand_drbg.h>
#include <openssl/core_names.h>
#include <openssl/param_build.h>
#include "internal/cryptlib.h"
#include "internal/nelem.h"
#include "self_test.h"
#include "self_test_data.inc"
-#include "../../crypto/rand/rand_local.h"
-
-#define DRBG_PARAM_ENTROPY "DRBG-ENTROPY"
-#define DRBG_PARAM_NONCE "DRBG-NONCE"
static int self_test_digest(const ST_KAT_DIGEST *t, OSSL_SELF_TEST *st,
OPENSSL_CTX *libctx)
@@ -240,86 +235,90 @@ err:
return ret;
}
-static size_t drbg_kat_entropy_cb(RAND_DRBG *drbg, unsigned char **pout,
- int entropy, size_t min_len, size_t max_len,
- int prediction_resistance)
-{
- OSSL_PARAM *drbg_params = RAND_DRBG_get_callback_data(drbg);
- OSSL_PARAM *p = OSSL_PARAM_locate(drbg_params, DRBG_PARAM_ENTROPY);
-
- if (p == NULL || p->data_type != OSSL_PARAM_OCTET_STRING)
- return 0;
- *pout = (unsigned char *)p->data;
- return p->data_size;
-}
-
-static size_t drbg_kat_nonce_cb(RAND_DRBG *drbg, unsigned char **pout,
- int entropy, size_t min_len, size_t max_len)
-{
- OSSL_PARAM *drbg_params = RAND_DRBG_get_callback_data(drbg);
- OSSL_PARAM *p = OSSL_PARAM_locate(drbg_params, DRBG_PARAM_NONCE);
-
- if (p == NULL || p->data_type != OSSL_PARAM_OCTET_STRING)
- return 0;
- *pout = (unsigned char *)p->data;
- return p->data_size;
-}
-
static int self_test_drbg(const ST_KAT_DRBG *t, OSSL_SELF_TEST *st,
OPENSSL_CTX *libctx)
{
int ret = 0;
unsigned char out[256];
- RAND_DRBG *drbg = NULL;
- unsigned int flags = 0;
+ EVP_RAND *rand;
+ EVP_RAND_CTX *test = NULL, *drbg = NULL;
+ unsigned int strength = 256;
int prediction_resistance = 1; /* Causes a reseed */
OSSL_PARAM drbg_params[3] = {
OSSL_PARAM_END, OSSL_PARAM_END, OSSL_PARAM_END
};
- static const unsigned char zero[sizeof(drbg->data)] = { 0 };
OSSL_SELF_TEST_onbegin(st, OSSL_SELF_TEST_TYPE_DRBG, t->desc);
- if (strcmp(t->desc, OSSL_SELF_TEST_DESC_DRBG_HMAC) == 0)
- flags |= RAND_DRBG_FLAG_HMAC;
+ rand = EVP_RAND_fetch(libctx, "TEST-RAND", NULL);
+ if (rand == NULL)
+ goto err;
- drbg = RAND_DRBG_new_ex(libctx, t->nid, flags, NULL);
- if (drbg == NULL)
+ test = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_free(rand);
+ if (test == NULL)
goto err;
- if (!RAND_DRBG_set_callback_data(drbg, drbg_params))
+ drbg_params[0] = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH,
+ &strength);
+ if (!EVP_RAND_set_ctx_params(test, drbg_params))
goto err;
- if (!RAND_DRBG_set_callbacks(drbg, drbg_kat_entropy_cb, NULL,
- drbg_kat_nonce_cb, NULL))
+ rand = EVP_RAND_fetch(libctx, t->algorithm, NULL);
+ if (rand == NULL)
+ goto err;
+
+ drbg = EVP_RAND_CTX_new(rand, test);
+ EVP_RAND_free(rand);
+ if (drbg == NULL)
+ goto err;
+
+ strength = EVP_RAND_strength(drbg);
+
+ drbg_params[0] = OSSL_PARAM_construct_utf8_string(t->param_name,
+ t->param_value, 0);
+ /* This is only used by HMAC-DRBG but it is ignored by the others */
+ drbg_params[1] =
+ OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_MAC, "HMAC", 0);
+ if (!EVP_RAND_set_ctx_params(drbg, drbg_params))
goto err;
drbg_params[0] =
- OSSL_PARAM_construct_octet_string(DRBG_PARAM_ENTROPY,
- (void *)t->entropyin, t->entropyinlen);
+ OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
+ (void *)t->entropyin,
+ t->entropyinlen);
drbg_params[1] =
- OSSL_PARAM_construct_octet_string(DRBG_PARAM_NONCE,
+ OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_NONCE,
(void *)t->nonce, t->noncelen);
-
- if (!RAND_DRBG_instantiate(drbg, t->persstr, t->persstrlen))
+ if (!EVP_RAND_set_ctx_params(test, drbg_params)
+ || !EVP_RAND_instantiate(test, strength, 0, NULL, 0))
+ goto err;
+ if (!EVP_RAND_instantiate(drbg, strength, 0, t->persstr, t->persstrlen))
goto err;
drbg_params[0] =
- OSSL_PARAM_construct_octet_string(DRBG_PARAM_ENTROPY,
+ OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
(void *)t->entropyinpr1,
t->entropyinpr1len);
+ if (!EVP_RAND_set_ctx_params(test, drbg_params))
+ goto err;
- if (!RAND_DRBG_generate(drbg, out, t->expectedlen, prediction_resistance,
- t->entropyaddin1, t->entropyaddin1len))
+ if (!EVP_RAND_generate(drbg, out, t->expectedlen, strength,
+ prediction_resistance,
+ t->entropyaddin1, t->entropyaddin1len))
goto err;
drbg_params[0] =
- OSSL_PARAM_construct_octet_string(DRBG_PARAM_ENTROPY,
+ OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
(void *)t->entropyinpr2,
t->entropyinpr2len);
+ if (!EVP_RAND_set_ctx_params(test, drbg_params))
+ goto err;
+
/* This calls RAND_DRBG_reseed() internally when prediction_resistance = 1 */
- if (!RAND_DRBG_generate(drbg, out, t->expectedlen, prediction_resistance,
- t->entropyaddin2, t->entropyaddin2len))
+ if (!EVP_RAND_generate(drbg, out, t->expectedlen, strength,
+ prediction_resistance,
+ t->entropyaddin2, t->entropyaddin2len))
goto err;
OSSL_SELF_TEST_oncorrupt_byte(st, out);
@@ -327,17 +326,18 @@ static int self_test_drbg(const ST_KAT_DRBG *t, OSSL_SELF_TEST *st,
if (memcmp(out, t->expected, t->expectedlen) != 0)
goto err;
- if (!RAND_DRBG_uninstantiate(drbg))
+ if (!EVP_RAND_uninstantiate(drbg))
goto err;
/*
* Check that the DRBG data has been zeroized after RAND_DRBG_uninstantiate.
*/
- if (memcmp((unsigned char *)&drbg->data, zero, sizeof(drbg->data)) != 0)
+ if (!EVP_RAND_verify_zeroization(drbg))
goto err;
ret = 1;
err:
- RAND_DRBG_free(drbg);
+ EVP_RAND_CTX_free(drbg);
+ EVP_RAND_CTX_free(test);
OSSL_SELF_TEST_onend(st, ret);
return ret;
}
diff --git a/providers/implementations/build.info b/providers/implementations/build.info
index e4cab9bd2e..839478ef36 100644
--- a/providers/implementations/build.info
+++ b/providers/implementations/build.info
@@ -1,2 +1,2 @@
-SUBDIRS=digests ciphers macs kdfs exchange keymgmt signature asymciphers \
+SUBDIRS=digests ciphers rands macs kdfs exchange keymgmt signature asymciphers \
serializers
diff --git a/providers/implementations/include/prov/implementations.h b/providers/implementations/include/prov/implementations.h
index 0589a6e996..ee942e94e1 100644
--- a/providers/implementations/include/prov/implementations.h
+++ b/providers/implementations/include/prov/implementations.h
@@ -7,6 +7,9 @@
* https://www.openssl.org/source/license.html
*/
+#include <openssl/core.h>
+#include <openssl/types.h>
+
/* Digests */
extern const OSSL_DISPATCH sha1_functions[];
extern const OSSL_DISPATCH sha224_functions[];
@@ -252,6 +255,12 @@ extern const OSSL_DISPATCH kdf_x942_kdf_functions[];
#endif
extern const OSSL_DISPATCH kdf_krb5kdf_functions[];
+/* RNGs */
+extern const OSSL_DISPATCH test_rng_functions[];
+extern const OSSL_DISPATCH drbg_hash_functions[];
+extern const OSSL_DISPATCH drbg_hmac_functions[];
+extern const OSSL_DISPATCH drbg_ctr_functions[];
+extern const OSSL_DISPATCH crngt_functions[];
/* Key management */
extern const OSSL_DISPATCH dh_keymgmt_functions[];
diff --git a/providers/implementations/include/prov/rand_pool.h b/providers/implementations/include/prov/rand_pool.h
new file mode 100644
index 0000000000..f476604770
--- /dev/null
+++ b/providers/implementations/include/prov/rand_pool.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright 1995-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_PROVIDER_RAND_POOL_H
+# define OSSL_PROVIDER_RAND_POOL_H
+
+# include <stdio.h>
+# include <openssl/rand_drbg.h>
+
+/*
+ * Maximum allocation size for RANDOM_POOL buffers
+ *
+ * The max_len value for the buffer provided to the rand_drbg_get_entropy()
+ * callback is currently 2^31 bytes (2 gigabytes), if a derivation function
+ * is used. Since this is much too large to be allocated, the rand_pool_new()
+ * function chooses more modest values as default pool length, bounded
+ * by RAND_POOL_MIN_LENGTH and RAND_POOL_MAX_LENGTH
+ *
+ * The choice of the RAND_POOL_FACTOR is large enough such that the
+ * RAND_POOL can store a random input which has a lousy entropy rate of
+ * 8/256 (= 0.03125) bits per byte. This input will be sent through the
+ * derivation function which 'compresses' the low quality input into a
+ * high quality output.
+ *
+ * The factor 1.5 below is the pessimistic estimate for the extra amount
+ * of entropy required when no get_nonce() callback is defined.
+ */
+# define RAND_POOL_FACTOR 256
+# define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * \
+ 3 * (RAND_DRBG_STRENGTH / 16))
+/*
+ * = (RAND_POOL_FACTOR * \
+ * 1.5 * (RAND_DRBG_STRENGTH / 8))
+ */
+
+/*
+ * Initial allocation minimum.
+ *
+ * There is a distinction between the secure and normal allocation minimums.
+ * Ideally, the secure allocation size should be a power of two. The normal
+ * allocation size doesn't have any such restriction.
+ *
+ * The secure value is based on 128 bits of secure material, which is 16 bytes.
+ * Typically, the DRBGs will set a minimum larger than this so optimal
+ * allocation ought to take place (for full quality seed material).
+ *
+ * The normal value has been chosen by noticing that the rand_drbg_get_nonce
+ * function is usually the largest of the built in allocation (twenty four
+ * bytes and then appending another sixteen bytes). This means the buffer ends
+ * with 40 bytes. The value of forty eight is comfortably above this which
+ * allows some slack in the platform specific values used.
+ */
+# define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48)
+
+/*
+ * The 'random pool' acts as a dumb container for collecting random
+ * input from various entropy sources. It is the callers duty to 1) initialize
+ * the random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and
+ * 4) cleanup the random pool again.
+ *
+ * The random pool contains no locking mechanism because its scope and
+ * lifetime is intended to be restricted to a single stack frame.
+ */
+typedef struct rand_pool_st {
+ unsigned char *buffer; /* points to the beginning of the random pool */
+ size_t len; /* current number of random bytes contained in the pool */
+
+ int attached; /* true pool was attached to existing buffer */
+ int secure; /* 1: allocated on the secure heap, 0: otherwise */
+
+ size_t min_len; /* minimum number of random bytes requested */
+ size_t max_len; /* maximum number of random bytes (allocated buffer size) */
+ size_t alloc_len; /* current number of bytes allocated */
+ size_t entropy; /* current entropy count in bits */
+ size_t entropy_requested; /* requested entropy count in bits */
+} RAND_POOL;
+
+RAND_POOL *rand_pool_new(int entropy_requested, int secure,
+ size_t min_len, size_t max_len);
+RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len,
+ size_t entropy);
+void rand_pool_free(RAND_POOL *pool);
+
+const unsigned char *rand_pool_buffer(RAND_POOL *pool);
+unsigned char *rand_pool_detach(RAND_POOL *pool);
+void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer);
+
+size_t rand_pool_entropy(RAND_POOL *pool);
+size_t rand_pool_length(RAND_POOL *pool);
+
+size_t rand_pool_entropy_available(RAND_POOL *pool);
+size_t rand_pool_entropy_needed(RAND_POOL *pool);
+/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */
+size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor);
+size_t rand_pool_bytes_remaining(RAND_POOL *pool);
+
+int rand_pool_add(RAND_POOL *pool,
+ const unsigned char *buffer, size_t len, size_t entropy);
+unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len);
+int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy);
+
+#endif /* OSSL_PROVIDER_RAND_POOL_H */
diff --git a/providers/implementations/include/prov/seeding.h b/providers/implementations/include/prov/seeding.h
new file mode 100644
index 0000000000..bd0a57a769
--- /dev/null
+++ b/providers/implementations/include/prov/seeding.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "prov/rand_pool.h"
+
+/* Hardware-based seeding functions. */
+size_t prov_acquire_entropy_from_tsc(RAND_POOL *pool);
+size_t prov_acquire_entropy_from_cpu(RAND_POOL *pool);
+
+/* DRBG entropy callbacks. */
+size_t prov_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout);
+
+void prov_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out);
+
+size_t prov_pool_acquire_entropy(RAND_POOL *pool);
+int prov_pool_add_nonce_data(RAND_POOL *pool);
+
+/*
+ * Add some platform specific additional data
+ *
+ * This function is platform specific and adds some random noise to the
+ * additional data used for generating random bytes and for reseeding
+ * the drbg.
+ *
+ * Returns 1 on success and 0 on failure.
+ */
+int rand_pool_add_additional_data(RAND_POOL *pool);
+
diff --git a/providers/implementations/rands/build.info b/providers/implementations/rands/build.info
new file mode 100644
index 0000000000..1e710bb510
--- /dev/null
+++ b/providers/implementations/rands/build.info
@@ -0,0 +1,6 @@
+SUBDIRS=seeding
+
+$COMMON=drbg.c test_rng.c drbg_ctr.c drbg_hash.c drbg_hmac.c crngt.c rand_pool.c
+
+SOURCE[../../libfips.a]=$COMMON
+SOURCE[../../libnonfips.a]=$COMMON
diff --git a/crypto/rand/rand_crng_test.c b/providers/implementations/rands/crngt.c
similarity index 79%
rename from crypto/rand/rand_crng_test.c
rename to providers/implementations/rands/crngt.c
index 950cc629d7..1777b33489 100644
--- a/crypto/rand/rand_crng_test.c
+++ b/providers/implementations/rands/crngt.c
@@ -14,19 +14,47 @@
#include <string.h>
#include <openssl/evp.h>
-#include "crypto/rand.h"
-#include "internal/thread_once.h"
+#include <openssl/core_numbers.h>
+#include <openssl/params.h>
+#include "prov/providercommon.h"
+#include "prov/provider_ctx.h"
#include "internal/cryptlib.h"
-#include "rand_local.h"
+#include "prov/rand_pool.h"
+#include "drbg_local.h"
+#include "prov/seeding.h"
typedef struct crng_test_global_st {
unsigned char crngt_prev[EVP_MAX_MD_SIZE];
RAND_POOL *crngt_pool;
} CRNG_TEST_GLOBAL;
-int (*crngt_get_entropy)(OPENSSL_CTX *, RAND_POOL *, unsigned char *,
- unsigned char *, unsigned int *)
- = &rand_crngt_get_entropy_cb;
+static int crngt_get_entropy(OPENSSL_CTX *ctx, RAND_POOL *pool,
+ unsigned char *buf, unsigned char *md,
+ unsigned int *md_size)
+{
+ int r;
+ size_t n;
+ unsigned char *p;
+ EVP_MD *fmd;
+
+ if (pool == NULL)
+ return 0;
+
+ n = prov_pool_acquire_entropy(pool);
+ if (n >= CRNGT_BUFSIZ) {
+ fmd = EVP_MD_fetch(ctx, "SHA256", "");
+ if (fmd == NULL)
+ return 0;
+ p = rand_pool_detach(pool);
+ r = EVP_Digest(p, CRNGT_BUFSIZ, md, md_size, fmd, NULL);
+ if (r != 0)
+ memcpy(buf, p, CRNGT_BUFSIZ);
+ rand_pool_reattach(pool, p);
+ EVP_MD_free(fmd);
+ return r;
+ }
+ return 0;
+}
static void rand_crng_ossl_ctx_free(void *vcrngt_glob)
{
@@ -64,36 +92,7 @@ static const OPENSSL_CTX_METHOD rand_crng_ossl_ctx_method = {
rand_crng_ossl_ctx_free,
};
-int rand_crngt_get_entropy_cb(OPENSSL_CTX *ctx,
- RAND_POOL *pool,
- unsigned char *buf,
- unsigned char *md,
- unsigned int *md_size)
-{
- int r;
- size_t n;
- unsigned char *p;
-
- if (pool == NULL)
- return 0;
-
- n = rand_pool_acquire_entropy(pool);
- if (n >= CRNGT_BUFSIZ) {
- EVP_MD *fmd = EVP_MD_fetch(ctx, "SHA256", "");
- if (fmd == NULL)
- return 0;
- p = rand_pool_detach(pool);
- r = EVP_Digest(p, CRNGT_BUFSIZ, md, md_size, fmd, NULL);
- if (r != 0)
- memcpy(buf, p, CRNGT_BUFSIZ);
- rand_pool_reattach(pool, p);
- EVP_MD_free(fmd);
- return r;
- }
- return 0;
-}
-
-size_t rand_crngt_get_entropy(RAND_DRBG *drbg,
+size_t prov_crngt_get_entropy(PROV_DRBG *drbg,
unsigned char **pout,
int entropy, size_t min_len, size_t max_len,
int prediction_resistance)
@@ -103,8 +102,9 @@ size_t rand_crngt_get_entropy(RAND_DRBG *drbg,
RAND_POOL *pool;
size_t q, r = 0, s, t = 0;
int attempts = 3;
+ OPENSSL_CTX *libctx = PROV_LIBRARY_CONTEXT_OF(drbg->provctx);
CRNG_TEST_GLOBAL *crngt_glob
- = openssl_ctx_get_data(drbg->libctx, OPENSSL_CTX_RAND_CRNGT_INDEX,
+ = openssl_ctx_get_data(libctx, OPENSSL_CTX_RAND_CRNGT_INDEX,
&rand_crng_ossl_ctx_method);
if (crngt_glob == NULL)
@@ -115,7 +115,7 @@ size_t rand_crngt_get_entropy(RAND_DRBG *drbg,
while ((q = rand_pool_bytes_needed(pool, 1)) > 0 && attempts-- > 0) {
s = q > sizeof(buf) ? sizeof(buf) : q;
- if (!crngt_get_entropy(drbg->libctx, crngt_glob->crngt_pool, buf, md,
+ if (!crngt_get_entropy(libctx, crngt_glob->crngt_pool, buf, md,
&sz)
|| memcmp(crngt_glob->crngt_prev, md, sz) == 0
|| !rand_pool_add(pool, buf, s, s * 8))
@@ -132,7 +132,7 @@ err:
return r;
}
-void rand_crngt_cleanup_entropy(RAND_DRBG *drbg,
+void prov_crngt_cleanup_entropy(PROV_DRBG *drbg,
unsigned char *out, size_t outlen)
{
OPENSSL_secure_clear_free(out, outlen);
diff --git a/providers/implementations/rands/drbg.c b/providers/implementations/rands/drbg.c
new file mode 100644
index 0000000000..db8fce877a
--- /dev/null
+++ b/providers/implementations/rands/drbg.c
@@ -0,0 +1,1036 @@
+/*
+ * Copyright 2011-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/evp.h>
+#include "crypto/rand.h"
+#include "drbg_local.h"
+#include "internal/thread_once.h"
+#include "crypto/cryptlib.h"
+#include "prov/seeding.h"
+#include "prov/rand_pool.h"
+#include "prov/provider_ctx.h"
+#include "prov/providercommonerr.h"
+
+/*
+ * Support framework for NIST SP 800-90A DRBG
+ *
+ * See manual page PROV_DRBG(7) for a general overview.
+ *
+ * The OpenSSL model is to have new and free functions, and that new
+ * does all initialization. That is not the NIST model, which has
+ * instantiation and un-instantiate, and re-use within a new/free
+ * lifecycle. (No doubt this comes from the desire to support hardware
+ * DRBG, where allocation of resources on something like an HSM is
+ * a much bigger deal than just re-setting an allocated resource.)
+ */
+
+/* NIST SP 800-90A DRBG recommends the use of a personalization string. */
+static const char ossl_pers_string[] = DRBG_DEFAULT_PERS_STRING;
+
+static const OSSL_DISPATCH *find_call(const OSSL_DISPATCH *dispatch,
+ int function);
+
+static int rand_drbg_restart(PROV_DRBG *drbg);
+
+int drbg_lock(void *vctx)
+{
+ PROV_DRBG *drbg = vctx;
+
+ if (drbg == NULL || drbg->lock == NULL)
+ return 1;
+ return CRYPTO_THREAD_write_lock(drbg->lock);
+}
+
+void drbg_unlock(void *vctx)
+{
+ PROV_DRBG *drbg = vctx;
+
+ if (drbg != NULL && drbg->lock != NULL)
+ CRYPTO_THREAD_unlock(drbg->lock);
+}
+
+static int drbg_lock_parent(PROV_DRBG *drbg)
+{
+ void *parent = drbg->parent;
+
+ if (parent != NULL
+ && drbg->parent_lock != NULL
+ && !drbg->parent_lock(parent)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_LOCKING_NOT_ENABLED);
+ return 0;
+ }
+ return 1;
+}
+
+static void drbg_unlock_parent(PROV_DRBG *drbg)
+{
+ void *parent = drbg->parent;
+
+ if (parent != NULL && drbg->parent_unlock != NULL)
+ drbg->parent_unlock(parent);
+}
+
+static int get_parent_strength(PROV_DRBG *drbg, unsigned int *str)
+{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ void *parent = drbg->parent;
+ int res;
+
+ if (drbg->parent_get_ctx_params == NULL) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PARENT_STRENGTH);
+ return 0;
+ }
+
+ *params = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH, str);
+ if (!drbg_lock_parent(drbg)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_LOCK_PARENT);
+ return 0;
+ }
+ res = drbg->parent_get_ctx_params(parent, params);
+ drbg_unlock_parent(drbg);
+ if (!res) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PARENT_STRENGTH);
+ return 0;
+ }
+ return 1;
+}
+
+static unsigned int get_parent_reseed_count(PROV_DRBG *drbg)
+{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ void *parent = drbg->parent;
+ unsigned int r;
+
+ *params = OSSL_PARAM_construct_uint(OSSL_DRBG_PARAM_RESEED_CTR, &r);
+ if (!drbg_lock_parent(drbg)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_LOCK_PARENT);
+ goto err;
+ }
+ if (!drbg->parent_get_ctx_params(parent, params)) {
+ drbg_unlock_parent(drbg);
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_RESEED_PROP_CTR);
+ goto err;
+ }
+ drbg_unlock_parent(drbg);
+ return r;
+
+ err:
+ r = tsan_load(&drbg->reseed_counter) - 2;
+ if (r == 0)
+ r = UINT_MAX;
+ return r;
+}
+
+/*
+ * Implements the get_entropy() callback (see RAND_DRBG_set_callbacks())
+ *
+ * If the DRBG has a parent, then the required amount of entropy input
+ * is fetched using the parent's RAND_DRBG_generate().
+ *
+ * Otherwise, the entropy is polled from the system entropy sources
+ * using prov_pool_acquire_entropy().
+ *
+ * If a random pool has been added to the DRBG using RAND_add(), then
+ * its entropy will be used up first.
+ */
+static size_t prov_drbg_get_entropy(PROV_DRBG *drbg, unsigned char **pout,
+ int entropy, size_t min_len,
+ size_t max_len, int prediction_resistance)
+{
+ size_t ret = 0;
+ size_t entropy_available = 0;
+ RAND_POOL *pool;
+ unsigned int p_str;
+
+ if (drbg->parent != NULL) {
+ if (!get_parent_strength(drbg, &p_str))
+ return 0;
+ if (drbg->strength > p_str) {
+ /*
+ * We currently don't support the algorithm from NIST SP 800-90C
+ * 10.1.2 to use a weaker DRBG as source
+ */
+ RANDerr(0, PROV_R_PARENT_STRENGTH_TOO_WEAK);
+ return 0;
+ }
+ }
+
+ if (drbg->seed_pool != NULL) {
+ pool = drbg->seed_pool;
+ pool->entropy_requested = entropy;
+ } else {
+ pool = rand_pool_new(entropy, 1, min_len, max_len);
+ if (pool == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ }
+
+ if (drbg->parent != NULL) {
+ size_t bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
+ unsigned char *buffer = rand_pool_add_begin(pool, bytes_needed);
+
+ if (buffer != NULL) {
+ size_t bytes = 0;
+
+ /*
+ * Get random data from parent. Include our address as additional input,
+ * in order to provide some additional distinction between different
+ * DRBG child instances.
+ * Our lock is already held, but we need to lock our parent before
+ * generating bits from it. (Note: taking the lock will be a no-op
+ * if locking if drbg->parent->lock == NULL.)
+ */
+ if (drbg->parent_generate == NULL)
+ goto err;
+ drbg_lock_parent(drbg);
+ if (drbg->parent_generate(drbg->parent, buffer, bytes_needed,
+ drbg->strength, prediction_resistance,
+ (unsigned char *)&drbg,
+ sizeof(drbg)) != 0)
+ bytes = bytes_needed;
+ drbg_unlock_parent(drbg);
+ drbg->parent_reseed_counter = get_parent_reseed_count(drbg);
+
+ rand_pool_add_end(pool, bytes, 8 * bytes);
+ entropy_available = rand_pool_entropy_available(pool);
+ }
+ } else {
+ /* Get entropy by polling system entropy sources. */
+ entropy_available = prov_pool_acquire_entropy(pool);
+ }
+
+ if (entropy_available > 0) {
+ ret = rand_pool_length(pool);
+ *pout = rand_pool_detach(pool);
+ }
+
+err:
+ if (drbg->seed_pool == NULL)
+ rand_pool_free(pool);
+ return ret;
+}
+
+/*
+ * Implements the cleanup_entropy() callback (see RAND_DRBG_set_callbacks())
+ *
+ */
+static void prov_drbg_cleanup_entropy(PROV_DRBG *drbg,
+ unsigned char *out, size_t outlen)
+{
+ OSSL_PARAM params[3], *p = params;
+
+ if (drbg->get_entropy_fn != NULL) {
+ if (drbg->cleanup_entropy_fn != NULL) {
+ *p++ = OSSL_PARAM_construct_size_t(OSSL_DRBG_PARAM_SIZE,
+ &outlen);
+ *p++ = OSSL_PARAM_construct_octet_ptr(OSSL_DRBG_PARAM_RANDOM_DATA,
+ (void **)&out, 0);
+ *p = OSSL_PARAM_construct_end();
+
+ drbg->cleanup_entropy_fn(params, drbg->callback_arg);
+ }
+ } else if (drbg->seed_pool == NULL) {
+ OPENSSL_secure_clear_free(out, outlen);
+ }
+}
+
+static size_t get_entropy(PROV_DRBG *drbg, unsigned char **pout, int entropy,
+ size_t min_len, size_t max_len,
+ int prediction_resistance)
+{
+ if (drbg->get_entropy_fn != NULL) {
+ OSSL_PARAM params[6], *p = params;
+ OSSL_PARAM out[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+
+ *p++ = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_ENTROPY_REQUIRED,
+ &entropy);
+ *p++ = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_PREDICTION_RESISTANCE,
+ &prediction_resistance);
+ *p++ = OSSL_PARAM_construct_size_t(OSSL_DRBG_PARAM_MIN_LENGTH,
+ &min_len);
+ *p++ = OSSL_PARAM_construct_size_t(OSSL_DRBG_PARAM_MAX_LENGTH,
+ &max_len);
+ *p = OSSL_PARAM_construct_end();
+ *out = OSSL_PARAM_construct_octet_ptr(OSSL_DRBG_PARAM_RANDOM_DATA,
+ (void **)pout, 0);
+
+ if (drbg->get_entropy_fn(params, out, drbg->callback_arg))
+ return out->return_size;
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_ENTROPY);
+ return 0;
+ }
+
+#ifdef FIPS_MODULE
+ if (drbg->parent == NULL)
+ return prov_crngt_get_entropy(drbg, pout, entropy, min_len, max_len,
+ prediction_resistance);
+#endif
+
+ return prov_drbg_get_entropy(drbg, pout, entropy, min_len, max_len,
+ prediction_resistance);
+}
+
+static void cleanup_entropy(PROV_DRBG *drbg, unsigned char *out, size_t outlen)
+{
+#ifdef FIPS_MODULE
+ if (drbg->parent == NULL)
+ prov_crngt_cleanup_entropy(drbg, out, outlen);
+ else
+#endif
+ prov_drbg_cleanup_entropy(drbg, out, outlen);
+}
+
+#ifndef PROV_RAND_GET_RANDOM_NONCE
+typedef struct prov_drbg_nonce_global_st {
+ CRYPTO_RWLOCK *rand_nonce_lock;
+ int rand_nonce_count;
+} PROV_DRBG_NONCE_GLOBAL;
+
+/*
+ * drbg_ossl_ctx_new() calls drgb_setup() which calls rand_drbg_get_nonce()
+ * which needs to get the rand_nonce_lock out of the OPENSSL_CTX...but since
+ * drbg_ossl_ctx_new() hasn't finished running yet we need the rand_nonce_lock
+ * to be in a different global data object. Otherwise we will go into an
+ * infinite recursion loop.
+ */
+static void *prov_drbg_nonce_ossl_ctx_new(OPENSSL_CTX *libctx)
+{
+ PROV_DRBG_NONCE_GLOBAL *dngbl = OPENSSL_zalloc(sizeof(*dngbl));
+
+ if (dngbl == NULL)
+ return NULL;
+
+ dngbl->rand_nonce_lock = CRYPTO_THREAD_lock_new();
+ if (dngbl->rand_nonce_lock == NULL) {
+ OPENSSL_free(dngbl);
+ return NULL;
+ }
+
+ return dngbl;
+}
+
+static void prov_drbg_nonce_ossl_ctx_free(void *vdngbl)
+{
+ PROV_DRBG_NONCE_GLOBAL *dngbl = vdngbl;
+
+ if (dngbl == NULL)
+ return;
+
+ CRYPTO_THREAD_lock_free(dngbl->rand_nonce_lock);
+
+ OPENSSL_free(dngbl);
+}
+
+static const OPENSSL_CTX_METHOD drbg_nonce_ossl_ctx_method = {
+ prov_drbg_nonce_ossl_ctx_new,
+ prov_drbg_nonce_ossl_ctx_free,
+};
+
+/* Get a nonce from the operating system */
+static size_t prov_drbg_get_nonce(PROV_DRBG *drbg,
+ unsigned char **pout,
+ int entropy, size_t min_len, size_t max_len)
+{
+ size_t ret = 0, n;
+ RAND_POOL *pool;
+ unsigned char *buf = NULL;
+ OPENSSL_CTX *libctx = PROV_LIBRARY_CONTEXT_OF(drbg->provctx);
+ PROV_DRBG_NONCE_GLOBAL *dngbl
+ = openssl_ctx_get_data(libctx, OPENSSL_CTX_DRBG_NONCE_INDEX,
+ &drbg_nonce_ossl_ctx_method);
+ OSSL_PARAM params[5], *p = params;
+ OSSL_PARAM out[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ struct {
+ void *instance;
+ int count;
+ } data;
+
+ if (dngbl == NULL)
+ return 0;
+
+ if (drbg->get_nonce_fn != NULL) {
+ *p++ = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_ENTROPY_REQUIRED,
+ &entropy);
+ *p++ = OSSL_PARAM_construct_size_t(OSSL_DRBG_PARAM_MIN_LENGTH,
+ &min_len);
+ *p++ = OSSL_PARAM_construct_size_t(OSSL_DRBG_PARAM_MAX_LENGTH,
+ &max_len);
+ *p = OSSL_PARAM_construct_end();
+ *out = OSSL_PARAM_construct_octet_ptr(OSSL_DRBG_PARAM_RANDOM_DATA,
+ (void **)pout, 0);
+
+ if (drbg->get_nonce_fn(params, out, drbg->callback_arg))
+ return out->return_size;
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_NONCE);
+ return 0;
+ }
+ if (drbg->parent != NULL) {
+ if (drbg->parent_nonce != NULL) {
+ n = drbg->parent_nonce(drbg->parent, NULL, 0, drbg->min_noncelen,
+ drbg->max_noncelen);
+ if (n > 0 && (buf = OPENSSL_malloc(n)) != NULL) {
+ ret = drbg->parent_nonce(drbg->parent, buf, 0,
+ drbg->min_noncelen,
+ drbg->max_noncelen);
+ if (ret == n) {
+ *pout = buf;
+ return ret;
+ }
+ OPENSSL_free(buf);
+ }
+ }
+ }
+
+ /* Use the built in nonce source */
+ memset(&data, 0, sizeof(data));
+ pool = rand_pool_new(0, 0, min_len, max_len);
+ if (pool == NULL)
+ return 0;
+
+ if (prov_pool_add_nonce_data(pool) == 0)
+ goto err;
+
+ data.instance = drbg;
+ CRYPTO_atomic_add(&dngbl->rand_nonce_count, 1, &data.count,
+ dngbl->rand_nonce_lock);
+
+ if (rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0) == 0)
+ goto err;
+
+ ret = rand_pool_length(pool);
+ *pout = rand_pool_detach(pool);
+
+ err:
+ rand_pool_free(pool);
+
+ return ret;
+}
+
+static void prov_drbg_clear_nonce(PROV_DRBG *drbg, unsigned char *nonce,
+ size_t noncelen)
+{
+ OSSL_PARAM params[3], *p = params;
+
+ if (drbg->get_nonce_fn != NULL) {
+ if (drbg->cleanup_nonce_fn != NULL) {
+ *p++ = OSSL_PARAM_construct_size_t(OSSL_DRBG_PARAM_SIZE,
+ &noncelen);
+ *p++ = OSSL_PARAM_construct_octet_ptr(OSSL_DRBG_PARAM_RANDOM_DATA,
+ (void **)&nonce, 0);
+ *p = OSSL_PARAM_construct_end();
+
+ drbg->cleanup_nonce_fn(params, drbg->callback_arg);
+ }
+ } else {
+ OPENSSL_clear_free(nonce, noncelen);
+ }
+}
+#else
+# define prov_drbg_clear_nonce(drbg, nonce, len) \
+ OPENSSL_clear_free((nonce), (len))
+#endif /* PROV_RAND_GET_RANDOM_NONCE */
+
+/*
+ * Instantiate |drbg|, after it has been initialized. Use |pers| and
+ * |perslen| as prediction-resistance input.
+ *
+ * Requires that drbg->lock is already locked for write, if non-null.
+ *
+ * Returns 1 on success, 0 on failure.
+ */
+int PROV_DRBG_instantiate(PROV_DRBG *drbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pers, size_t perslen)
+{
+ unsigned char *nonce = NULL, *entropy = NULL;
+ size_t noncelen = 0, entropylen = 0;
+ size_t min_entropy, min_entropylen, max_entropylen;
+
+ if (strength > drbg->strength) {
+ PROVerr(0, PROV_R_INSUFFICIENT_DRBG_STRENGTH);
+ goto end;
+ }
+ min_entropy = drbg->strength;
+ min_entropylen = drbg->min_entropylen;
+ max_entropylen = drbg->max_entropylen;
+
+ if (pers == NULL) {
+ pers = (const unsigned char *)ossl_pers_string;
+ perslen = sizeof(ossl_pers_string);
+ }
+ if (perslen > drbg->max_perslen) {
+ PROVerr(0, PROV_R_PERSONALISATION_STRING_TOO_LONG);
+ goto end;
+ }
+
+ if (drbg->state != EVP_RAND_STATE_UNINITIALISED) {
+ if (drbg->state == EVP_RAND_STATE_ERROR)
+ PROVerr(0, PROV_R_IN_ERROR_STATE);
+ else
+ PROVerr(0, PROV_R_ALREADY_INSTANTIATED);
+ goto end;
+ }
+
+ drbg->state = EVP_RAND_STATE_ERROR;
+
+ if (drbg->min_noncelen > 0) {
+ if (drbg->parent_nonce != NULL) {
+ noncelen = drbg->parent_nonce(drbg->parent, NULL, drbg->strength,
+ drbg->min_noncelen,
+ drbg->max_noncelen);
+ if (noncelen == 0) {
+ PROVerr(0, PROV_R_ERROR_RETRIEVING_NONCE);
+ goto end;
+ }
+ nonce = OPENSSL_malloc(noncelen);
+ if (nonce == NULL) {
+ PROVerr(0, PROV_R_ERROR_RETRIEVING_NONCE);
+ goto end;
+ }
+ if (noncelen != drbg->parent_nonce(drbg->parent, nonce,
+ drbg->strength,
+ drbg->min_noncelen,
+ drbg->max_noncelen)) {
+ PROVerr(0, PROV_R_ERROR_RETRIEVING_NONCE);
+ OPENSSL_free(nonce);
+ }
+#ifndef PROV_RAND_GET_RANDOM_NONCE
+ } else if (drbg->parent != NULL) {
+#endif
+ /*
+ * NIST SP800-90Ar1 section 9.1 says you can combine getting
+ * the entropy and nonce in 1 call by increasing the entropy
+ * with 50% and increasing the minimum length to accommodate
+ * the length of the nonce. We do this in case a nonce is
+ * required and there is no parental nonce capability.
+ */
+ min_entropy += drbg->strength / 2;
+ min_entropylen += drbg->min_noncelen;
+ max_entropylen += drbg->max_noncelen;
+ }
+#ifndef PROV_RAND_GET_RANDOM_NONCE
+ else { /* parent == NULL */
+ noncelen = prov_drbg_get_nonce(drbg, &nonce, drbg->strength / 2,
+ drbg->min_noncelen,
+ drbg->max_noncelen);
+ if (noncelen < drbg->min_noncelen
+ || noncelen > drbg->max_noncelen) {
+ PROVerr(0, PROV_R_ERROR_RETRIEVING_NONCE);
+ goto end;
+ }
+ }
+#endif
+ }
+
+ drbg->reseed_next_counter = tsan_load(&drbg->reseed_counter);
+ if (drbg->reseed_next_counter) {
+ drbg->reseed_next_counter++;
+ if (!drbg->reseed_next_counter)
+ drbg->reseed_next_counter = 1;
+ }
+
+ entropylen = get_entropy(drbg, &entropy, min_entropy,
+ min_entropylen, max_entropylen,
+ prediction_resistance);
+ if (entropylen < min_entropylen
+ || entropylen > max_entropylen) {
+ PROVerr(0, PROV_R_ERROR_RETRIEVING_ENTROPY);
+ goto end;
+ }
+
+ if (!drbg->instantiate(drbg, entropy, entropylen, nonce, noncelen,
+ pers, perslen)) {
+ PROVerr(0, PROV_R_ERROR_INSTANTIATING_DRBG);
+ goto end;
+ }
+
+ drbg->state = EVP_RAND_STATE_READY;
+ drbg->reseed_gen_counter = 1;
+ drbg->reseed_time = time(NULL);
+ tsan_store(&drbg->reseed_counter, drbg->reseed_next_counter);
+
+ end:
+ if (entropy != NULL)
+ cleanup_entropy(drbg, entropy, entropylen);
+ prov_drbg_clear_nonce(drbg, nonce, noncelen);
+ if (drbg->state == EVP_RAND_STATE_READY)
+ return 1;
+ return 0;
+}
+
+/*
+ * Uninstantiate |drbg|. Must be instantiated before it can be used.
+ *
+ * Requires that drbg->lock is already locked for write, if non-null.
+ *
+ * Returns 1 on success, 0 on failure.
+ */
+int PROV_DRBG_uninstantiate(PROV_DRBG *drbg)
+{
+ drbg->state = EVP_RAND_STATE_UNINITIALISED;
+ return 1;
+}
+
+/*
+ * Reseed |drbg|, mixing in the specified data
+ *
+ * Requires that drbg->lock is already locked for write, if non-null.
+ *
+ * Returns 1 on success, 0 on failure.
+ */
+int PROV_DRBG_reseed(PROV_DRBG *drbg, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adinlen)
+{
+ unsigned char *entropy = NULL;
+ size_t entropylen = 0;
+
+ if (drbg->state != EVP_RAND_STATE_READY) {
+ /* try to recover from previous errors */
+ rand_drbg_restart(drbg);
+
+ if (drbg->state == EVP_RAND_STATE_ERROR) {
+ PROVerr(0, PROV_R_IN_ERROR_STATE);
+ return 0;
+ }
+ if (drbg->state == EVP_RAND_STATE_UNINITIALISED) {
+ PROVerr(0, PROV_R_NOT_INSTANTIATED);
+ return 0;
+ }
+ }
+
+ if (ent != NULL) {
+ if (ent_len < drbg->min_entropylen) {
+ RANDerr(0, RAND_R_ENTROPY_OUT_OF_RANGE);
+ drbg->state = EVP_RAND_STATE_ERROR;
+ return 0;
+ }
+ if (ent_len > drbg->max_entropylen) {
+ RANDerr(0, RAND_R_ENTROPY_INPUT_TOO_LONG);
+ drbg->state = EVP_RAND_STATE_ERROR;
+ return 0;
+ }
+ }
+
+ if (adin == NULL) {
+ adinlen = 0;
+ } else if (adinlen > drbg->max_adinlen) {
+ PROVerr(0, PROV_R_ADDITIONAL_INPUT_TOO_LONG);
+ return 0;
+ }
+
+ drbg->state = EVP_RAND_STATE_ERROR;
+
+ drbg->reseed_next_counter = tsan_load(&drbg->reseed_counter);
+ if (drbg->reseed_next_counter) {
+ drbg->reseed_next_counter++;
+ if (!drbg->reseed_next_counter)
+ drbg->reseed_next_counter = 1;
+ }
+
+ if (ent != NULL) {
+#ifdef FIP_MODULE
+ /*
+ * NIST SP-800-90A mandates that entropy *shall not* be provided
+ * by the consuming application. Instead the data is added as additional
+ * input.
+ *
+ * (NIST SP-800-90Ar1, Sections 9.1 and 9.2)
+ */
+ if (!drbg->reseed(drbg, NULL, 0, ent, ent_len)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_RESEED);
+ return 0;
+ }
+#else
+ if (!drbg->reseed(drbg, ent, ent_len, adin, adinlen)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_RESEED);
+ return 0;
+ }
+ /* There isn't much point adding the same additional input twice */
+ adin = NULL;
+ adinlen = 0;
+#endif
+ }
+
+ /* Reseed using our sources in addition */
+ entropylen = get_entropy(drbg, &entropy, drbg->strength,
+ drbg->min_entropylen, drbg->max_entropylen,
+ prediction_resistance);
+ if (entropylen < drbg->min_entropylen
+ || entropylen > drbg->max_entropylen) {
+ PROVerr(0, PROV_R_ERROR_RETRIEVING_ENTROPY);
+ goto end;
+ }
+
+ if (!drbg->reseed(drbg, entropy, entropylen, adin, adinlen))
+ goto end;
+
+ drbg->state = EVP_RAND_STATE_READY;
+ drbg->reseed_gen_counter = 1;
+ drbg->reseed_time = time(NULL);
+ tsan_store(&drbg->reseed_counter, drbg->reseed_next_counter);
+ if (drbg->parent != NULL)
+ drbg->parent_reseed_counter = get_parent_reseed_count(drbg);
+
+ end:
+ cleanup_entropy(drbg, entropy, entropylen);
+ if (drbg->state == EVP_RAND_STATE_READY)
+ return 1;
+ return 0;
+}
+
+/*
+ * Generate |outlen| bytes into the buffer at |out|. Reseed if we need
+ * to or if |prediction_resistance| is set. Additional input can be
+ * sent in |adin| and |adinlen|.
+ *
+ * Requires that drbg->lock is already locked for write, if non-null.
+ *
+ * Returns 1 on success, 0 on failure.
+ *
+ */
+int PROV_DRBG_generate(PROV_DRBG *drbg, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *adin, size_t adinlen)
+{
+ int fork_id;
+ int reseed_required = 0;
+
+ if (drbg->state != EVP_RAND_STATE_READY) {
+ /* try to recover from previous errors */
+ rand_drbg_restart(drbg);
+
+ if (drbg->state == EVP_RAND_STATE_ERROR) {
+ PROVerr(0, PROV_R_IN_ERROR_STATE);
+ return 0;
+ }
+ if (drbg->state == EVP_RAND_STATE_UNINITIALISED) {
+ PROVerr(0, PROV_R_NOT_INSTANTIATED);
+ return 0;
+ }
+ }
+ if (strength > drbg->strength) {
+ PROVerr(0, PROV_R_INSUFFICIENT_DRBG_STRENGTH);
+ return 0;
+ }
+
+ if (outlen > drbg->max_request) {
+ PROVerr(0, PROV_R_REQUEST_TOO_LARGE_FOR_DRBG);
+ return 0;
+ }
+ if (adinlen > drbg->max_adinlen) {
+ PROVerr(0, PROV_R_ADDITIONAL_INPUT_TOO_LONG);
+ return 0;
+ }
+
+ fork_id = openssl_get_fork_id();
+
+ if (drbg->fork_id != fork_id) {
+ drbg->fork_id = fork_id;
+ reseed_required = 1;
+ }
+
+ if (drbg->reseed_interval > 0) {
+ if (drbg->reseed_gen_counter > drbg->reseed_interval)
+ reseed_required = 1;
+ }
+ if (drbg->reseed_time_interval > 0) {
+ time_t now = time(NULL);
+ if (now < drbg->reseed_time
+ || now - drbg->reseed_time >= drbg->reseed_time_interval)
+ reseed_required = 1;
+ }
+ if (drbg->parent != NULL
+ && get_parent_reseed_count(drbg) != drbg->parent_reseed_counter)
+ reseed_required = 1;
+
+ if (reseed_required || prediction_resistance) {
+ if (!PROV_DRBG_reseed(drbg, prediction_resistance, NULL, 0,
+ adin, adinlen)) {
+ PROVerr(0, PROV_R_RESEED_ERROR);
+ return 0;
+ }
+ adin = NULL;
+ adinlen = 0;
+ }
+
+ if (!drbg->generate(drbg, out, outlen, adin, adinlen)) {
+ drbg->state = EVP_RAND_STATE_ERROR;
+ PROVerr(0, PROV_R_GENERATE_ERROR);
+ return 0;
+ }
+
+ drbg->reseed_gen_counter++;
+
+ return 1;
+}
+
+/*
+ * Restart |drbg|, using the specified entropy or additional input
+ *
+ * Tries its best to get the drbg instantiated by all means,
+ * regardless of its current state.
+ *
+ * Optionally, a |buffer| of |len| random bytes can be passed,
+ * which is assumed to contain at least |entropy| bits of entropy.
+ *
+ * If |entropy| > 0, the buffer content is used as entropy input.
+ *
+ * If |entropy| == 0, the buffer content is used as additional input
+ *
+ * Returns 1 on success, 0 on failure.
+ *
+ * This function is used internally only.
+ */
+static int rand_drbg_restart(PROV_DRBG *drbg)
+{
+ if (drbg->seed_pool != NULL) {
+ drbg->state = EVP_RAND_STATE_ERROR;
+ rand_pool_free(drbg->seed_pool);
+ drbg->seed_pool = NULL;
+ RANDerr(0, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+
+ /* repair error state */
+ if (drbg->state == EVP_RAND_STATE_ERROR)
+ drbg->uninstantiate(drbg);
+
+ /* repair uninitialized state */
+ if (drbg->state == EVP_RAND_STATE_UNINITIALISED)
+ /* reinstantiate drbg */
+ PROV_DRBG_instantiate(drbg, drbg->strength, 0, NULL, 0);
+
+ rand_pool_free(drbg->seed_pool);
+ drbg->seed_pool = NULL;
+ return drbg->state == EVP_RAND_STATE_READY;
+}
+
+/* Provider support from here down */
+static const OSSL_DISPATCH *find_call(const OSSL_DISPATCH *dispatch,
+ int function)
+{
+ if (dispatch != NULL)
+ while (dispatch->function_id != 0) {
+ if (dispatch->function_id == function)
+ return dispatch;
+ dispatch++;
+ }
+ return NULL;
+}
+
+int drbg_enable_locking(void *vctx)
+{
+ PROV_DRBG *drbg = vctx;
+
+ if (drbg != NULL && drbg->lock == NULL) {
+ if (drbg->parent_enable_locking != NULL)
+ if (!drbg->parent_enable_locking(drbg->parent)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_LOCKING_NOT_ENABLED);
+ return 0;
+ }
+ drbg->lock = CRYPTO_THREAD_lock_new();
+ if (drbg->lock == NULL) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_CREATE_LOCK);
+ return 0;
+ }
+ }
+ return 1;
+}
+
+/*
+ * Allocate memory and initialize a new DRBG. The DRBG is allocated on
+ * the secure heap if |secure| is nonzero and the secure heap is enabled.
+ * The |parent|, if not NULL, will be used as random source for reseeding.
+ * This also requires the parent's provider context and the parent's lock.
+ *
+ * Returns a pointer to the new DRBG instance on success, NULL on failure.
+ */
+PROV_DRBG *prov_rand_drbg_new
+ (void *provctx, void *parent, const OSSL_DISPATCH *p_dispatch,
+ int (*dnew)(PROV_DRBG *ctx),
+ int (*instantiate)(PROV_DRBG *drbg,
+ const unsigned char *entropy, size_t entropylen,
+ const unsigned char *nonce, size_t noncelen,
+ const unsigned char *pers, size_t perslen),
+ int (*uninstantiate)(PROV_DRBG *ctx),
+ int (*reseed)(PROV_DRBG *drbg, const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len),
+ int (*generate)(PROV_DRBG *, unsigned char *out, size_t outlen,
+ const unsigned char *adin, size_t adin_len))
+{
+ PROV_DRBG *drbg = OPENSSL_zalloc(sizeof(*drbg));
+ unsigned int p_str;
+ const OSSL_DISPATCH *pfunc;
+
+ if (drbg == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ drbg->provctx = provctx;
+ drbg->instantiate = instantiate;
+ drbg->uninstantiate = uninstantiate;
+ drbg->reseed = reseed;
+ drbg->generate = generate;
+ drbg->fork_id = openssl_get_fork_id();
+
+ /* Extract parent's functions */
+ drbg->parent = parent;
+ if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_ENABLE_LOCKING)) != NULL)
+ drbg->parent_enable_locking = OSSL_get_OP_rand_enable_locking(pfunc);
+ if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_LOCK)) != NULL)
+ drbg->parent_lock = OSSL_get_OP_rand_lock(pfunc);
+ if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_UNLOCK)) != NULL)
+ drbg->parent_unlock = OSSL_get_OP_rand_unlock(pfunc);
+ if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_GET_CTX_PARAMS)) != NULL)
+ drbg->parent_get_ctx_params = OSSL_get_OP_rand_get_ctx_params(pfunc);
+ if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_GENERATE)) != NULL)
+ drbg->parent_generate = OSSL_get_OP_rand_generate(pfunc);
+ if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_NONCE)) != NULL)
+ drbg->parent_nonce = OSSL_get_OP_rand_nonce(pfunc);
+
+ /* Set some default maximums up */
+ drbg->max_entropylen = DRBG_MAX_LENGTH;
+ drbg->max_noncelen = DRBG_MAX_LENGTH;
+ drbg->max_perslen = DRBG_MAX_LENGTH;
+ drbg->max_adinlen = DRBG_MAX_LENGTH;
+ drbg->reseed_gen_counter = 1;
+ drbg->reseed_counter = 1;
+ drbg->reseed_interval = RESEED_INTERVAL;
+ drbg->reseed_time_interval = TIME_INTERVAL;
+
+ if (!dnew(drbg))
+ goto err;
+
+ if (parent != NULL) {
+ if (!get_parent_strength(drbg, &p_str))
+ goto err;
+ if (drbg->strength > p_str) {
+ /*
+ * We currently don't support the algorithm from NIST SP 800-90C
+ * 10.1.2 to use a weaker DRBG as source
+ */
+ ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_STRENGTH_TOO_WEAK);
+ goto err;
+ }
+ }
+ return drbg;
+
+ err:
+ prov_rand_drbg_free(drbg);
+ return NULL;
+}
+
+void prov_rand_drbg_free(PROV_DRBG *drbg)
+{
+ if (drbg == NULL)
+ return;
+
+ rand_pool_free(drbg->adin_pool);
+ CRYPTO_THREAD_lock_free(drbg->lock);
+ OPENSSL_free(drbg);
+}
+
+int drbg_get_ctx_params(PROV_DRBG *drbg, OSSL_PARAM params[])
+{
+ OSSL_PARAM *p;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_STATE);
+ if (p != NULL && !OSSL_PARAM_set_int(p, drbg->state))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_RAND_PARAM_STRENGTH);
+ if (p != NULL && !OSSL_PARAM_set_int(p, drbg->strength))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_MAX_REQUEST);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, drbg->max_request))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_MIN_ENTROPYLEN);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, drbg->min_entropylen))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_MAX_ENTROPYLEN);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, drbg->max_entropylen))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_MIN_NONCELEN);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, drbg->min_noncelen))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_MAX_NONCELEN);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, drbg->max_noncelen))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_MAX_PERSLEN);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, drbg->max_perslen))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_MAX_ADINLEN);
+ if (p != NULL && !OSSL_PARAM_set_size_t(p, drbg->max_adinlen))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_RESEED_REQUESTS);
+ if (p != NULL && !OSSL_PARAM_set_uint(p, drbg->reseed_interval))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_RESEED_TIME);
+ if (p != NULL && !OSSL_PARAM_set_time_t(p, drbg->reseed_time))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL);
+ if (p != NULL && !OSSL_PARAM_set_time_t(p, drbg->reseed_time_interval))
+ return 0;
+
+ p = OSSL_PARAM_locate(params, OSSL_DRBG_PARAM_RESEED_CTR);
+ if (p != NULL
+ && !OSSL_PARAM_set_uint(p, tsan_load(&drbg->reseed_counter)))
+ return 0;
+ return 1;
+}
+
+int drbg_set_ctx_params(PROV_DRBG *drbg, const OSSL_PARAM params[])
+{
+ const OSSL_PARAM *p;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_RESEED_REQUESTS);
+ if (p != NULL && !OSSL_PARAM_get_uint(p, &drbg->reseed_interval))
+ return 0;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL);
+ if (p != NULL && !OSSL_PARAM_get_time_t(p, &drbg->reseed_time_interval))
+ return 0;
+ return 1;
+}
+
+int drbg_set_callbacks(void *vctx, OSSL_INOUT_CALLBACK *get_entropy_fn,
+ OSSL_CALLBACK *cleanup_entropy_fn,
+ OSSL_INOUT_CALLBACK *get_nonce_fn,
+ OSSL_CALLBACK *cleanup_nonce_fn, void *arg)
+{
+ PROV_DRBG *drbg = vctx;
+
+ if (drbg->state != EVP_RAND_STATE_UNINITIALISED
+ || drbg->parent != NULL)
+ return 0;
+
+ drbg->get_entropy_fn = get_entropy_fn;
+ drbg->cleanup_entropy_fn = cleanup_entropy_fn;
+ drbg->get_nonce_fn = get_nonce_fn;
+ drbg->cleanup_nonce_fn = cleanup_nonce_fn;
+ drbg->callback_arg = arg;
+ return 1;
+}
diff --git a/providers/implementations/rands/drbg_ctr.c b/providers/implementations/rands/drbg_ctr.c
new file mode 100644
index 0000000000..14f8b9fbc8
--- /dev/null
+++ b/providers/implementations/rands/drbg_ctr.c
@@ -0,0 +1,743 @@
+/*
+ * Copyright 2011-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include <openssl/aes.h>
+#include "e_os.h" /* strcasecmp */
+#include "crypto/modes.h"
+#include "internal/thread_once.h"
+#include "prov/implementations.h"
+#include "prov/provider_ctx.h"
+#include "prov/providercommonerr.h"
+#include "drbg_local.h"
+
+static OSSL_OP_rand_newctx_fn drbg_ctr_new_wrapper;
+static OSSL_OP_rand_freectx_fn drbg_ctr_free;
+static OSSL_OP_rand_instantiate_fn drbg_ctr_instantiate_wrapper;
+static OSSL_OP_rand_uninstantiate_fn drbg_ctr_uninstantiate_wrapper;
+static OSSL_OP_rand_generate_fn drbg_ctr_generate_wrapper;
+static OSSL_OP_rand_reseed_fn drbg_ctr_reseed_wrapper;
+static OSSL_OP_rand_settable_ctx_params_fn drbg_ctr_settable_ctx_params;
+static OSSL_OP_rand_set_ctx_params_fn drbg_ctr_set_ctx_params;
+static OSSL_OP_rand_gettable_ctx_params_fn drbg_ctr_gettable_ctx_params;
+static OSSL_OP_rand_get_ctx_params_fn drbg_ctr_get_ctx_params;
+static OSSL_OP_rand_verify_zeroization_fn drbg_ctr_verify_zeroization;
+
+/*
+ * The state of a DRBG AES-CTR.
+ */
+typedef struct rand_drbg_ctr_st {
+ EVP_CIPHER_CTX *ctx_ecb;
+ EVP_CIPHER_CTX *ctx_ctr;
+ EVP_CIPHER_CTX *ctx_df;
+ EVP_CIPHER *cipher_ecb;
+ EVP_CIPHER *cipher_ctr;
+ size_t keylen;
+ int use_df;
+ unsigned char K[32];
+ unsigned char V[16];
+ /* Temporary block storage used by ctr_df */
+ unsigned char bltmp[16];
+ size_t bltmp_pos;
+ unsigned char KX[48];
+} PROV_DRBG_CTR;
+
+/*
+ * Implementation of NIST SP 800-90A CTR DRBG.
+ */
+static void inc_128(PROV_DRBG_CTR *ctr)
+{
+ unsigned char *p = &ctr->V[0];
+ u32 n = 16, c = 1;
+
+ do {
+ --n;
+ c += p[n];
+ p[n] = (u8)c;
+ c >>= 8;
+ } while (n);
+}
+
+static void ctr_XOR(PROV_DRBG_CTR *ctr, const unsigned char *in, size_t inlen)
+{
+ size_t i, n;
+
+ if (in == NULL || inlen == 0)
+ return;
+
+ /*
+ * Any zero padding will have no effect on the result as we
+ * are XORing. So just process however much input we have.
+ */
+ n = inlen < ctr->keylen ? inlen : ctr->keylen;
+ for (i = 0; i < n; i++)
+ ctr->K[i] ^= in[i];
+ if (inlen <= ctr->keylen)
+ return;
+
+ n = inlen - ctr->keylen;
+ if (n > 16) {
+ /* Should never happen */
+ n = 16;
+ }
+ for (i = 0; i < n; i++)
+ ctr->V[i] ^= in[i + ctr->keylen];
+}
+
+/*
+ * Process a complete block using BCC algorithm of SP 800-90A 10.3.3
+ */
+__owur static int ctr_BCC_block(PROV_DRBG_CTR *ctr, unsigned char *out,
+ const unsigned char *in, int len)
+{
+ int i, outlen = AES_BLOCK_SIZE;
+
+ for (i = 0; i < len; i++)
+ out[i] ^= in[i];
+
+ if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, len)
+ || outlen != len)
+ return 0;
+ return 1;
+}
+
+
+/*
+ * Handle several BCC operations for as much data as we need for K and X
+ */
+__owur static int ctr_BCC_blocks(PROV_DRBG_CTR *ctr, const unsigned char *in)
+{
+ unsigned char in_tmp[48];
+ unsigned char num_of_blk = 2;
+
+ memcpy(in_tmp, in, 16);
+ memcpy(in_tmp + 16, in, 16);
+ if (ctr->keylen != 16) {
+ memcpy(in_tmp + 32, in, 16);
+ num_of_blk = 3;
+ }
+ return ctr_BCC_block(ctr, ctr->KX, in_tmp, AES_BLOCK_SIZE * num_of_blk);
+}
+
+/*
+ * Initialise BCC blocks: these have the value 0,1,2 in leftmost positions:
+ * see 10.3.1 stage 7.
+ */
+__owur static int ctr_BCC_init(PROV_DRBG_CTR *ctr)
+{
+ unsigned char bltmp[48] = {0};
+ unsigned char num_of_blk;
+
+ memset(ctr->KX, 0, 48);
+ num_of_blk = ctr->keylen == 16 ? 2 : 3;
+ bltmp[(AES_BLOCK_SIZE * 1) + 3] = 1;
+ bltmp[(AES_BLOCK_SIZE * 2) + 3] = 2;
+ return ctr_BCC_block(ctr, ctr->KX, bltmp, num_of_blk * AES_BLOCK_SIZE);
+}
+
+/*
+ * Process several blocks into BCC algorithm, some possibly partial
+ */
+__owur static int ctr_BCC_update(PROV_DRBG_CTR *ctr,
+ const unsigned char *in, size_t inlen)
+{
+ if (in == NULL || inlen == 0)
+ return 1;
+
+ /* If we have partial block handle it first */
+ if (ctr->bltmp_pos) {
+ size_t left = 16 - ctr->bltmp_pos;
+
+ /* If we now have a complete block process it */
+ if (inlen >= left) {
+ memcpy(ctr->bltmp + ctr->bltmp_pos, in, left);
+ if (!ctr_BCC_blocks(ctr, ctr->bltmp))
+ return 0;
+ ctr->bltmp_pos = 0;
+ inlen -= left;
+ in += left;
+ }
+ }
+
+ /* Process zero or more complete blocks */
+ for (; inlen >= 16; in += 16, inlen -= 16) {
+ if (!ctr_BCC_blocks(ctr, in))
+ return 0;
+ }
+
+ /* Copy any remaining partial block to the temporary buffer */
+ if (inlen > 0) {
+ memcpy(ctr->bltmp + ctr->bltmp_pos, in, inlen);
+ ctr->bltmp_pos += inlen;
+ }
+ return 1;
+}
+
+__owur static int ctr_BCC_final(PROV_DRBG_CTR *ctr)
+{
+ if (ctr->bltmp_pos) {
+ memset(ctr->bltmp + ctr->bltmp_pos, 0, 16 - ctr->bltmp_pos);
+ if (!ctr_BCC_blocks(ctr, ctr->bltmp))
+ return 0;
+ }
+ return 1;
+}
+
+__owur static int ctr_df(PROV_DRBG_CTR *ctr,
+ const unsigned char *in1, size_t in1len,
+ const unsigned char *in2, size_t in2len,
+ const unsigned char *in3, size_t in3len)
+{
+ static unsigned char c80 = 0x80;
+ size_t inlen;
+ unsigned char *p = ctr->bltmp;
+ int outlen = AES_BLOCK_SIZE;
+
+ if (!ctr_BCC_init(ctr))
+ return 0;
+ if (in1 == NULL)
+ in1len = 0;
+ if (in2 == NULL)
+ in2len = 0;
+ if (in3 == NULL)
+ in3len = 0;
+ inlen = in1len + in2len + in3len;
+ /* Initialise L||N in temporary block */
+ *p++ = (inlen >> 24) & 0xff;
+ *p++ = (inlen >> 16) & 0xff;
+ *p++ = (inlen >> 8) & 0xff;
+ *p++ = inlen & 0xff;
+
+ /* NB keylen is at most 32 bytes */
+ *p++ = 0;
+ *p++ = 0;
+ *p++ = 0;
+ *p = (unsigned char)((ctr->keylen + 16) & 0xff);
+ ctr->bltmp_pos = 8;
+ if (!ctr_BCC_update(ctr, in1, in1len)
+ || !ctr_BCC_update(ctr, in2, in2len)
+ || !ctr_BCC_update(ctr, in3, in3len)
+ || !ctr_BCC_update(ctr, &c80, 1)
+ || !ctr_BCC_final(ctr))
+ return 0;
+ /* Set up key K */
+ if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->KX, NULL, -1))
+ return 0;
+ /* X follows key K */
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX, &outlen, ctr->KX + ctr->keylen,
+ AES_BLOCK_SIZE)
+ || outlen != AES_BLOCK_SIZE)
+ return 0;
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 16, &outlen, ctr->KX,
+ AES_BLOCK_SIZE)
+ || outlen != AES_BLOCK_SIZE)
+ return 0;
+ if (ctr->keylen != 16)
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 32, &outlen,
+ ctr->KX + 16, AES_BLOCK_SIZE)
+ || outlen != AES_BLOCK_SIZE)
+ return 0;
+ return 1;
+}
+
+/*
+ * NB the no-df Update in SP800-90A specifies a constant input length
+ * of seedlen, however other uses of this algorithm pad the input with
+ * zeroes if necessary and have up to two parameters XORed together,
+ * so we handle both cases in this function instead.
+ */
+__owur static int ctr_update(PROV_DRBG *drbg,
+ const unsigned char *in1, size_t in1len,
+ const unsigned char *in2, size_t in2len,
+ const unsigned char *nonce, size_t noncelen)
+{
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+ int outlen = AES_BLOCK_SIZE;
+ unsigned char V_tmp[48], out[48];
+ unsigned char len;
+
+ /* correct key is already set up. */
+ memcpy(V_tmp, ctr->V, 16);
+ inc_128(ctr);
+ memcpy(V_tmp + 16, ctr->V, 16);
+ if (ctr->keylen == 16) {
+ len = 32;
+ } else {
+ inc_128(ctr);
+ memcpy(V_tmp + 32, ctr->V, 16);
+ len = 48;
+ }
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, out, &outlen, V_tmp, len)
+ || outlen != len)
+ return 0;
+ memcpy(ctr->K, out, ctr->keylen);
+ memcpy(ctr->V, out + ctr->keylen, 16);
+
+ if (ctr->use_df) {
+ /* If no input reuse existing derived value */
+ if (in1 != NULL || nonce != NULL || in2 != NULL)
+ if (!ctr_df(ctr, in1, in1len, nonce, noncelen, in2, in2len))
+ return 0;
+ /* If this a reuse input in1len != 0 */
+ if (in1len)
+ ctr_XOR(ctr, ctr->KX, drbg->seedlen);
+ } else {
+ ctr_XOR(ctr, in1, in1len);
+ ctr_XOR(ctr, in2, in2len);
+ }
+
+ if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1)
+ || !EVP_CipherInit_ex(ctr->ctx_ctr, NULL, NULL, ctr->K, NULL, -1))
+ return 0;
+ return 1;
+}
+
+static int drbg_ctr_instantiate(PROV_DRBG *drbg,
+ const unsigned char *entropy, size_t entropylen,
+ const unsigned char *nonce, size_t noncelen,
+ const unsigned char *pers, size_t perslen)
+{
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+
+ if (entropy == NULL)
+ return 0;
+
+ memset(ctr->K, 0, sizeof(ctr->K));
+ memset(ctr->V, 0, sizeof(ctr->V));
+ if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1))
+ return 0;
+
+ inc_128(ctr);
+ if (!ctr_update(drbg, entropy, entropylen, pers, perslen, nonce, noncelen))
+ return 0;
+ return 1;
+}
+
+static int drbg_ctr_instantiate_wrapper(void *vdrbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr,
+ size_t pstr_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_instantiate(drbg, strength, prediction_resistance,
+ pstr, pstr_len);
+}
+
+static int drbg_ctr_reseed(PROV_DRBG *drbg,
+ const unsigned char *entropy, size_t entropylen,
+ const unsigned char *adin, size_t adinlen)
+{
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+
+ if (entropy == NULL)
+ return 0;
+
+ inc_128(ctr);
+ if (!ctr_update(drbg, entropy, entropylen, adin, adinlen, NULL, 0))
+ return 0;
+ return 1;
+}
+
+static int drbg_ctr_reseed_wrapper(void *vdrbg, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_reseed(drbg, prediction_resistance, ent, ent_len,
+ adin, adin_len);
+}
+
+static void ctr96_inc(unsigned char *counter)
+{
+ u32 n = 12, c = 1;
+
+ do {
+ --n;
+ c += counter[n];
+ counter[n] = (u8)c;
+ c >>= 8;
+ } while (n);
+}
+
+static int drbg_ctr_generate(PROV_DRBG *drbg,
+ unsigned char *out, size_t outlen,
+ const unsigned char *adin, size_t adinlen)
+{
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+ unsigned int ctr32, blocks;
+ int outl, buflen;
+
+ if (adin != NULL && adinlen != 0) {
+ inc_128(ctr);
+
+ if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
+ return 0;
+ /* This means we reuse derived value */
+ if (ctr->use_df) {
+ adin = NULL;
+ adinlen = 1;
+ }
+ } else {
+ adinlen = 0;
+ }
+
+ inc_128(ctr);
+
+ if (outlen == 0) {
+ inc_128(ctr);
+
+ if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
+ return 0;
+ return 1;
+ }
+
+ memset(out, 0, outlen);
+
+ do {
+ if (!EVP_CipherInit_ex(ctr->ctx_ctr,
+ NULL, NULL, NULL, ctr->V, -1))
+ return 0;
+
+ /*-
+ * outlen has type size_t while EVP_CipherUpdate takes an
+ * int argument and thus cannot be guaranteed to process more
+ * than 2^31-1 bytes at a time. We process such huge generate
+ * requests in 2^30 byte chunks, which is the greatest multiple
+ * of AES block size lower than or equal to 2^31-1.
+ */
+ buflen = outlen > (1U << 30) ? (1U << 30) : outlen;
+ blocks = (buflen + 15) / 16;
+
+ ctr32 = GETU32(ctr->V + 12) + blocks;
+ if (ctr32 < blocks) {
+ /* 32-bit counter overflow into V. */
+ if (ctr32 != 0) {
+ blocks -= ctr32;
+ buflen = blocks * 16;
+ ctr32 = 0;
+ }
+ ctr96_inc(ctr->V);
+ }
+ PUTU32(ctr->V + 12, ctr32);
+
+ if (!EVP_CipherUpdate(ctr->ctx_ctr, out, &outl, out, buflen)
+ || outl != buflen)
+ return 0;
+
+ out += buflen;
+ outlen -= buflen;
+ } while (outlen);
+
+ if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
+ return 0;
+ return 1;
+}
+
+static int drbg_ctr_generate_wrapper
+ (void *vdrbg, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *adin, size_t adin_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_generate(drbg, out, outlen, strength,
+ prediction_resistance, adin, adin_len);
+}
+
+static int drbg_ctr_uninstantiate(PROV_DRBG *drbg)
+{
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+
+ OPENSSL_cleanse(ctr->K, sizeof(ctr->K));
+ OPENSSL_cleanse(ctr->V, sizeof(ctr->V));
+ OPENSSL_cleanse(ctr->bltmp, sizeof(ctr->bltmp));
+ OPENSSL_cleanse(ctr->KX, sizeof(ctr->KX));
+ ctr->bltmp_pos = 0;
+ return PROV_DRBG_uninstantiate(drbg);
+}
+
+static int drbg_ctr_uninstantiate_wrapper(void *vdrbg)
+{
+ return drbg_ctr_uninstantiate((PROV_DRBG *)vdrbg);
+}
+
+static int drbg_ctr_verify_zeroization(void *vdrbg)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+
+ PROV_DRBG_VERYIFY_ZEROIZATION(ctr->K);
+ PROV_DRBG_VERYIFY_ZEROIZATION(ctr->V);
+ PROV_DRBG_VERYIFY_ZEROIZATION(ctr->bltmp);
+ PROV_DRBG_VERYIFY_ZEROIZATION(ctr->KX);
+ if (ctr->bltmp_pos != 0)
+ return 0;
+ return 1;
+}
+
+static int drbg_ctr_init_lengths(PROV_DRBG *drbg)
+{
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+ int res = 1;
+
+#ifdef FIPS_MODULE
+ if (!ctr->use_df) {
+ PROVerr(0, RAND_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS);
+ ctr->use_df = 1;
+ res = 0;
+ }
+#endif
+ /* Maximum number of bits per request = 2^19 = 2^16 bytes */
+ drbg->max_request = 1 << 16;
+ if (ctr->use_df) {
+ drbg->min_entropylen = 0;
+ drbg->max_entropylen = DRBG_MAX_LENGTH;
+ drbg->min_noncelen = 0;
+ drbg->max_noncelen = DRBG_MAX_LENGTH;
+ drbg->max_perslen = DRBG_MAX_LENGTH;
+ drbg->max_adinlen = DRBG_MAX_LENGTH;
+
+ if (ctr->keylen > 0) {
+ drbg->min_entropylen = ctr->keylen;
+ drbg->min_noncelen = drbg->min_entropylen / 2;
+ }
+ } else {
+ const size_t len = ctr->keylen > 0 ? drbg->seedlen : DRBG_MAX_LENGTH;
+
+ drbg->min_entropylen = len;
+ drbg->max_entropylen = len;
+ /* Nonce not used */
+ drbg->min_noncelen = 0;
+ drbg->max_noncelen = 0;
+ drbg->max_perslen = len;
+ drbg->max_adinlen = len;
+ }
+ return res;
+}
+
+static int drbg_ctr_init(PROV_DRBG *drbg)
+{
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
+ const size_t keylen = EVP_CIPHER_key_length(ctr->cipher_ctr);
+
+ ctr->keylen = keylen;
+ if (ctr->ctx_ecb == NULL)
+ ctr->ctx_ecb = EVP_CIPHER_CTX_new();
+ if (ctr->ctx_ctr == NULL)
+ ctr->ctx_ctr = EVP_CIPHER_CTX_new();
+ if (ctr->ctx_ecb == NULL || ctr->ctx_ctr == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ if (ctr->cipher_ctr != NULL) {
+ if (!EVP_CipherInit_ex(ctr->ctx_ecb,
+ ctr->cipher_ecb, NULL, NULL, NULL, 1)
+ || !EVP_CipherInit_ex(ctr->ctx_ctr,
+ ctr->cipher_ctr, NULL, NULL, NULL, 1)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_INITIALISE_CIPHERS);
+ goto err;
+ }
+
+ drbg->strength = keylen * 8;
+ drbg->seedlen = keylen + 16;
+
+ if (ctr->use_df) {
+ /* df initialisation */
+ static const unsigned char df_key[32] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
+ };
+
+ if (ctr->ctx_df == NULL)
+ ctr->ctx_df = EVP_CIPHER_CTX_new();
+ if (ctr->ctx_df == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ /* Set key schedule for df_key */
+ if (!EVP_CipherInit_ex(ctr->ctx_df,
+ ctr->cipher_ecb, NULL, df_key, NULL, 1)) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED);
+ goto err;
+ }
+ }
+ }
+ return drbg_ctr_init_lengths(drbg);
+
+err:
+ EVP_CIPHER_CTX_free(ctr->ctx_ecb);
+ EVP_CIPHER_CTX_free(ctr->ctx_ctr);
+ ctr->ctx_ecb = ctr->ctx_ctr = NULL;
+ return 0;
+}
+
+static int drbg_ctr_new(PROV_DRBG *drbg)
+{
+ PROV_DRBG_CTR *ctr;
+
+ ctr = OPENSSL_secure_zalloc(sizeof(*ctr));
+ if (ctr == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+
+ ctr->use_df = 1;
+ drbg->data = ctr;
+ return drbg_ctr_init_lengths(drbg);
+}
+
+static void *drbg_ctr_new_wrapper(void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_dispatch)
+{
+ return prov_rand_drbg_new(provctx, parent, parent_dispatch, &drbg_ctr_new,
+ &drbg_ctr_instantiate, &drbg_ctr_uninstantiate,
+ &drbg_ctr_reseed, &drbg_ctr_generate);
+}
+
+static void drbg_ctr_free(void *vdrbg)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_DRBG_CTR *ctr;
+
+ if (drbg != NULL && (ctr = (PROV_DRBG_CTR *)drbg->data) != NULL) {
+ EVP_CIPHER_CTX_free(ctr->ctx_ecb);
+ EVP_CIPHER_CTX_free(ctr->ctx_ctr);
+ EVP_CIPHER_CTX_free(ctr->ctx_df);
+ EVP_CIPHER_free(ctr->cipher_ecb);
+ EVP_CIPHER_free(ctr->cipher_ctr);
+
+ OPENSSL_secure_clear_free(ctr, sizeof(*ctr));
+ }
+ prov_rand_drbg_free(drbg);
+}
+
+static int drbg_ctr_get_ctx_params(void *vdrbg, OSSL_PARAM params[])
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return drbg_get_ctx_params(drbg, params);
+}
+
+static const OSSL_PARAM *drbg_ctr_gettable_ctx_params(void)
+{
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
+ OSSL_PARAM_DRBG_GETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_gettable_ctx_params;
+}
+
+static int drbg_ctr_set_ctx_params(void *vctx, const OSSL_PARAM params[])
+{
+ PROV_DRBG *ctx = (PROV_DRBG *)vctx;
+ PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)ctx->data;
+ OPENSSL_CTX *libctx = PROV_LIBRARY_CONTEXT_OF(ctx->provctx);
+ const OSSL_PARAM *p;
+ char *ecb;
+ const char *propquery = NULL;
+ int i, cipher_init = 0;
+
+ if ((p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_USE_DF)) != NULL
+ && OSSL_PARAM_get_int(p, &i)) {
+ /* FIPS errors out in the drbg_ctr_init() call later */
+ ctr->use_df = i != 0;
+ cipher_init = 1;
+ }
+
+ if ((p = OSSL_PARAM_locate_const(params,
+ OSSL_DRBG_PARAM_PROPERTIES)) != NULL) {
+ if (p->data_type != OSSL_PARAM_UTF8_STRING)
+ return 0;
+ propquery = (const char *)p->data;
+ }
+
+ if ((p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_CIPHER)) != NULL) {
+ const char *base = (const char *)p->data;
+
+ if (p->data_type != OSSL_PARAM_UTF8_STRING
+ || p->data_size < 3)
+ return 0;
+ if (strcasecmp("CTR", base + p->data_size - sizeof("CTR")) != 0) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_REQUIRE_CTR_MODE_CIPHER);
+ return 0;
+ }
+ if ((ecb = OPENSSL_strdup(base)) == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ strcpy(ecb + p->data_size - sizeof("ECB"), "ECB");
+ EVP_CIPHER_free(ctr->cipher_ecb);
+ EVP_CIPHER_free(ctr->cipher_ctr);
+ ctr->cipher_ctr = EVP_CIPHER_fetch(libctx, base, propquery);
+ ctr->cipher_ecb = EVP_CIPHER_fetch(libctx, ecb, propquery);
+ OPENSSL_free(ecb);
+ if (ctr->cipher_ctr == NULL || ctr->cipher_ecb == NULL) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_FIND_CIPHERS);
+ return 0;
+ }
+ cipher_init = 1;
+ }
+
+ if (cipher_init && !drbg_ctr_init(ctx))
+ return 0;
+
+ return drbg_set_ctx_params(ctx, params);
+}
+
+static const OSSL_PARAM *drbg_ctr_settable_ctx_params(void)
+{
+ static const OSSL_PARAM known_settable_ctx_params[] = {
+ OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_PROPERTIES, NULL, 0),
+ OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_CIPHER, NULL, 0),
+#ifndef FIPS_MODULE
+ /*
+ * Don't advertise this for FIPS, it isn't allowed to change.
+ * The parameter can still be passed and will be processed but errors
+ * out.
+ */
+ OSSL_PARAM_int(OSSL_DRBG_PARAM_USE_DF, NULL),
+#endif
+ OSSL_PARAM_DRBG_SETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_settable_ctx_params;
+}
+
+const OSSL_DISPATCH drbg_ctr_functions[] = {
+ { OSSL_FUNC_RAND_NEWCTX, (void(*)(void))drbg_ctr_new_wrapper },
+ { OSSL_FUNC_RAND_FREECTX, (void(*)(void))drbg_ctr_free },
+ { OSSL_FUNC_RAND_INSTANTIATE,
+ (void(*)(void))drbg_ctr_instantiate_wrapper },
+ { OSSL_FUNC_RAND_UNINSTANTIATE,
+ (void(*)(void))drbg_ctr_uninstantiate_wrapper },
+ { OSSL_FUNC_RAND_GENERATE, (void(*)(void))drbg_ctr_generate_wrapper },
+ { OSSL_FUNC_RAND_RESEED, (void(*)(void))drbg_ctr_reseed_wrapper },
+ { OSSL_FUNC_RAND_ENABLE_LOCKING, (void(*)(void))drbg_enable_locking },
+ { OSSL_FUNC_RAND_LOCK, (void(*)(void))drbg_lock },
+ { OSSL_FUNC_RAND_UNLOCK, (void(*)(void))drbg_unlock },
+ { OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS,
+ (void(*)(void))drbg_ctr_settable_ctx_params },
+ { OSSL_FUNC_RAND_SET_CTX_PARAMS, (void(*)(void))drbg_ctr_set_ctx_params },
+ { OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS,
+ (void(*)(void))drbg_ctr_gettable_ctx_params },
+ { OSSL_FUNC_RAND_GET_CTX_PARAMS, (void(*)(void))drbg_ctr_get_ctx_params },
+ { OSSL_FUNC_RAND_SET_CALLBACKS, (void(*)(void))drbg_set_callbacks },
+ { OSSL_FUNC_RAND_VERIFY_ZEROIZATION,
+ (void(*)(void))drbg_ctr_verify_zeroization },
+ { 0, NULL }
+};
diff --git a/crypto/rand/drbg_hash.c b/providers/implementations/rands/drbg_hash.c
similarity index 51%
rename from crypto/rand/drbg_hash.c
rename to providers/implementations/rands/drbg_hash.c
index f087d88965..62a976827a 100644
--- a/crypto/rand/drbg_hash.c
+++ b/providers/implementations/rands/drbg_hash.c
@@ -10,19 +10,50 @@
#include <assert.h>
#include <stdlib.h>
#include <string.h>
+#include <openssl/sha.h>
#include <openssl/crypto.h>
#include <openssl/err.h>
#include <openssl/rand.h>
+#include <openssl/core_numbers.h>
#include "internal/thread_once.h"
#include "prov/providercommon.h"
-#include "rand_local.h"
+#include "prov/provider_ctx.h"
+#include "prov/provider_util.h"
+#include "prov/implementations.h"
+#include "prov/providercommonerr.h"
+#include "drbg_local.h"
+
+static OSSL_OP_rand_newctx_fn drbg_hash_new_wrapper;
+static OSSL_OP_rand_freectx_fn drbg_hash_free;
+static OSSL_OP_rand_instantiate_fn drbg_hash_instantiate_wrapper;
+static OSSL_OP_rand_uninstantiate_fn drbg_hash_uninstantiate_wrapper;
+static OSSL_OP_rand_generate_fn drbg_hash_generate_wrapper;
+static OSSL_OP_rand_reseed_fn drbg_hash_reseed_wrapper;
+static OSSL_OP_rand_settable_ctx_params_fn drbg_hash_settable_ctx_params;
+static OSSL_OP_rand_set_ctx_params_fn drbg_hash_set_ctx_params;
+static OSSL_OP_rand_gettable_ctx_params_fn drbg_hash_gettable_ctx_params;
+static OSSL_OP_rand_get_ctx_params_fn drbg_hash_get_ctx_params;
+static OSSL_OP_rand_verify_zeroization_fn drbg_hash_verify_zeroization;
+
+/* 888 bits from SP800-90Ar1 10.1 table 2 */
+#define HASH_PRNG_MAX_SEEDLEN (888/8)
/* 440 bits from SP800-90Ar1 10.1 table 2 */
#define HASH_PRNG_SMALL_SEEDLEN (440/8)
+
/* Determine what seedlen to use based on the block length */
#define MAX_BLOCKLEN_USING_SMALL_SEEDLEN (256/8)
#define INBYTE_IGNORE ((unsigned char)0xFF)
+typedef struct rand_drbg_hash_st {
+ PROV_DIGEST digest;
+ EVP_MD_CTX *ctx;
+ size_t blocklen;
+ unsigned char V[HASH_PRNG_MAX_SEEDLEN];
+ unsigned char C[HASH_PRNG_MAX_SEEDLEN];
+ /* Temporary value storage: should always exceed max digest length */
+ unsigned char vtmp[HASH_PRNG_MAX_SEEDLEN];
+} PROV_DRBG_HASH;
/*
* SP800-90Ar1 10.3.1 Derivation function using a Hash Function (Hash_df).
@@ -33,13 +64,13 @@
* in3 - optional input string (Can be NULL).
* These are concatenated as part of the DigestUpdate process.
*/
-static int hash_df(RAND_DRBG *drbg, unsigned char *out,
+static int hash_df(PROV_DRBG *drbg, unsigned char *out,
const unsigned char inbyte,
const unsigned char *in, size_t inlen,
const unsigned char *in2, size_t in2len,
const unsigned char *in3, size_t in3len)
{
- RAND_DRBG_HASH *hash = &drbg->data.hash;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
EVP_MD_CTX *ctx = hash->ctx;
unsigned char *vtmp = hash->vtmp;
/* tmp = counter || num_bits_returned || [inbyte] */
@@ -69,7 +100,7 @@ static int hash_df(RAND_DRBG *drbg, unsigned char *out,
* (Step 4.1) out = out || Hash(tmp || in || [in2] || [in3])
* (where tmp = counter || num_bits_returned || [inbyte])
*/
- if (!(EVP_DigestInit_ex(ctx, hash->md, NULL)
+ if (!(EVP_DigestInit_ex(ctx, ossl_prov_digest_md(&hash->digest), NULL)
&& EVP_DigestUpdate(ctx, tmp, tmp_sz)
&& EVP_DigestUpdate(ctx, in, inlen)
&& (in2 == NULL || EVP_DigestUpdate(ctx, in2, in2len))
@@ -97,7 +128,7 @@ static int hash_df(RAND_DRBG *drbg, unsigned char *out,
}
/* Helper function that just passes 2 input parameters to hash_df() */
-static int hash_df1(RAND_DRBG *drbg, unsigned char *out,
+static int hash_df1(PROV_DRBG *drbg, unsigned char *out,
const unsigned char in_byte,
const unsigned char *in1, size_t in1len)
{
@@ -110,7 +141,7 @@ static int hash_df1(RAND_DRBG *drbg, unsigned char *out,
* The final carry is ignored i.e: dst = (dst + in) mod (2^seedlen_bits).
* where dst size is drbg->seedlen, and inlen <= drbg->seedlen.
*/
-static int add_bytes(RAND_DRBG *drbg, unsigned char *dst,
+static int add_bytes(PROV_DRBG *drbg, unsigned char *dst,
unsigned char *in, size_t inlen)
{
size_t i;
@@ -141,13 +172,13 @@ static int add_bytes(RAND_DRBG *drbg, unsigned char *dst,
}
/* V = (V + Hash(inbyte || V || [additional_input]) mod (2^seedlen) */
-static int add_hash_to_v(RAND_DRBG *drbg, unsigned char inbyte,
+static int add_hash_to_v(PROV_DRBG *drbg, unsigned char inbyte,
const unsigned char *adin, size_t adinlen)
{
- RAND_DRBG_HASH *hash = &drbg->data.hash;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
EVP_MD_CTX *ctx = hash->ctx;
- return EVP_DigestInit_ex(ctx, hash->md, NULL)
+ return EVP_DigestInit_ex(ctx, ossl_prov_digest_md(&hash->digest), NULL)
&& EVP_DigestUpdate(ctx, &inbyte, 1)
&& EVP_DigestUpdate(ctx, hash->V, drbg->seedlen)
&& (adin == NULL || EVP_DigestUpdate(ctx, adin, adinlen))
@@ -173,16 +204,17 @@ static int add_hash_to_v(RAND_DRBG *drbg, unsigned char inbyte,
*
* Returns zero if an error occurs otherwise it returns 1.
*/
-static int hash_gen(RAND_DRBG *drbg, unsigned char *out, size_t outlen)
+static int hash_gen(PROV_DRBG *drbg, unsigned char *out, size_t outlen)
{
- RAND_DRBG_HASH *hash = &drbg->data.hash;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
unsigned char one = 1;
if (outlen == 0)
return 1;
memcpy(hash->vtmp, hash->V, drbg->seedlen);
for(;;) {
- if (!EVP_DigestInit_ex(hash->ctx, hash->md, NULL)
+ if (!EVP_DigestInit_ex(hash->ctx, ossl_prov_digest_md(&hash->digest),
+ NULL)
|| !EVP_DigestUpdate(hash->ctx, hash->vtmp, drbg->seedlen))
return 0;
@@ -213,20 +245,35 @@ static int hash_gen(RAND_DRBG *drbg, unsigned char *out, size_t outlen)
*
* Returns zero if an error occurs otherwise it returns 1.
*/
-static int drbg_hash_instantiate(RAND_DRBG *drbg,
+static int drbg_hash_instantiate(PROV_DRBG *drbg,
const unsigned char *ent, size_t ent_len,
const unsigned char *nonce, size_t nonce_len,
const unsigned char *pstr, size_t pstr_len)
{
- RAND_DRBG_HASH *hash = &drbg->data.hash;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
+
+ EVP_MD_CTX_free(hash->ctx);
+ hash->ctx = EVP_MD_CTX_new();
/* (Step 1-3) V = Hash_df(entropy||nonce||pers, seedlen) */
- return hash_df(drbg, hash->V, INBYTE_IGNORE,
- ent, ent_len, nonce, nonce_len, pstr, pstr_len)
+ return hash->ctx != NULL
+ && hash_df(drbg, hash->V, INBYTE_IGNORE,
+ ent, ent_len, nonce, nonce_len, pstr, pstr_len)
/* (Step 4) C = Hash_df(0x00||V, seedlen) */
&& hash_df1(drbg, hash->C, 0x00, hash->V, drbg->seedlen);
}
+static int drbg_hash_instantiate_wrapper(void *vdrbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr,
+ size_t pstr_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_instantiate(drbg, strength, prediction_resistance,
+ pstr, pstr_len);
+}
+
/*
* SP800-90Ar1 10.1.1.3 Hash_DRBG_Reseed_Process:
*
@@ -235,13 +282,13 @@ static int drbg_hash_instantiate(RAND_DRBG *drbg,
*
* Returns zero if an error occurs otherwise it returns 1.
*/
-static int drbg_hash_reseed(RAND_DRBG *drbg,
+static int drbg_hash_reseed(PROV_DRBG *drbg,
const unsigned char *ent, size_t ent_len,
const unsigned char *adin, size_t adin_len)
{
- RAND_DRBG_HASH *hash = &drbg->data.hash;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
- /* (Step 1-2) V = Hash_df(0x01 || V || entropy_input || additional_input)*/
+ /* (Step 1-2) V = Hash_df(0x01 || V || entropy_input || additional_input) */
/* V about to be updated so use C as output instead */
if (!hash_df(drbg, hash->C, 0x01, hash->V, drbg->seedlen, ent, ent_len,
adin, adin_len))
@@ -251,6 +298,16 @@ static int drbg_hash_reseed(RAND_DRBG *drbg,
return hash_df1(drbg, hash->C, 0x00, hash->V, drbg->seedlen);
}
+static int drbg_hash_reseed_wrapper(void *vdrbg, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_reseed(drbg, prediction_resistance, ent, ent_len,
+ adin, adin_len);
+}
+
/*
* SP800-90Ar1 10.1.1.4 Hash_DRBG_Generate_Process:
*
@@ -260,11 +317,11 @@ static int drbg_hash_reseed(RAND_DRBG *drbg,
*
* Returns zero if an error occurs otherwise it returns 1.
*/
-static int drbg_hash_generate(RAND_DRBG *drbg,
+static int drbg_hash_generate(PROV_DRBG *drbg,
unsigned char *out, size_t outlen,
const unsigned char *adin, size_t adin_len)
{
- RAND_DRBG_HASH *hash = &drbg->data.hash;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
unsigned char counter[4];
int reseed_counter = drbg->reseed_gen_counter;
@@ -273,10 +330,11 @@ static int drbg_hash_generate(RAND_DRBG *drbg,
counter[2] = (unsigned char)((reseed_counter >> 8) & 0xff);
counter[3] = (unsigned char)(reseed_counter & 0xff);
- return (adin == NULL
+ return hash->ctx != NULL
+ && (adin == NULL
/* (Step 2) if adin != NULL then V = V + Hash(0x02||V||adin) */
- || adin_len == 0
- || add_hash_to_v(drbg, 0x02, adin, adin_len))
+ || adin_len == 0
+ || add_hash_to_v(drbg, 0x02, adin, adin_len))
/* (Step 3) Hashgen(outlen, V) */
&& hash_gen(drbg, out, outlen)
/* (Step 4/5) H = V = (V + Hash(0x03||V) mod (2^seedlen_bits) */
@@ -288,73 +346,167 @@ static int drbg_hash_generate(RAND_DRBG *drbg,
&& add_bytes(drbg, hash->V, counter, 4);
}
-static int drbg_hash_uninstantiate(RAND_DRBG *drbg)
+static int drbg_hash_generate_wrapper
+ (void *vdrbg, unsigned char *out, size_t outlen, unsigned int strength,
+ int prediction_resistance, const unsigned char *adin, size_t adin_len)
{
- EVP_MD_free(drbg->data.hash.md);
- EVP_MD_CTX_free(drbg->data.hash.ctx);
- OPENSSL_cleanse(&drbg->data.hash, sizeof(drbg->data.hash));
- return 1;
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_generate(drbg, out, outlen, strength,
+ prediction_resistance, adin, adin_len);
}
-static RAND_DRBG_METHOD drbg_hash_meth = {
- drbg_hash_instantiate,
- drbg_hash_reseed,
- drbg_hash_generate,
- drbg_hash_uninstantiate
-};
+static int drbg_hash_uninstantiate(PROV_DRBG *drbg)
+{
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
-int drbg_hash_init(RAND_DRBG *drbg)
+ OPENSSL_cleanse(hash->V, sizeof(hash->V));
+ OPENSSL_cleanse(hash->C, sizeof(hash->C));
+ OPENSSL_cleanse(hash->vtmp, sizeof(hash->vtmp));
+ return PROV_DRBG_uninstantiate(drbg);
+}
+
+static int drbg_hash_uninstantiate_wrapper(void *vdrbg)
{
- EVP_MD *md;
- RAND_DRBG_HASH *hash = &drbg->data.hash;
+ return drbg_hash_uninstantiate((PROV_DRBG *)vdrbg);
+}
- /*
- * Confirm digest is allowed. We allow all digests that are not XOF
- * (such as SHAKE). In FIPS mode, the fetch will fail for non-approved
- * digests.
- */
- md = EVP_MD_fetch(drbg->libctx, ossl_prov_util_nid_to_name(drbg->type), "");
- if (md == NULL)
- return 0;
+static int drbg_hash_verify_zeroization(void *vdrbg)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)drbg->data;
- if ((EVP_MD_flags(md) & EVP_MD_FLAG_XOF) != 0)
+ PROV_DRBG_VERYIFY_ZEROIZATION(hash->V);
+ PROV_DRBG_VERYIFY_ZEROIZATION(hash->C);
+ PROV_DRBG_VERYIFY_ZEROIZATION(hash->vtmp);
+ return 1;
+}
+
+static int drbg_hash_new(PROV_DRBG *ctx)
+{
+ PROV_DRBG_HASH *hash;
+
+ hash = OPENSSL_secure_zalloc(sizeof(*hash));
+ if (hash == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
return 0;
+ }
- drbg->meth = &drbg_hash_meth;
+ ctx->data = hash;
+ ctx->seedlen = HASH_PRNG_MAX_SEEDLEN;
+ ctx->max_entropylen = DRBG_MAX_LENGTH;
+ ctx->max_noncelen = DRBG_MAX_LENGTH;
+ ctx->max_perslen = DRBG_MAX_LENGTH;
+ ctx->max_adinlen = DRBG_MAX_LENGTH;
- if (hash->ctx == NULL) {
- hash->ctx = EVP_MD_CTX_new();
- if (hash->ctx == NULL) {
- EVP_MD_free(md);
- return 0;
- }
+ /* Maximum number of bits per request = 2^19 = 2^16 bytes */
+ ctx->max_request = 1 << 16;
+ return 1;
+}
+
+static void *drbg_hash_new_wrapper(void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_dispatch)
+{
+ return prov_rand_drbg_new(provctx, parent, parent_dispatch, &drbg_hash_new,
+ &drbg_hash_instantiate, &drbg_hash_uninstantiate,
+ &drbg_hash_reseed, &drbg_hash_generate);
+}
+
+static void drbg_hash_free(void *vdrbg)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_DRBG_HASH *hash;
+
+ if (drbg != NULL && (hash = (PROV_DRBG_HASH *)drbg->data) != NULL) {
+ EVP_MD_CTX_free(hash->ctx);
+ ossl_prov_digest_reset(&hash->digest);
+ OPENSSL_secure_clear_free(hash, sizeof(*hash));
}
+ prov_rand_drbg_free(drbg);
+}
+
+static int drbg_hash_get_ctx_params(void *vdrbg, OSSL_PARAM params[])
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return drbg_get_ctx_params(drbg, params);
+}
- EVP_MD_free(hash->md);
- hash->md = md;
+static const OSSL_PARAM *drbg_hash_gettable_ctx_params(void)
+{
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
+ OSSL_PARAM_DRBG_GETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_gettable_ctx_params;
+}
- /* These are taken from SP 800-90 10.1 Table 2 */
- hash->blocklen = EVP_MD_size(md);
- /* See SP800-57 Part1 Rev4 5.6.1 Table 3 */
- drbg->strength = 64 * (hash->blocklen >> 3);
- if (drbg->strength > 256)
- drbg->strength = 256;
- if (hash->blocklen > MAX_BLOCKLEN_USING_SMALL_SEEDLEN)
- drbg->seedlen = HASH_PRNG_MAX_SEEDLEN;
- else
- drbg->seedlen = HASH_PRNG_SMALL_SEEDLEN;
+static int drbg_hash_set_ctx_params(void *vctx, const OSSL_PARAM params[])
+{
+ PROV_DRBG *ctx = (PROV_DRBG *)vctx;
+ PROV_DRBG_HASH *hash = (PROV_DRBG_HASH *)ctx->data;
+ OPENSSL_CTX *libctx = PROV_LIBRARY_CONTEXT_OF(ctx->provctx);
+ const EVP_MD *md;
- drbg->min_entropylen = drbg->strength / 8;
- drbg->max_entropylen = DRBG_MAX_LENGTH;
+ if (!ossl_prov_digest_load_from_params(&hash->digest, params, libctx))
+ return 0;
- drbg->min_noncelen = drbg->min_entropylen / 2;
- drbg->max_noncelen = DRBG_MAX_LENGTH;
+ md = ossl_prov_digest_md(&hash->digest);
+ if (md != NULL) {
+ if ((EVP_MD_flags(md) & EVP_MD_FLAG_XOF) != 0) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_XOF_DIGESTS_NOT_ALLOWED);
+ return 0;
+ }
- drbg->max_perslen = DRBG_MAX_LENGTH;
- drbg->max_adinlen = DRBG_MAX_LENGTH;
+ /* These are taken from SP 800-90 10.1 Table 2 */
+ hash->blocklen = EVP_MD_size(md);
+ /* See SP800-57 Part1 Rev4 5.6.1 Table 3 */
+ ctx->strength = 64 * (hash->blocklen >> 3);
+ if (ctx->strength > 256)
+ ctx->strength = 256;
+ if (hash->blocklen > MAX_BLOCKLEN_USING_SMALL_SEEDLEN)
+ ctx->seedlen = HASH_PRNG_MAX_SEEDLEN;
+ else
+ ctx->seedlen = HASH_PRNG_SMALL_SEEDLEN;
+
+ ctx->min_entropylen = ctx->strength / 8;
+ ctx->min_noncelen = ctx->min_entropylen / 2;
+ }
- /* Maximum number of bits per request = 2^19 = 2^16 bytes */
- drbg->max_request = 1 << 16;
+ return drbg_set_ctx_params(ctx, params);
+}
- return 1;
+static const OSSL_PARAM *drbg_hash_settable_ctx_params(void)
+{
+ static const OSSL_PARAM known_settable_ctx_params[] = {
+ OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_PROPERTIES, NULL, 0),
+ OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_DIGEST, NULL, 0),
+ OSSL_PARAM_DRBG_SETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_settable_ctx_params;
}
+
+const OSSL_DISPATCH drbg_hash_functions[] = {
+ { OSSL_FUNC_RAND_NEWCTX, (void(*)(void))drbg_hash_new_wrapper },
+ { OSSL_FUNC_RAND_FREECTX, (void(*)(void))drbg_hash_free },
+ { OSSL_FUNC_RAND_INSTANTIATE,
+ (void(*)(void))drbg_hash_instantiate_wrapper },
+ { OSSL_FUNC_RAND_UNINSTANTIATE,
+ (void(*)(void))drbg_hash_uninstantiate_wrapper },
+ { OSSL_FUNC_RAND_GENERATE, (void(*)(void))drbg_hash_generate_wrapper },
+ { OSSL_FUNC_RAND_RESEED, (void(*)(void))drbg_hash_reseed_wrapper },
+ { OSSL_FUNC_RAND_ENABLE_LOCKING, (void(*)(void))drbg_enable_locking },
+ { OSSL_FUNC_RAND_LOCK, (void(*)(void))drbg_lock },
+ { OSSL_FUNC_RAND_UNLOCK, (void(*)(void))drbg_unlock },
+ { OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS,
+ (void(*)(void))drbg_hash_settable_ctx_params },
+ { OSSL_FUNC_RAND_SET_CTX_PARAMS, (void(*)(void))drbg_hash_set_ctx_params },
+ { OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS,
+ (void(*)(void))drbg_hash_gettable_ctx_params },
+ { OSSL_FUNC_RAND_GET_CTX_PARAMS, (void(*)(void))drbg_hash_get_ctx_params },
+ { OSSL_FUNC_RAND_SET_CALLBACKS, (void(*)(void))drbg_set_callbacks },
+ { OSSL_FUNC_RAND_VERIFY_ZEROIZATION,
+ (void(*)(void))drbg_hash_verify_zeroization },
+ { 0, NULL }
+};
diff --git a/providers/implementations/rands/drbg_hmac.c b/providers/implementations/rands/drbg_hmac.c
new file mode 100644
index 0000000000..dc19952439
--- /dev/null
+++ b/providers/implementations/rands/drbg_hmac.c
@@ -0,0 +1,415 @@
+/*
+ * Copyright 2011-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <openssl/crypto.h>
+#include <openssl/err.h>
+#include <openssl/rand.h>
+#include "prov/provider_util.h"
+#include "internal/thread_once.h"
+#include "prov/providercommon.h"
+#include "prov/providercommonerr.h"
+#include "prov/implementations.h"
+#include "prov/provider_ctx.h"
+#include "drbg_local.h"
+
+static OSSL_OP_rand_newctx_fn drbg_hmac_new_wrapper;
+static OSSL_OP_rand_freectx_fn drbg_hmac_free;
+static OSSL_OP_rand_instantiate_fn drbg_hmac_instantiate_wrapper;
+static OSSL_OP_rand_uninstantiate_fn drbg_hmac_uninstantiate_wrapper;
+static OSSL_OP_rand_generate_fn drbg_hmac_generate_wrapper;
+static OSSL_OP_rand_reseed_fn drbg_hmac_reseed_wrapper;
+static OSSL_OP_rand_settable_ctx_params_fn drbg_hmac_settable_ctx_params;
+static OSSL_OP_rand_set_ctx_params_fn drbg_hmac_set_ctx_params;
+static OSSL_OP_rand_gettable_ctx_params_fn drbg_hmac_gettable_ctx_params;
+static OSSL_OP_rand_get_ctx_params_fn drbg_hmac_get_ctx_params;
+static OSSL_OP_rand_verify_zeroization_fn drbg_hmac_verify_zeroization;
+
+typedef struct rand_drbg_hmac_st {
+ EVP_MAC_CTX *ctx; /* H(x) = HMAC_hash OR H(x) = KMAC */
+ PROV_DIGEST digest; /* H(x) = hash(x) */
+ size_t blocklen;
+ unsigned char K[EVP_MAX_MD_SIZE];
+ unsigned char V[EVP_MAX_MD_SIZE];
+} PROV_DRBG_HMAC;
+
+/*
+ * Called twice by SP800-90Ar1 10.1.2.2 HMAC_DRBG_Update_Process.
+ *
+ * hmac is an object that holds the input/output Key and Value (K and V).
+ * inbyte is 0x00 on the first call and 0x01 on the second call.
+ * in1, in2, in3 are optional inputs that can be NULL.
+ * in1len, in2len, in3len are the lengths of the input buffers.
+ *
+ * The returned K,V is:
+ * hmac->K = HMAC(hmac->K, hmac->V || inbyte || [in1] || [in2] || [in3])
+ * hmac->V = HMAC(hmac->K, hmac->V)
+ *
+ * Returns zero if an error occurs otherwise it returns 1.
+ */
+static int do_hmac(PROV_DRBG_HMAC *hmac, unsigned char inbyte,
+ const unsigned char *in1, size_t in1len,
+ const unsigned char *in2, size_t in2len,
+ const unsigned char *in3, size_t in3len)
+{
+ EVP_MAC_CTX *ctx = hmac->ctx;
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+
+ *params = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, hmac->K,
+ hmac->blocklen);
+ if (!EVP_MAC_set_ctx_params(ctx, params)
+ || !EVP_MAC_init(ctx)
+ /* K = HMAC(K, V || inbyte || [in1] || [in2] || [in3]) */
+ || !EVP_MAC_update(ctx, hmac->V, hmac->blocklen)
+ || !EVP_MAC_update(ctx, &inbyte, 1)
+ || !(in1 == NULL || in1len == 0 || EVP_MAC_update(ctx, in1, in1len))
+ || !(in2 == NULL || in2len == 0 || EVP_MAC_update(ctx, in2, in2len))
+ || !(in3 == NULL || in3len == 0 || EVP_MAC_update(ctx, in3, in3len))
+ || !EVP_MAC_final(ctx, hmac->K, NULL, sizeof(hmac->K)))
+ return 0;
+
+ /* V = HMAC(K, V) */
+ *params = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, hmac->K,
+ hmac->blocklen);
+ return EVP_MAC_set_ctx_params(ctx, params)
+ && EVP_MAC_init(ctx)
+ && EVP_MAC_update(ctx, hmac->V, hmac->blocklen)
+ && EVP_MAC_final(ctx, hmac->V, NULL, sizeof(hmac->V));
+}
+
+/*
+ * SP800-90Ar1 10.1.2.2 HMAC_DRBG_Update_Process
+ *
+ *
+ * Updates the drbg objects Key(K) and Value(V) using the following algorithm:
+ * K,V = do_hmac(hmac, 0, in1, in2, in3)
+ * if (any input is not NULL)
+ * K,V = do_hmac(hmac, 1, in1, in2, in3)
+ *
+ * where in1, in2, in3 are optional input buffers that can be NULL.
+ * in1len, in2len, in3len are the lengths of the input buffers.
+ *
+ * Returns zero if an error occurs otherwise it returns 1.
+ */
+static int drbg_hmac_update(PROV_DRBG *drbg,
+ const unsigned char *in1, size_t in1len,
+ const unsigned char *in2, size_t in2len,
+ const unsigned char *in3, size_t in3len)
+{
+ PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data;
+
+ /* (Steps 1-2) K = HMAC(K, V||0x00||provided_data). V = HMAC(K,V) */
+ if (!do_hmac(hmac, 0x00, in1, in1len, in2, in2len, in3, in3len))
+ return 0;
+ /* (Step 3) If provided_data == NULL then return (K,V) */
+ if (in1len == 0 && in2len == 0 && in3len == 0)
+ return 1;
+ /* (Steps 4-5) K = HMAC(K, V||0x01||provided_data). V = HMAC(K,V) */
+ return do_hmac(hmac, 0x01, in1, in1len, in2, in2len, in3, in3len);
+}
+
+/*
+ * SP800-90Ar1 10.1.2.3 HMAC_DRBG_Instantiate_Process:
+ *
+ * This sets the drbg Key (K) to all zeros, and Value (V) to all 1's.
+ * and then calls (K,V) = drbg_hmac_update() with input parameters:
+ * ent = entropy data (Can be NULL) of length ent_len.
+ * nonce = nonce data (Can be NULL) of length nonce_len.
+ * pstr = personalization data (Can be NULL) of length pstr_len.
+ *
+ * Returns zero if an error occurs otherwise it returns 1.
+ */
+static int drbg_hmac_instantiate(PROV_DRBG *drbg,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *nonce, size_t nonce_len,
+ const unsigned char *pstr, size_t pstr_len)
+{
+ PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data;
+
+ if (hmac->ctx == NULL) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_MISSING_MAC);
+ return 0;
+ }
+
+ /* (Step 2) Key = 0x00 00...00 */
+ memset(hmac->K, 0x00, hmac->blocklen);
+ /* (Step 3) V = 0x01 01...01 */
+ memset(hmac->V, 0x01, hmac->blocklen);
+ /* (Step 4) (K,V) = HMAC_DRBG_Update(entropy||nonce||pers string, K, V) */
+ return drbg_hmac_update(drbg, ent, ent_len, nonce, nonce_len, pstr,
+ pstr_len);
+}
+
+static int drbg_hmac_instantiate_wrapper(void *vdrbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr,
+ size_t pstr_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_instantiate(drbg, strength, prediction_resistance,
+ pstr, pstr_len);
+}
+
+/*
+ * SP800-90Ar1 10.1.2.4 HMAC_DRBG_Reseed_Process:
+ *
+ * Reseeds the drbg's Key (K) and Value (V) by calling
+ * (K,V) = drbg_hmac_update() with the following input parameters:
+ * ent = entropy input data (Can be NULL) of length ent_len.
+ * adin = additional input data (Can be NULL) of length adin_len.
+ *
+ * Returns zero if an error occurs otherwise it returns 1.
+ */
+static int drbg_hmac_reseed(PROV_DRBG *drbg,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len)
+{
+ /* (Step 2) (K,V) = HMAC_DRBG_Update(entropy||additional_input, K, V) */
+ return drbg_hmac_update(drbg, ent, ent_len, adin, adin_len, NULL, 0);
+}
+
+static int drbg_hmac_reseed_wrapper(void *vdrbg, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_reseed(drbg, prediction_resistance, ent, ent_len,
+ adin, adin_len);
+}
+
+/*
+ * SP800-90Ar1 10.1.2.5 HMAC_DRBG_Generate_Process:
+ *
+ * Generates pseudo random bytes and updates the internal K,V for the drbg.
+ * out is a buffer to fill with outlen bytes of pseudo random data.
+ * adin is an additional_input string of size adin_len that may be NULL.
+ *
+ * Returns zero if an error occurs otherwise it returns 1.
+ */
+static int drbg_hmac_generate(PROV_DRBG *drbg,
+ unsigned char *out, size_t outlen,
+ const unsigned char *adin, size_t adin_len)
+{
+ PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data;
+ EVP_MAC_CTX *ctx = hmac->ctx;
+ const unsigned char *temp = hmac->V;
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+
+ /* (Step 2) if adin != NULL then (K,V) = HMAC_DRBG_Update(adin, K, V) */
+ if (adin != NULL
+ && adin_len > 0
+ && !drbg_hmac_update(drbg, adin, adin_len, NULL, 0, NULL, 0))
+ return 0;
+
+ /*
+ * (Steps 3-5) temp = NULL
+ * while (len(temp) < outlen) {
+ * V = HMAC(K, V)
+ * temp = temp || V
+ * }
+ */
+ for (;;) {
+ *params = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY,
+ hmac->K, hmac->blocklen);
+ if (!EVP_MAC_set_ctx_params(ctx, params)
+ || !EVP_MAC_init(ctx)
+ || !EVP_MAC_update(ctx, temp, hmac->blocklen))
+ return 0;
+
+ if (outlen > hmac->blocklen) {
+ if (!EVP_MAC_final(ctx, out, NULL, outlen))
+ return 0;
+ temp = out;
+ } else {
+ if (!EVP_MAC_final(ctx, hmac->V, NULL, sizeof(hmac->V)))
+ return 0;
+ memcpy(out, hmac->V, outlen);
+ break;
+ }
+ out += hmac->blocklen;
+ outlen -= hmac->blocklen;
+ }
+ /* (Step 6) (K,V) = HMAC_DRBG_Update(adin, K, V) */
+ if (!drbg_hmac_update(drbg, adin, adin_len, NULL, 0, NULL, 0))
+ return 0;
+
+ return 1;
+}
+
+static int drbg_hmac_generate_wrapper
+ (void *vdrbg, unsigned char *out, size_t outlen, unsigned int strength,
+ int prediction_resistance, const unsigned char *adin, size_t adin_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return PROV_DRBG_generate(drbg, out, outlen, strength,
+ prediction_resistance, adin, adin_len);
+}
+
+static int drbg_hmac_uninstantiate(PROV_DRBG *drbg)
+{
+ PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data;
+
+ OPENSSL_cleanse(hmac->K, sizeof(hmac->K));
+ OPENSSL_cleanse(hmac->V, sizeof(hmac->V));
+ return PROV_DRBG_uninstantiate(drbg);
+}
+
+static int drbg_hmac_uninstantiate_wrapper(void *vdrbg)
+{
+ return drbg_hmac_uninstantiate((PROV_DRBG *)vdrbg);
+}
+
+static int drbg_hmac_verify_zeroization(void *vdrbg)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)drbg->data;
+
+ PROV_DRBG_VERYIFY_ZEROIZATION(hmac->K);
+ PROV_DRBG_VERYIFY_ZEROIZATION(hmac->V);
+ return 1;
+}
+
+static int drbg_hmac_new(PROV_DRBG *drbg)
+{
+ PROV_DRBG_HMAC *hmac;
+
+ hmac = OPENSSL_secure_zalloc(sizeof(*hmac));
+ if (hmac == NULL) {
+ ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+
+ drbg->data = hmac;
+ /* See SP800-57 Part1 Rev4 5.6.1 Table 3 */
+ drbg->max_entropylen = DRBG_MAX_LENGTH;
+ drbg->max_noncelen = DRBG_MAX_LENGTH;
+ drbg->max_perslen = DRBG_MAX_LENGTH;
+ drbg->max_adinlen = DRBG_MAX_LENGTH;
+
+ /* Maximum number of bits per request = 2^19 = 2^16 bytes */
+ drbg->max_request = 1 << 16;
+ return 1;
+}
+
+static void *drbg_hmac_new_wrapper(void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_dispatch)
+{
+ return prov_rand_drbg_new(provctx, parent, parent_dispatch, &drbg_hmac_new,
+ &drbg_hmac_instantiate, &drbg_hmac_uninstantiate,
+ &drbg_hmac_reseed, &drbg_hmac_generate);
+}
+
+static void drbg_hmac_free(void *vdrbg)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_DRBG_HMAC *hmac;
+
+ if (drbg != NULL && (hmac = (PROV_DRBG_HMAC *)drbg->data) != NULL) {
+ EVP_MAC_free_ctx(hmac->ctx);
+ ossl_prov_digest_reset(&hmac->digest);
+ OPENSSL_secure_clear_free(hmac, sizeof(*hmac));
+ }
+ prov_rand_drbg_free(drbg);
+}
+
+static int drbg_hmac_get_ctx_params(void *vdrbg, OSSL_PARAM params[])
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return drbg_get_ctx_params(drbg, params);
+}
+
+static const OSSL_PARAM *drbg_hmac_gettable_ctx_params(void)
+{
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
+ OSSL_PARAM_DRBG_GETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_gettable_ctx_params;
+}
+
+static int drbg_hmac_set_ctx_params(void *vctx, const OSSL_PARAM params[])
+{
+ PROV_DRBG *ctx = (PROV_DRBG *)vctx;
+ PROV_DRBG_HMAC *hmac = (PROV_DRBG_HMAC *)ctx->data;
+ OPENSSL_CTX *libctx = PROV_LIBRARY_CONTEXT_OF(ctx->provctx);
+ const EVP_MD *md;
+
+ if (!ossl_prov_digest_load_from_params(&hmac->digest, params, libctx))
+ return 0;
+
+ /*
+ * Confirm digest is allowed. We allow all digests that are not XOF
+ * (such as SHAKE). In FIPS mode, the fetch will fail for non-approved
+ * digests.
+ */
+ md = ossl_prov_digest_md(&hmac->digest);
+ if (md != NULL && (EVP_MD_flags(md) & EVP_MD_FLAG_XOF) != 0) {
+ ERR_raise(ERR_LIB_PROV, PROV_R_XOF_DIGESTS_NOT_ALLOWED);
+ return 0;
+ }
+
+ if (!ossl_prov_macctx_load_from_params(&hmac->ctx, params,
+ NULL, NULL, NULL, libctx))
+ return 0;
+
+ if (hmac->ctx != NULL) {
+ /* These are taken from SP 800-90 10.1 Table 2 */
+ hmac->blocklen = EVP_MD_size(md);
+ /* See SP800-57 Part1 Rev4 5.6.1 Table 3 */
+ ctx->strength = 64 * (int)(hmac->blocklen >> 3);
+ if (ctx->strength > 256)
+ ctx->strength = 256;
+ ctx->seedlen = hmac->blocklen;
+ ctx->min_entropylen = ctx->strength / 8;
+ ctx->min_noncelen = ctx->min_entropylen / 2;
+ }
+
+ return drbg_set_ctx_params(ctx, params);
+}
+
+static const OSSL_PARAM *drbg_hmac_settable_ctx_params(void)
+{
+ static const OSSL_PARAM known_settable_ctx_params[] = {
+ OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_PROPERTIES, NULL, 0),
+ OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_DIGEST, NULL, 0),
+ OSSL_PARAM_utf8_string(OSSL_DRBG_PARAM_MAC, NULL, 0),
+ OSSL_PARAM_DRBG_SETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_settable_ctx_params;
+}
+
+const OSSL_DISPATCH drbg_hmac_functions[] = {
+ { OSSL_FUNC_RAND_NEWCTX, (void(*)(void))drbg_hmac_new_wrapper },
+ { OSSL_FUNC_RAND_FREECTX, (void(*)(void))drbg_hmac_free },
+ { OSSL_FUNC_RAND_INSTANTIATE,
+ (void(*)(void))drbg_hmac_instantiate_wrapper },
+ { OSSL_FUNC_RAND_UNINSTANTIATE,
+ (void(*)(void))drbg_hmac_uninstantiate_wrapper },
+ { OSSL_FUNC_RAND_GENERATE, (void(*)(void))drbg_hmac_generate_wrapper },
+ { OSSL_FUNC_RAND_RESEED, (void(*)(void))drbg_hmac_reseed_wrapper },
+ { OSSL_FUNC_RAND_ENABLE_LOCKING, (void(*)(void))drbg_enable_locking },
+ { OSSL_FUNC_RAND_LOCK, (void(*)(void))drbg_lock },
+ { OSSL_FUNC_RAND_UNLOCK, (void(*)(void))drbg_unlock },
+ { OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS,
+ (void(*)(void))drbg_hmac_settable_ctx_params },
+ { OSSL_FUNC_RAND_SET_CTX_PARAMS, (void(*)(void))drbg_hmac_set_ctx_params },
+ { OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS,
+ (void(*)(void))drbg_hmac_gettable_ctx_params },
+ { OSSL_FUNC_RAND_GET_CTX_PARAMS, (void(*)(void))drbg_hmac_get_ctx_params },
+ { OSSL_FUNC_RAND_SET_CALLBACKS, (void(*)(void))drbg_set_callbacks },
+ { OSSL_FUNC_RAND_VERIFY_ZEROIZATION,
+ (void(*)(void))drbg_hmac_verify_zeroization },
+ { 0, NULL }
+};
diff --git a/providers/implementations/rands/drbg_local.h b/providers/implementations/rands/drbg_local.h
new file mode 100644
index 0000000000..d9a06c7fb8
--- /dev/null
+++ b/providers/implementations/rands/drbg_local.h
@@ -0,0 +1,277 @@
+/*
+ * Copyright 1995-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_CRYPTO_PROV_LOCAL_H
+# define OSSL_CRYPTO_PROV_LOCAL_H
+
+# include <openssl/evp.h>
+# include <openssl/core_numbers.h>
+# include <openssl/core_names.h>
+# include <openssl/params.h>
+# include "internal/tsan_assist.h"
+# include "internal/nelem.h"
+# include "internal/numbers.h"
+
+/* How many times to read the TSC as a randomness source. */
+# define TSC_READ_COUNT 4
+
+/* Maximum reseed intervals */
+# define MAX_RESEED_INTERVAL (1 << 24)
+# define MAX_RESEED_TIME_INTERVAL (1 << 20) /* approx. 12 days */
+
+/* Default reseed intervals */
+# define RESEED_INTERVAL (1 << 8)
+# define TIME_INTERVAL (60*60) /* 1 hour */
+
+/*
+ * The number of bytes that constitutes an atomic lump of entropy with respect
+ * to the FIPS 140-2 section 4.9.2 Conditional Tests. The size is somewhat
+ * arbitrary, the smaller the value, the less entropy is consumed on first
+ * read but the higher the probability of the test failing by accident.
+ *
+ * The value is in bytes.
+ */
+#define CRNGT_BUFSIZ 16
+
+/*
+ * Maximum input size for the DRBG (entropy, nonce, personalization string)
+ *
+ * NIST SP800 90Ar1 allows a maximum of (1 << 35) bits i.e., (1 << 32) bytes.
+ *
+ * We lower it to 'only' INT32_MAX bytes, which is equivalent to 2 gigabytes.
+ */
+# define DRBG_MAX_LENGTH INT32_MAX
+
+/* The default nonce */
+#ifdef CHARSET_EBCDIC
+# define DRBG_DEFAULT_PERS_STRING { 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, \
+ 0x4c, 0x20, 0x4e, 0x49, 0x53, 0x54, 0x20, 0x53, 0x50, 0x20, 0x38, 0x30, \
+ 0x30, 0x2d, 0x39, 0x30, 0x41, 0x20, 0x44, 0x52, 0x42, 0x47, 0x00};
+#else
+# define DRBG_DEFAULT_PERS_STRING "OpenSSL NIST SP 800-90A DRBG"
+#endif
+
+typedef struct prov_drbg_st PROV_DRBG;
+
+/* DRBG status values */
+typedef enum drbg_status_e {
+ DRBG_UNINITIALISED,
+ DRBG_READY,
+ DRBG_ERROR
+} DRBG_STATUS;
+
+/*
+ * The state of all types of DRBGs.
+ */
+struct prov_drbg_st {
+ CRYPTO_RWLOCK *lock;
+ void *provctx;
+
+ /* Virtual functions are cache here */
+ int (*instantiate)(PROV_DRBG *drbg,
+ const unsigned char *entropy, size_t entropylen,
+ const unsigned char *nonce, size_t noncelen,
+ const unsigned char *pers, size_t perslen);
+ int (*uninstantiate)(PROV_DRBG *ctx);
+ int (*reseed)(PROV_DRBG *drbg, const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len);
+ int (*generate)(PROV_DRBG *, unsigned char *out, size_t outlen,
+ const unsigned char *adin, size_t adin_len);
+
+ /* Parent PROV_RAND and its dispatch table functions */
+ void *parent;
+ OSSL_OP_rand_enable_locking_fn *parent_enable_locking;
+ OSSL_OP_rand_lock_fn *parent_lock;
+ OSSL_OP_rand_unlock_fn *parent_unlock;
+ OSSL_OP_rand_get_ctx_params_fn *parent_get_ctx_params;
+ OSSL_OP_rand_generate_fn *parent_generate;
+ OSSL_OP_rand_nonce_fn *parent_nonce;
+
+ const OSSL_DISPATCH *parent_dispatch;
+
+ /*
+ * Stores the return value of openssl_get_fork_id() as of when we last
+ * reseeded. The DRBG reseeds automatically whenever drbg->fork_id !=
+ * openssl_get_fork_id(). Used to provide fork-safety and reseed this
+ * DRBG in the child process.
+ */
+ int fork_id;
+ unsigned short flags; /* various external flags */
+
+ /*
+ * The random_data is used by PROV_add()/drbg_add() to attach random
+ * data to the global drbg, such that the rand_drbg_get_entropy() callback
+ * can pull it during instantiation and reseeding. This is necessary to
+ * reconcile the different philosophies of the PROV and the PROV_DRBG
+ * with respect to how randomness is added to the RNG during reseeding
+ * (see PR #4328).
+ */
+ struct rand_pool_st *seed_pool;
+
+ /*
+ * Auxiliary pool for additional data.
+ */
+ struct rand_pool_st *adin_pool;
+
+ /*
+ * The following parameters are setup by the per-type "init" function.
+ *
+ * The supported types and their init functions are:
+ * (1) CTR_DRBG: drbg_ctr_init().
+ * (2) HMAC_DRBG: drbg_hmac_init().
+ * (3) HASH_DRBG: drbg_hash_init().
+ *
+ * The parameters are closely related to the ones described in
+ * section '10.2.1 CTR_DRBG' of [NIST SP 800-90Ar1], with one
+ * crucial difference: In the NIST standard, all counts are given
+ * in bits, whereas in OpenSSL entropy counts are given in bits
+ * and buffer lengths are given in bytes.
+ *
+ * Since this difference has lead to some confusion in the past,
+ * (see [GitHub Issue #2443], formerly [rt.openssl.org #4055])
+ * the 'len' suffix has been added to all buffer sizes for
+ * clarification.
+ */
+
+ unsigned int strength;
+ size_t max_request;
+ size_t min_entropylen, max_entropylen;
+ size_t min_noncelen, max_noncelen;
+ size_t max_perslen, max_adinlen;
+
+ /*
+ * Counts the number of generate requests since the last reseed
+ * (Starts at 1). This value is the reseed_counter as defined in
+ * NIST SP 800-90Ar1
+ */
+ unsigned int reseed_gen_counter;
+ /*
+ * Maximum number of generate requests until a reseed is required.
+ * This value is ignored if it is zero.
+ */
+ unsigned int reseed_interval;
+ /* Stores the time when the last reseeding occurred */
+ time_t reseed_time;
+ /*
+ * Specifies the maximum time interval (in seconds) between reseeds.
+ * This value is ignored if it is zero.
+ */
+ time_t reseed_time_interval;
+ /*
+ * Counts the number of reseeds since instantiation.
+ * This value is ignored if it is zero.
+ *
+ * This counter is used only for seed propagation from the <master> DRBG
+ * to its two children, the <public> and <private> DRBG. This feature is
+ * very special and its sole purpose is to ensure that any randomness which
+ * is added by PROV_add() or PROV_seed() will have an immediate effect on
+ * the output of PROV_bytes() resp. PROV_priv_bytes().
+ */
+ TSAN_QUALIFIER unsigned int reseed_counter;
+ unsigned int reseed_next_counter;
+ unsigned int parent_reseed_counter;
+
+ size_t seedlen;
+ DRBG_STATUS state;
+
+ /* DRBG specific data */
+ void *data;
+
+ /* Entropy and nonce gathering callbacks */
+ void *callback_arg;
+ OSSL_INOUT_CALLBACK *get_entropy_fn;
+ OSSL_CALLBACK *cleanup_entropy_fn;
+ OSSL_INOUT_CALLBACK *get_nonce_fn;
+ OSSL_CALLBACK *cleanup_nonce_fn;
+};
+
+PROV_DRBG *prov_rand_drbg_new
+ (void *provctx, void *parent, const OSSL_DISPATCH *parent_dispatch,
+ int (*dnew)(PROV_DRBG *ctx),
+ int (*instantiate)(PROV_DRBG *drbg,
+ const unsigned char *entropy, size_t entropylen,
+ const unsigned char *nonce, size_t noncelen,
+ const unsigned char *pers, size_t perslen),
+ int (*uninstantiate)(PROV_DRBG *ctx),
+ int (*reseed)(PROV_DRBG *drbg, const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len),
+ int (*generate)(PROV_DRBG *, unsigned char *out, size_t outlen,
+ const unsigned char *adin, size_t adin_len));
+void prov_rand_drbg_free(PROV_DRBG *drbg);
+
+int PROV_DRBG_instantiate(PROV_DRBG *drbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pers, size_t perslen);
+
+int PROV_DRBG_uninstantiate(PROV_DRBG *drbg);
+
+int PROV_DRBG_reseed(PROV_DRBG *drbg, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adinlen);
+
+int PROV_DRBG_generate(PROV_DRBG *drbg, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *adin, size_t adinlen);
+
+/*
+ * Entropy call back for the FIPS 140-2 section 4.9.2 Conditional Tests.
+ * These need to be exposed for the unit tests.
+ */
+int drbg_set_callbacks(void *vctx, OSSL_INOUT_CALLBACK *get_entropy_fn,
+ OSSL_CALLBACK *cleanup_entropy_fn,
+ OSSL_INOUT_CALLBACK *get_nonce_fn,
+ OSSL_CALLBACK *cleanup_nonce_fn, void *arg);
+
+/* Verify that an array of numeric values is all zero */
+#define PROV_DRBG_VERYIFY_ZEROIZATION(v) \
+ { \
+ size_t i; \
+ \
+ for (i = 0; i < OSSL_NELEM(v); i++) \
+ if ((v)[i] != 0) \
+ return 0; \
+ }
+
+/* locking api */
+OSSL_OP_rand_enable_locking_fn drbg_enable_locking;
+OSSL_OP_rand_lock_fn drbg_lock;
+OSSL_OP_rand_unlock_fn drbg_unlock;
+
+/* Common parameters for all of our DRBGs */
+int drbg_get_ctx_params(PROV_DRBG *drbg, OSSL_PARAM params[]);
+int drbg_set_ctx_params(PROV_DRBG *drbg, const OSSL_PARAM params[]);
+
+#define OSSL_PARAM_DRBG_SETABLE_CTX_COMMON \
+ OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), \
+ OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL)
+
+#define OSSL_PARAM_DRBG_GETABLE_CTX_COMMON \
+ OSSL_PARAM_int(OSSL_RAND_PARAM_STATE, NULL), \
+ OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL), \
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_REQUEST, NULL), \
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_ENTROPYLEN, NULL), \
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ENTROPYLEN, NULL), \
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_NONCELEN, NULL), \
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_NONCELEN, NULL), \
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_PERSLEN, NULL), \
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ADINLEN, NULL), \
+ OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_CTR, NULL), \
+ OSSL_PARAM_time_t(OSSL_DRBG_PARAM_RESEED_TIME, NULL), \
+ OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS, NULL), \
+ OSSL_PARAM_uint64(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL, NULL)
+
+/* Continuous test "entropy" calls */
+size_t prov_crngt_get_entropy(PROV_DRBG *drbg,
+ unsigned char **pout,
+ int entropy, size_t min_len, size_t max_len,
+ int prediction_resistance);
+void prov_crngt_cleanup_entropy(PROV_DRBG *drbg,
+ unsigned char *out, size_t outlen);
+
+#endif
diff --git a/providers/implementations/rands/rand_pool.c b/providers/implementations/rands/rand_pool.c
new file mode 100644
index 0000000000..cf0e6774a5
--- /dev/null
+++ b/providers/implementations/rands/rand_pool.c
@@ -0,0 +1,412 @@
+/*
+ * Copyright 1995-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include <time.h>
+#include "internal/cryptlib.h"
+#include <openssl/opensslconf.h>
+#include "crypto/rand.h"
+#include <openssl/engine.h>
+#include "internal/thread_once.h"
+#include "prov/rand_pool.h"
+
+/*
+ * Allocate memory and initialize a new random pool
+ */
+RAND_POOL *rand_pool_new(int entropy_requested, int secure,
+ size_t min_len, size_t max_len)
+{
+ RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool));
+ size_t min_alloc_size = RAND_POOL_MIN_ALLOCATION(secure);
+
+ if (pool == NULL) {
+ RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ pool->min_len = min_len;
+ pool->max_len = (max_len > RAND_POOL_MAX_LENGTH) ?
+ RAND_POOL_MAX_LENGTH : max_len;
+ pool->alloc_len = min_len < min_alloc_size ? min_alloc_size : min_len;
+ if (pool->alloc_len > pool->max_len)
+ pool->alloc_len = pool->max_len;
+
+ if (secure)
+ pool->buffer = OPENSSL_secure_zalloc(pool->alloc_len);
+ else
+ pool->buffer = OPENSSL_zalloc(pool->alloc_len);
+
+ if (pool->buffer == NULL) {
+ RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ pool->entropy_requested = entropy_requested;
+ pool->secure = secure;
+ return pool;
+
+err:
+ OPENSSL_free(pool);
+ return NULL;
+}
+
+/*
+ * Attach new random pool to the given buffer
+ *
+ * This function is intended to be used only for feeding random data
+ * provided by RAND_add() and RAND_seed() into the <master> DRBG.
+ */
+RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len,
+ size_t entropy)
+{
+ RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool));
+
+ if (pool == NULL) {
+ RANDerr(RAND_F_RAND_POOL_ATTACH, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ /*
+ * The const needs to be cast away, but attached buffers will not be
+ * modified (in contrary to allocated buffers which are zeroed and
+ * freed in the end).
+ */
+ pool->buffer = (unsigned char *) buffer;
+ pool->len = len;
+
+ pool->attached = 1;
+
+ pool->min_len = pool->max_len = pool->alloc_len = pool->len;
+ pool->entropy = entropy;
+
+ return pool;
+}
+
+/*
+ * Free |pool|, securely erasing its buffer.
+ */
+void rand_pool_free(RAND_POOL *pool)
+{
+ if (pool == NULL)
+ return;
+
+ /*
+ * Although it would be advisable from a cryptographical viewpoint,
+ * we are not allowed to clear attached buffers, since they are passed
+ * to rand_pool_attach() as `const unsigned char*`.
+ * (see corresponding comment in rand_pool_attach()).
+ */
+ if (!pool->attached) {
+ if (pool->secure)
+ OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
+ else
+ OPENSSL_clear_free(pool->buffer, pool->alloc_len);
+ }
+
+ OPENSSL_free(pool);
+}
+
+/*
+ * Return the |pool|'s buffer to the caller (readonly).
+ */
+const unsigned char *rand_pool_buffer(RAND_POOL *pool)
+{
+ return pool->buffer;
+}
+
+/*
+ * Return the |pool|'s entropy to the caller.
+ */
+size_t rand_pool_entropy(RAND_POOL *pool)
+{
+ return pool->entropy;
+}
+
+/*
+ * Return the |pool|'s buffer length to the caller.
+ */
+size_t rand_pool_length(RAND_POOL *pool)
+{
+ return pool->len;
+}
+
+/*
+ * Detach the |pool| buffer and return it to the caller.
+ * It's the responsibility of the caller to free the buffer
+ * using OPENSSL_secure_clear_free() or to re-attach it
+ * again to the pool using rand_pool_reattach().
+ */
+unsigned char *rand_pool_detach(RAND_POOL *pool)
+{
+ unsigned char *ret = pool->buffer;
+ pool->buffer = NULL;
+ pool->entropy = 0;
+ return ret;
+}
+
+/*
+ * Re-attach the |pool| buffer. It is only allowed to pass
+ * the |buffer| which was previously detached from the same pool.
+ */
+void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer)
+{
+ pool->buffer = buffer;
+ OPENSSL_cleanse(pool->buffer, pool->len);
+ pool->len = 0;
+}
+
+/*
+ * If |entropy_factor| bits contain 1 bit of entropy, how many bytes does one
+ * need to obtain at least |bits| bits of entropy?
+ */
+#define ENTROPY_TO_BYTES(bits, entropy_factor) \
+ (((bits) * (entropy_factor) + 7) / 8)
+
+
+/*
+ * Checks whether the |pool|'s entropy is available to the caller.
+ * This is the case when entropy count and buffer length are high enough.
+ * Returns
+ *
+ * |entropy| if the entropy count and buffer size is large enough
+ * 0 otherwise
+ */
+size_t rand_pool_entropy_available(RAND_POOL *pool)
+{
+ if (pool->entropy < pool->entropy_requested)
+ return 0;
+
+ if (pool->len < pool->min_len)
+ return 0;
+
+ return pool->entropy;
+}
+
+/*
+ * Returns the (remaining) amount of entropy needed to fill
+ * the random pool.
+ */
+
+size_t rand_pool_entropy_needed(RAND_POOL *pool)
+{
+ if (pool->entropy < pool->entropy_requested)
+ return pool->entropy_requested - pool->entropy;
+
+ return 0;
+}
+
+/* Increase the allocation size -- not usable for an attached pool */
+static int rand_pool_grow(RAND_POOL *pool, size_t len)
+{
+ if (len > pool->alloc_len - pool->len) {
+ unsigned char *p;
+ const size_t limit = pool->max_len / 2;
+ size_t newlen = pool->alloc_len;
+
+ if (pool->attached || len > pool->max_len - pool->len) {
+ RANDerr(RAND_F_RAND_POOL_GROW, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+
+ do
+ newlen = newlen < limit ? newlen * 2 : pool->max_len;
+ while (len > newlen - pool->len);
+
+ if (pool->secure)
+ p = OPENSSL_secure_zalloc(newlen);
+ else
+ p = OPENSSL_zalloc(newlen);
+ if (p == NULL) {
+ RANDerr(RAND_F_RAND_POOL_GROW, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ memcpy(p, pool->buffer, pool->len);
+ if (pool->secure)
+ OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
+ else
+ OPENSSL_clear_free(pool->buffer, pool->alloc_len);
+ pool->buffer = p;
+ pool->alloc_len = newlen;
+ }
+ return 1;
+}
+
+/*
+ * Returns the number of bytes needed to fill the pool, assuming
+ * the input has 1 / |entropy_factor| entropy bits per data bit.
+ * In case of an error, 0 is returned.
+ */
+
+size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor)
+{
+ size_t bytes_needed;
+ size_t entropy_needed = rand_pool_entropy_needed(pool);
+
+ if (entropy_factor < 1) {
+ RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_ARGUMENT_OUT_OF_RANGE);
+ return 0;
+ }
+
+ bytes_needed = ENTROPY_TO_BYTES(entropy_needed, entropy_factor);
+
+ if (bytes_needed > pool->max_len - pool->len) {
+ /* not enough space left */
+ RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_RANDOM_POOL_OVERFLOW);
+ return 0;
+ }
+
+ if (pool->len < pool->min_len &&
+ bytes_needed < pool->min_len - pool->len)
+ /* to meet the min_len requirement */
+ bytes_needed = pool->min_len - pool->len;
+
+ /*
+ * Make sure the buffer is large enough for the requested amount
+ * of data. This guarantees that existing code patterns where
+ * rand_pool_add_begin, rand_pool_add_end or rand_pool_add
+ * are used to collect entropy data without any error handling
+ * whatsoever, continue to be valid.
+ * Furthermore if the allocation here fails once, make sure that
+ * we don't fall back to a less secure or even blocking random source,
+ * as that could happen by the existing code patterns.
+ * This is not a concern for additional data, therefore that
+ * is not needed if rand_pool_grow fails in other places.
+ */
+ if (!rand_pool_grow(pool, bytes_needed)) {
+ /* persistent error for this pool */
+ pool->max_len = pool->len = 0;
+ return 0;
+ }
+
+ return bytes_needed;
+}
+
+/* Returns the remaining number of bytes available */
+size_t rand_pool_bytes_remaining(RAND_POOL *pool)
+{
+ return pool->max_len - pool->len;
+}
+
+/*
+ * Add random bytes to the random pool.
+ *
+ * It is expected that the |buffer| contains |len| bytes of
+ * random input which contains at least |entropy| bits of
+ * randomness.
+ *
+ * Returns 1 if the added amount is adequate, otherwise 0
+ */
+int rand_pool_add(RAND_POOL *pool,
+ const unsigned char *buffer, size_t len, size_t entropy)
+{
+ if (len > pool->max_len - pool->len) {
+ RANDerr(RAND_F_RAND_POOL_ADD, RAND_R_ENTROPY_INPUT_TOO_LONG);
+ return 0;
+ }
+
+ if (pool->buffer == NULL) {
+ RANDerr(RAND_F_RAND_POOL_ADD, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+
+ if (len > 0) {
+ /*
+ * This is to protect us from accidentally passing the buffer
+ * returned from rand_pool_add_begin.
+ * The check for alloc_len makes sure we do not compare the
+ * address of the end of the allocated memory to something
+ * different, since that comparison would have an
+ * indeterminate result.
+ */
+ if (pool->alloc_len > pool->len && pool->buffer + pool->len == buffer) {
+ RANDerr(RAND_F_RAND_POOL_ADD, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+ /*
+ * We have that only for cases when a pool is used to collect
+ * additional data.
+ * For entropy data, as long as the allocation request stays within
+ * the limits given by rand_pool_bytes_needed this rand_pool_grow
+ * below is guaranteed to succeed, thus no allocation happens.
+ */
+ if (!rand_pool_grow(pool, len))
+ return 0;
+ memcpy(pool->buffer + pool->len, buffer, len);
+ pool->len += len;
+ pool->entropy += entropy;
+ }
+
+ return 1;
+}
+
+/*
+ * Start to add random bytes to the random pool in-place.
+ *
+ * Reserves the next |len| bytes for adding random bytes in-place
+ * and returns a pointer to the buffer.
+ * The caller is allowed to copy up to |len| bytes into the buffer.
+ * If |len| == 0 this is considered a no-op and a NULL pointer
+ * is returned without producing an error message.
+ *
+ * After updating the buffer, rand_pool_add_end() needs to be called
+ * to finish the update operation (see next comment).
+ */
+unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len)
+{
+ if (len == 0)
+ return NULL;
+
+ if (len > pool->max_len - pool->len) {
+ RANDerr(RAND_F_RAND_POOL_ADD_BEGIN, RAND_R_RANDOM_POOL_OVERFLOW);
+ return NULL;
+ }
+
+ if (pool->buffer == NULL) {
+ RANDerr(RAND_F_RAND_POOL_ADD_BEGIN, ERR_R_INTERNAL_ERROR);
+ return NULL;
+ }
+
+ /*
+ * As long as the allocation request stays within the limits given
+ * by rand_pool_bytes_needed this rand_pool_grow below is guaranteed
+ * to succeed, thus no allocation happens.
+ * We have that only for cases when a pool is used to collect
+ * additional data. Then the buffer might need to grow here,
+ * and of course the caller is responsible to check the return
+ * value of this function.
+ */
+ if (!rand_pool_grow(pool, len))
+ return NULL;
+
+ return pool->buffer + pool->len;
+}
+
+/*
+ * Finish to add random bytes to the random pool in-place.
+ *
+ * Finishes an in-place update of the random pool started by
+ * rand_pool_add_begin() (see previous comment).
+ * It is expected that |len| bytes of random input have been added
+ * to the buffer which contain at least |entropy| bits of randomness.
+ * It is allowed to add less bytes than originally reserved.
+ */
+int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy)
+{
+ if (len > pool->alloc_len - pool->len) {
+ RANDerr(RAND_F_RAND_POOL_ADD_END, RAND_R_RANDOM_POOL_OVERFLOW);
+ return 0;
+ }
+
+ if (len > 0) {
+ pool->len += len;
+ pool->entropy += entropy;
+ }
+
+ return 1;
+}
diff --git a/providers/implementations/rands/seeding/build.info b/providers/implementations/rands/seeding/build.info
new file mode 100644
index 0000000000..e75a941098
--- /dev/null
+++ b/providers/implementations/rands/seeding/build.info
@@ -0,0 +1,11 @@
+$COMMON=rand_unix.c rand_win.c rand_tsc.c rand_cpu_x86.c
+IF[{- $config{target} =~ /vxworks/i -}]
+ $COMMON=$COMMON rand_vxworks.c
+ENDIF
+IF[{- $config{target} =~ /vms/i -}]
+ $COMMON=$COMMON rand_vms.c
+ENDIF
+
+SOURCE[../../../libfips.a]=$COMMON
+SOURCE[../../../libnonfips.a]=$COMMON
+
diff --git a/providers/implementations/rands/seeding/rand_cpu_x86.c b/providers/implementations/rands/seeding/rand_cpu_x86.c
new file mode 100644
index 0000000000..ba0f716426
--- /dev/null
+++ b/providers/implementations/rands/seeding/rand_cpu_x86.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright 1995-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "internal/cryptlib.h"
+#include <openssl/opensslconf.h>
+#include "prov/rand_pool.h"
+
+#ifdef OPENSSL_RAND_SEED_RDCPU
+size_t OPENSSL_ia32_rdseed_bytes(unsigned char *buf, size_t len);
+size_t OPENSSL_ia32_rdrand_bytes(unsigned char *buf, size_t len);
+
+/*
+ * Acquire entropy using Intel-specific cpu instructions
+ *
+ * Uses the RDSEED instruction if available, otherwise uses
+ * RDRAND if available.
+ *
+ * For the differences between RDSEED and RDRAND, and why RDSEED
+ * is the preferred choice, see https://goo.gl/oK3KcN
+ *
+ * Returns the total entropy count, if it exceeds the requested
+ * entropy count. Otherwise, returns an entropy count of 0.
+ */
+size_t prov_acquire_entropy_from_cpu(RAND_POOL *pool)
+{
+ size_t bytes_needed;
+ unsigned char *buffer;
+
+ bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
+ if (bytes_needed > 0) {
+ buffer = rand_pool_add_begin(pool, bytes_needed);
+
+ if (buffer != NULL) {
+ /* Whichever comes first, use RDSEED, RDRAND or nothing */
+ if ((OPENSSL_ia32cap_P[2] & (1 << 18)) != 0) {
+ if (OPENSSL_ia32_rdseed_bytes(buffer, bytes_needed)
+ == bytes_needed) {
+ rand_pool_add_end(pool, bytes_needed, 8 * bytes_needed);
+ }
+ } else if ((OPENSSL_ia32cap_P[1] & (1 << (62 - 32))) != 0) {
+ if (OPENSSL_ia32_rdrand_bytes(buffer, bytes_needed)
+ == bytes_needed) {
+ rand_pool_add_end(pool, bytes_needed, 8 * bytes_needed);
+ }
+ } else {
+ rand_pool_add_end(pool, 0, 0);
+ }
+ }
+ }
+
+ return rand_pool_entropy_available(pool);
+}
+#else
+NON_EMPTY_TRANSLATION_UNIT
+#endif
diff --git a/providers/implementations/rands/seeding/rand_tsc.c b/providers/implementations/rands/seeding/rand_tsc.c
new file mode 100644
index 0000000000..dd69aa438f
--- /dev/null
+++ b/providers/implementations/rands/seeding/rand_tsc.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1995-2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "internal/cryptlib.h"
+#include <openssl/opensslconf.h>
+#include "prov/rand_pool.h"
+
+#ifdef OPENSSL_RAND_SEED_RDTSC
+/*
+ * IMPORTANT NOTE: It is not currently possible to use this code
+ * because we are not sure about the amount of randomness it provides.
+ * Some SP800-90B tests have been run, but there is internal skepticism.
+ * So for now this code is not used.
+ */
+# error "RDTSC enabled? Should not be possible!"
+
+/*
+ * Acquire entropy from high-speed clock
+ *
+ * Since we get some randomness from the low-order bits of the
+ * high-speed clock, it can help.
+ *
+ * Returns the total entropy count, if it exceeds the requested
+ * entropy count. Otherwise, returns an entropy count of 0.
+ */
+size_t prov_acquire_entropy_from_tsc(RAND_POOL *pool)
+{
+ unsigned char c;
+ int i;
+
+ if ((OPENSSL_ia32cap_P[0] & (1 << 4)) != 0) {
+ for (i = 0; i < TSC_READ_COUNT; i++) {
+ c = (unsigned char)(OPENSSL_rdtsc() & 0xFF);
+ rand_pool_add(pool, &c, 1, 4);
+ }
+ }
+ return rand_pool_entropy_available(pool);
+}
+#else
+NON_EMPTY_TRANSLATION_UNIT
+#endif
diff --git a/crypto/rand/rand_unix.c b/providers/implementations/rands/seeding/rand_unix.c
similarity index 99%
rename from crypto/rand/rand_unix.c
rename to providers/implementations/rands/seeding/rand_unix.c
index 869c2d04dd..77c5d26142 100644
--- a/crypto/rand/rand_unix.c
+++ b/providers/implementations/rands/seeding/rand_unix.c
@@ -10,15 +10,16 @@
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif
-#include "e_os.h"
+#include "../e_os.h"
#include <stdio.h>
#include "internal/cryptlib.h"
#include <openssl/rand.h>
#include <openssl/crypto.h>
-#include "rand_local.h"
+#include "prov/rand_pool.h"
#include "crypto/rand.h"
#include <stdio.h>
#include "internal/dso.h"
+#include "prov/seeding.h"
#ifdef __linux
# include <sys/syscall.h>
@@ -131,7 +132,7 @@ static uint64_t get_timer_bits(void);
*
* As a precaution, we assume only 2 bits of entropy per byte.
*/
-size_t rand_pool_acquire_entropy(RAND_POOL *pool)
+size_t prov_pool_acquire_entropy(RAND_POOL *pool)
{
short int code;
int i, k;
@@ -603,7 +604,7 @@ void rand_pool_keep_random_devices_open(int keep)
* of input from the different entropy sources (trust, quality,
* possibility of blocking).
*/
-size_t rand_pool_acquire_entropy(RAND_POOL *pool)
+size_t prov_pool_acquire_entropy(RAND_POOL *pool)
{
# if defined(OPENSSL_RAND_SEED_NONE)
return rand_pool_entropy_available(pool);
@@ -729,7 +730,7 @@ size_t rand_pool_acquire_entropy(RAND_POOL *pool)
#if (defined(OPENSSL_SYS_UNIX) && !defined(OPENSSL_SYS_VXWORKS)) \
|| defined(__DJGPP__)
-int rand_pool_add_nonce_data(RAND_POOL *pool)
+int prov_pool_add_nonce_data(RAND_POOL *pool)
{
struct {
pid_t pid;
diff --git a/crypto/rand/rand_vms.c b/providers/implementations/rands/seeding/rand_vms.c
similarity index 99%
rename from crypto/rand/rand_vms.c
rename to providers/implementations/rands/seeding/rand_vms.c
index 6b9fa2c725..7adf3e718a 100644
--- a/crypto/rand/rand_vms.c
+++ b/providers/implementations/rands/seeding/rand_vms.c
@@ -14,7 +14,8 @@
#include "internal/cryptlib.h"
#include <openssl/rand.h>
#include "crypto/rand.h"
-#include "rand_local.h"
+#include "prov/rand_pool.h"
+#include "prov/seeding.h"
#include <descrip.h>
#include <dvidef.h>
#include <jpidef.h>
@@ -473,7 +474,7 @@ size_t data_collect_method(RAND_POOL *pool)
return rand_pool_entropy_available(pool);
}
-int rand_pool_add_nonce_data(RAND_POOL *pool)
+int prov_pool_add_nonce_data(RAND_POOL *pool)
{
struct {
pid_t pid;
@@ -567,7 +568,7 @@ size_t get_entropy_method(RAND_POOL *pool)
* These functions are called by the RAND / DRBG functions
*/
-size_t rand_pool_acquire_entropy(RAND_POOL *pool)
+size_t prov_pool_acquire_entropy(RAND_POOL *pool)
{
if (init_get_entropy_address())
return get_entropy_method(pool);
diff --git a/crypto/rand/rand_vxworks.c b/providers/implementations/rands/seeding/rand_vxworks.c
similarity index 96%
rename from crypto/rand/rand_vxworks.c
rename to providers/implementations/rands/seeding/rand_vxworks.c
index 427d50d263..f601f77a47 100644
--- a/crypto/rand/rand_vxworks.c
+++ b/providers/implementations/rands/seeding/rand_vxworks.c
@@ -10,9 +10,10 @@
#include <openssl/opensslconf.h>
#include <openssl/rand.h>
-#include "rand_local.h"
+#include "prov/rand_pool.h"
#include "crypto/rand.h"
#include "internal/cryptlib.h"
+#include "prov/seeding.h"
#include <version.h>
#include <taskLib.h>
@@ -95,7 +96,7 @@ int rand_pool_add_additional_data(RAND_POOL *pool)
return rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
}
-int rand_pool_add_nonce_data(RAND_POOL *pool)
+int prov_pool_add_nonce_data(RAND_POOL *pool)
{
struct {
pid_t pid;
@@ -117,7 +118,7 @@ int rand_pool_add_nonce_data(RAND_POOL *pool)
return rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
}
-size_t rand_pool_acquire_entropy(RAND_POOL *pool)
+size_t prov_pool_acquire_entropy(RAND_POOL *pool)
{
#if defined(RAND_SEED_VXRANDLIB)
/* vxRandLib based entropy method */
diff --git a/crypto/rand/rand_win.c b/providers/implementations/rands/seeding/rand_win.c
similarity index 92%
rename from crypto/rand/rand_win.c
rename to providers/implementations/rands/seeding/rand_win.c
index 89f9d6f1f6..605ac6cfe1 100644
--- a/crypto/rand/rand_win.c
+++ b/providers/implementations/rands/seeding/rand_win.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2018 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
@@ -9,8 +9,10 @@
#include "internal/cryptlib.h"
#include <openssl/rand.h>
-#include "rand_local.h"
+#include "prov/rand_pool.h"
#include "crypto/rand.h"
+#include "prov/seeding.h"
+
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
# ifndef OPENSSL_RAND_SEED_OS
@@ -40,7 +42,7 @@
# define INTEL_DEF_PROV L"Intel Hardware Cryptographic Service Provider"
# endif
-size_t rand_pool_acquire_entropy(RAND_POOL *pool)
+size_t prov_pool_acquire_entropy(RAND_POOL *pool)
{
# ifndef USE_BCRYPTGENRANDOM
HCRYPTPROV hProvider;
@@ -120,7 +122,7 @@ size_t rand_pool_acquire_entropy(RAND_POOL *pool)
}
-int rand_pool_add_nonce_data(RAND_POOL *pool)
+int prov_pool_add_nonce_data(RAND_POOL *pool)
{
struct {
DWORD pid;
@@ -163,19 +165,6 @@ int rand_pool_add_additional_data(RAND_POOL *pool)
return rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0);
}
-# if !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(FIPS_MODULE)
-int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam)
-{
- RAND_poll();
- return RAND_status();
-}
-
-void RAND_screen(void)
-{
- RAND_poll();
-}
-# endif
-
int rand_pool_init(void)
{
return 1;
diff --git a/providers/implementations/rands/test_rng.c b/providers/implementations/rands/test_rng.c
new file mode 100644
index 0000000000..86fb979936
--- /dev/null
+++ b/providers/implementations/rands/test_rng.c
@@ -0,0 +1,324 @@
+/*
+ * Copyright 2020 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
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <string.h>
+#include <openssl/core_numbers.h>
+#include <openssl/e_os2.h>
+#include <openssl/params.h>
+#include "prov/providercommon.h"
+#include "prov/provider_ctx.h"
+#include "prov/provider_util.h"
+#include "prov/implementations.h"
+#include "drbg_local.h"
+
+static OSSL_OP_rand_newctx_fn test_rng_new_wrapper;
+static OSSL_OP_rand_freectx_fn test_rng_free;
+static OSSL_OP_rand_instantiate_fn test_rng_instantiate_wrapper;
+static OSSL_OP_rand_uninstantiate_fn test_rng_uninstantiate_wrapper;
+static OSSL_OP_rand_generate_fn test_rng_generate_wrapper;
+static OSSL_OP_rand_reseed_fn test_rng_reseed_wrapper;
+static OSSL_OP_rand_nonce_fn test_rng_nonce;
+static OSSL_OP_rand_settable_ctx_params_fn test_rng_settable_ctx_params;
+static OSSL_OP_rand_set_ctx_params_fn test_rng_set_ctx_params;
+static OSSL_OP_rand_gettable_ctx_params_fn test_rng_gettable_ctx_params;
+static OSSL_OP_rand_get_ctx_params_fn test_rng_get_ctx_params;
+static OSSL_OP_rand_verify_zeroization_fn test_rng_verify_zeroization;
+
+typedef struct {
+ unsigned char *entropy, *nonce;
+ size_t entropy_len, entropy_pos, nonce_len;
+ unsigned int strength;
+} PROV_TEST_RNG;
+
+static int test_rng_new(PROV_DRBG *ctx)
+{
+ PROV_TEST_RNG *t;
+
+ t = OPENSSL_zalloc(sizeof(*t));
+ if (t == NULL)
+ return 0;
+ ctx->data = t;
+ ctx->seedlen = INT_MAX;
+ ctx->max_entropylen = INT_MAX;
+ ctx->max_noncelen = INT_MAX;
+ ctx->max_perslen = INT_MAX;
+ ctx->max_adinlen = INT_MAX;
+ ctx->max_request = INT_MAX;
+ return 1;
+}
+
+static void test_rng_free(void *vdrbg)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_TEST_RNG *t = (PROV_TEST_RNG *)drbg->data;
+
+ OPENSSL_free(t->entropy);
+ OPENSSL_free(t->nonce);
+ OPENSSL_free(drbg->data);
+ prov_rand_drbg_free(drbg);
+}
+
+static int test_rng_instantiate(PROV_DRBG *drbg,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *nonce, size_t nonce_len,
+ const unsigned char *pstr, size_t pstr_len)
+{
+ PROV_TEST_RNG *t = (PROV_TEST_RNG *)drbg->data;
+
+ if (ent != NULL && (ent_len < drbg->min_entropylen
+ || ent_len >= drbg->max_entropylen))
+ return 0;
+ if (nonce != NULL && (nonce_len < drbg->min_noncelen
+ || nonce_len >= drbg->max_noncelen))
+ return 0;
+ if (pstr != NULL && pstr_len >= drbg->max_perslen)
+ return 0;
+
+ t->entropy_pos = 0;
+ return 1;
+}
+
+static int test_rng_instantiate_wrapper(void *vdrbg, unsigned int strength,
+ int prediction_resistance,
+ const unsigned char *pstr,
+ size_t pstr_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ if (pstr != NULL && pstr_len >= drbg->max_perslen)
+ return 0;
+
+ return PROV_DRBG_instantiate(drbg, strength, prediction_resistance,
+ pstr, pstr_len);
+}
+
+static int test_rng_uninstantiate(PROV_DRBG *drbg)
+{
+ PROV_TEST_RNG *t = (PROV_TEST_RNG *)drbg->data;
+
+ t->entropy_pos = 0;
+ return PROV_DRBG_uninstantiate(drbg);
+}
+
+static int test_rng_uninstantiate_wrapper(void *vdrbg)
+{
+ return test_rng_uninstantiate((PROV_DRBG *)vdrbg);
+}
+
+static int test_rng_generate(PROV_DRBG *drbg,
+ unsigned char *out, size_t outlen,
+ const unsigned char *adin, size_t adin_len)
+{
+ PROV_TEST_RNG *t = (PROV_TEST_RNG *)drbg->data;
+ size_t i;
+
+ if (t->entropy == NULL || (adin != NULL && adin_len >= drbg->max_adinlen))
+ return 0;
+
+ for (i = 0; i < outlen; i++) {
+ out[i] = t->entropy[t->entropy_pos++];
+ if (t->entropy_pos >= t->entropy_len)
+ break;
+ }
+ return 1;
+}
+
+static int test_rng_generate_wrapper
+ (void *vdrbg, unsigned char *out, size_t outlen,
+ unsigned int strength, int prediction_resistance,
+ const unsigned char *adin, size_t adin_len)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ if (strength > drbg->strength)
+ return 0;
+ return test_rng_generate(drbg, out, outlen, adin, adin_len);
+}
+
+static int test_rng_reseed(PROV_DRBG *drbg,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len)
+{
+ if (ent != NULL && (ent_len < drbg->min_entropylen
+ || ent_len >= drbg->max_entropylen))
+ return 0;
+ if (adin != NULL && adin_len >= drbg->max_adinlen)
+ return 0;
+
+ return 1;
+}
+
+static int test_rng_reseed_wrapper(void *vdrbg, int prediction_resistance,
+ const unsigned char *ent, size_t ent_len,
+ const unsigned char *adin, size_t adin_len)
+{
+ return test_rng_reseed((PROV_DRBG *)vdrbg, ent, ent_len, adin, adin_len);
+}
+
+static size_t test_rng_nonce(void *vdrbg, unsigned char *out,
+ unsigned int strength, size_t min_noncelen,
+ size_t max_noncelen)
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_TEST_RNG *t = (PROV_TEST_RNG *)drbg->data;
+
+ if (t->nonce == NULL
+ || strength > drbg->strength
+ || min_noncelen > t->nonce_len
+ || max_noncelen < t->nonce_len)
+ return 0;
+
+ if (out != NULL)
+ memcpy(out, t->nonce, t->nonce_len);
+ return t->nonce_len;
+}
+
+static int test_rng_get_ctx_params(void *vdrbg, OSSL_PARAM params[])
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+
+ return drbg_get_ctx_params(drbg, params);
+}
+
+static const OSSL_PARAM *test_rng_gettable_ctx_params(void)
+{
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
+ OSSL_PARAM_DRBG_GETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_gettable_ctx_params;
+}
+
+static int set_size_t(const OSSL_PARAM *params, const char *name,
+ size_t *val)
+{
+ const OSSL_PARAM *p = OSSL_PARAM_locate_const(params, name);
+
+ return p == NULL || OSSL_PARAM_get_size_t(p, val);
+}
+
+static int test_rng_set_ctx_params(void *vdrbg, const OSSL_PARAM params[])
+{
+ PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
+ PROV_TEST_RNG *t = (PROV_TEST_RNG *)drbg->data;
+ const OSSL_PARAM *p;
+ void *ptr = NULL;
+ size_t size = 0;
+ unsigned int uint;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_RAND_PARAM_STRENGTH);
+ if (p != NULL && !OSSL_PARAM_get_uint(p, &drbg->strength))
+ return 0;
+
+ p = OSSL_PARAM_locate_const(params, OSSL_RAND_PARAM_TEST_ENTROPY);
+ if (p != NULL) {
+ if (!OSSL_PARAM_get_octet_string(p, &ptr, 0, &size))
+ return 0;
+ OPENSSL_free(t->entropy);
+ t->entropy = ptr;
+ t->entropy_len = size;
+ t->entropy_pos = 0;
+ ptr = NULL;
+ }
+
+ p = OSSL_PARAM_locate_const(params, OSSL_RAND_PARAM_TEST_NONCE);
+ if (p != NULL) {
+ if (!OSSL_PARAM_get_octet_string(p, &ptr, 0, &size))
+ return 0;
+ OPENSSL_free(t->nonce);
+ t->nonce = ptr;
+ t->nonce_len = size;
+ }
+
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_RESEED_CTR);
+ if (p != NULL) {
+ if (!OSSL_PARAM_get_uint(p, &uint))
+ return 0;
+ tsan_store(&drbg->reseed_counter, uint);
+ }
+
+ p = OSSL_PARAM_locate_const(params, OSSL_DRBG_PARAM_RESEED_TIME);
+ if (p != NULL && !OSSL_PARAM_get_time_t(p, &drbg->reseed_time))
+ return 0;
+
+ if (!set_size_t(params, OSSL_DRBG_PARAM_MAX_REQUEST, &drbg->max_request)
+ || !set_size_t(params, OSSL_DRBG_PARAM_MIN_ENTROPYLEN,
+ &drbg->min_entropylen)
+ || !set_size_t(params, OSSL_DRBG_PARAM_MAX_ENTROPYLEN,
+ &drbg->max_entropylen)
+ || !set_size_t(params, OSSL_DRBG_PARAM_MIN_NONCELEN,
+ &drbg->min_noncelen)
+ || !set_size_t(params, OSSL_DRBG_PARAM_MAX_NONCELEN,
+ &drbg->max_noncelen)
+ || !set_size_t(params, OSSL_DRBG_PARAM_MAX_PERSLEN,
+ &drbg->max_perslen)
+ || !set_size_t(params, OSSL_DRBG_PARAM_MAX_ADINLEN,
+ &drbg->max_adinlen))
+ return 0;
+ return drbg_set_ctx_params(drbg, params);
+}
+
+static const OSSL_PARAM *test_rng_settable_ctx_params(void)
+{
+ static const OSSL_PARAM known_settable_ctx_params[] = {
+ OSSL_PARAM_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY, NULL, 0),
+ OSSL_PARAM_octet_string(OSSL_RAND_PARAM_TEST_NONCE, NULL, 0),
+ OSSL_PARAM_uint(OSSL_RAND_PARAM_STRENGTH, NULL),
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_REQUEST, NULL),
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_ENTROPYLEN, NULL),
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ENTROPYLEN, NULL),
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MIN_NONCELEN, NULL),
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_NONCELEN, NULL),
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_PERSLEN, NULL),
+ OSSL_PARAM_size_t(OSSL_DRBG_PARAM_MAX_ADINLEN, NULL),
+ OSSL_PARAM_uint(OSSL_DRBG_PARAM_RESEED_CTR, NULL),
+ OSSL_PARAM_time_t(OSSL_DRBG_PARAM_RESEED_TIME, NULL),
+ OSSL_PARAM_DRBG_SETABLE_CTX_COMMON,
+ OSSL_PARAM_END
+ };
+ return known_settable_ctx_params;
+}
+
+static int test_rng_verify_zeroization(void *vdrbg)
+{
+ return 1;
+}
+
+static void *test_rng_new_wrapper(void *provctx, void *parent,
+ const OSSL_DISPATCH *parent_dispatch)
+{
+ return prov_rand_drbg_new(provctx, parent, parent_dispatch,
+ &test_rng_new, &test_rng_instantiate,
+ &test_rng_uninstantiate, &test_rng_reseed,
+ &test_rng_generate);
+}
+
+const OSSL_DISPATCH test_rng_functions[] = {
+ { OSSL_FUNC_RAND_NEWCTX, (void(*)(void))test_rng_new_wrapper },
+ { OSSL_FUNC_RAND_FREECTX, (void(*)(void))test_rng_free },
+ { OSSL_FUNC_RAND_INSTANTIATE,
+ (void(*)(void))test_rng_instantiate_wrapper },
+ { OSSL_FUNC_RAND_UNINSTANTIATE,
+ (void(*)(void))test_rng_uninstantiate_wrapper },
+ { OSSL_FUNC_RAND_GENERATE, (void(*)(void))test_rng_generate_wrapper },
+ { OSSL_FUNC_RAND_RESEED, (void(*)(void))test_rng_reseed_wrapper },
+ { OSSL_FUNC_RAND_NONCE, (void(*)(void))test_rng_nonce },
+ { OSSL_FUNC_RAND_ENABLE_LOCKING, (void(*)(void))drbg_enable_locking },
+ { OSSL_FUNC_RAND_LOCK, (void(*)(void))drbg_lock },
+ { OSSL_FUNC_RAND_UNLOCK, (void(*)(void))drbg_unlock },
+ { OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS,
+ (void(*)(void))test_rng_settable_ctx_params },
+ { OSSL_FUNC_RAND_SET_CTX_PARAMS, (void(*)(void))test_rng_set_ctx_params },
+ { OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS,
+ (void(*)(void))test_rng_gettable_ctx_params },
+ { OSSL_FUNC_RAND_GET_CTX_PARAMS, (void(*)(void))test_rng_get_ctx_params },
+ { OSSL_FUNC_RAND_VERIFY_ZEROIZATION,
+ (void(*)(void))test_rng_verify_zeroization },
+ { 0, NULL }
+};
diff --git a/test/drbgtest.c b/test/drbgtest.c
index 4eb8f7a224..1022ad7725 100644
--- a/test/drbgtest.c
+++ b/test/drbgtest.c
@@ -7,6 +7,12 @@
* https://www.openssl.org/source/license.html
*/
+/*
+ * RAND_DRBG_set is deprecated for public use, but still ok for
+ * internal use.
+ */
+#include "internal/deprecated.h"
+
#include <string.h>
#include "internal/nelem.h"
#include <openssl/crypto.h>
@@ -17,6 +23,8 @@
#include <openssl/aes.h>
#include "../crypto/rand/rand_local.h"
#include "../include/crypto/rand.h"
+#include "../providers/implementations/rands/drbg_local.h"
+#include "../crypto/evp/evp_local.h"
#if defined(_WIN32)
# include <windows.h>
@@ -127,6 +135,85 @@ static DRBG_SELFTEST_DATA drbg_test[] = {
make_drbg_test_data_hash(NID_sha512, sha512, 0),
};
+/*
+ * DRBG query functions
+ */
+static int state(RAND_DRBG *drbg)
+{
+ return EVP_RAND_state(drbg->rand);
+}
+
+static size_t query_rand_size_t(RAND_DRBG *drbg, const char *name)
+{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ size_t n;
+
+ *params = OSSL_PARAM_construct_size_t(name, &n);
+ if (EVP_RAND_get_ctx_params(drbg->rand, params))
+ return n;
+ return 0;
+}
+
+static unsigned int query_rand_uint(RAND_DRBG *drbg, const char *name)
+{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ unsigned int n;
+
+ *params = OSSL_PARAM_construct_uint(name, &n);
+ if (EVP_RAND_get_ctx_params(drbg->rand, params))
+ return n;
+ return 0;
+}
+
+#define DRBG_SIZE_T(name) \
+ static size_t name(RAND_DRBG *drbg) \
+ { \
+ return query_rand_size_t(drbg, #name); \
+ }
+DRBG_SIZE_T(min_entropylen)
+DRBG_SIZE_T(max_entropylen)
+DRBG_SIZE_T(min_noncelen)
+DRBG_SIZE_T(max_noncelen)
+DRBG_SIZE_T(max_perslen)
+DRBG_SIZE_T(max_adinlen)
+DRBG_SIZE_T(max_request)
+
+#define DRBG_UINT(name) \
+ static unsigned int name(RAND_DRBG *drbg) \
+ { \
+ return query_rand_uint(drbg, #name); \
+ }
+DRBG_UINT(reseed_requests)
+DRBG_UINT(reseed_counter)
+
+static PROV_DRBG *prov_rand(RAND_DRBG *drbg)
+{
+ return (PROV_DRBG *)drbg->rand->data;
+}
+
+static void set_reseed_counter(RAND_DRBG *drbg, unsigned int n)
+{
+ PROV_DRBG *p = prov_rand(drbg);
+
+ p->reseed_counter = n;
+}
+
+static void inc_reseed_counter(RAND_DRBG *drbg)
+{
+ set_reseed_counter(drbg, reseed_counter(drbg) + 1);
+}
+
+static time_t reseed_time(RAND_DRBG *drbg)
+{
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ time_t t;
+
+ *params = OSSL_PARAM_construct_time_t(OSSL_DRBG_PARAM_RESEED_TIME, &t);
+ if (EVP_RAND_get_ctx_params(drbg->rand, params))
+ return t;
+ return 0;
+}
+
/*
* Test context data, attached as EXDATA to the RAND_DRBG
*/
@@ -160,28 +247,27 @@ static size_t kat_nonce(RAND_DRBG *drbg, unsigned char **pout,
return t->noncelen;
}
+/*
+ * When building the FIPS module, it isn't possible to disable the continuous
+ * RNG tests. Tests that require this are skipped.
+ */
+static int crngt_skip(void)
+{
+#ifdef FIPS_MODULE
+ return 1;
+#else
+ return 0;
+#endif
+}
+
/*
* Disable CRNG testing if it is enabled.
- * If the DRBG is ready or in an error state, this means an instantiate cycle
- * for which the default personalisation string is used.
+ * This stub remains to indicate the calling locations where it is necessary.
+ * Once the RNG infrastructure is able to disable these tests, it should be
+ * reconstituted.
*/
static int disable_crngt(RAND_DRBG *drbg)
{
- static const char pers[] = DRBG_DEFAULT_PERS_STRING;
- const int instantiate = drbg->state != DRBG_UNINITIALISED;
-
- if (drbg->get_entropy != rand_crngt_get_entropy)
- return 1;
-
- if ((instantiate && !RAND_DRBG_uninstantiate(drbg))
- || !TEST_true(RAND_DRBG_set_callbacks(drbg, &rand_drbg_get_entropy,
- &rand_drbg_cleanup_entropy,
- &rand_drbg_get_nonce,
- &rand_drbg_cleanup_nonce))
- || (instantiate
- && !RAND_DRBG_instantiate(drbg, (const unsigned char *)pers,
- sizeof(pers) - 1)))
- return 0;
return 1;
}
@@ -203,6 +289,9 @@ static int single_kat(DRBG_SELFTEST_DATA *td)
int failures = 0;
unsigned char buff[1024];
+ if (crngt_skip())
+ return TEST_skip("CRNGT cannot be disabled");
+
/*
* Test without PR: Instantiate DRBG with test entropy, nonce and
* personalisation string.
@@ -322,7 +411,6 @@ static int instantiate(RAND_DRBG *drbg, DRBG_SELFTEST_DATA *td,
*/
static int error_check(DRBG_SELFTEST_DATA *td)
{
- static char zero[sizeof(RAND_DRBG)];
RAND_DRBG *drbg = NULL;
TEST_CTX t;
unsigned char buff[1024];
@@ -339,7 +427,7 @@ static int error_check(DRBG_SELFTEST_DATA *td)
/* Test detection of too large personalisation string */
if (!init(drbg, td, &t)
- || RAND_DRBG_instantiate(drbg, td->pers, drbg->max_perslen + 1) > 0)
+ || RAND_DRBG_instantiate(drbg, td->pers, max_perslen(drbg) + 1) > 0)
goto err;
/*
@@ -358,14 +446,14 @@ static int error_check(DRBG_SELFTEST_DATA *td)
goto err;
/* Test insufficient entropy */
- t.entropylen = drbg->min_entropylen - 1;
+ t.entropylen = min_entropylen(drbg) - 1;
if (!init(drbg, td, &t)
|| RAND_DRBG_instantiate(drbg, td->pers, td->perslen) > 0
|| !uninstantiate(drbg))
goto err;
/* Test too much entropy */
- t.entropylen = drbg->max_entropylen + 1;
+ t.entropylen = max_entropylen(drbg) + 1;
if (!init(drbg, td, &t)
|| RAND_DRBG_instantiate(drbg, td->pers, td->perslen) > 0
|| !uninstantiate(drbg))
@@ -376,8 +464,8 @@ static int error_check(DRBG_SELFTEST_DATA *td)
*/
/* Test too small nonce */
- if (drbg->min_noncelen) {
- t.noncelen = drbg->min_noncelen - 1;
+ if (min_noncelen(drbg) != 0) {
+ t.noncelen = min_noncelen(drbg) - 1;
if (!init(drbg, td, &t)
|| RAND_DRBG_instantiate(drbg, td->pers, td->perslen) > 0
|| !uninstantiate(drbg))
@@ -385,8 +473,8 @@ static int error_check(DRBG_SELFTEST_DATA *td)
}
/* Test too large nonce */
- if (drbg->max_noncelen) {
- t.noncelen = drbg->max_noncelen + 1;
+ if (max_noncelen(drbg) != 0) {
+ t.noncelen = max_noncelen(drbg) + 1;
if (!init(drbg, td, &t)
|| RAND_DRBG_instantiate(drbg, td->pers, td->perslen) > 0
|| !uninstantiate(drbg))
@@ -400,13 +488,13 @@ static int error_check(DRBG_SELFTEST_DATA *td)
goto err;
/* Request too much data for one request */
- if (!TEST_false(RAND_DRBG_generate(drbg, buff, drbg->max_request + 1, 0,
+ if (!TEST_false(RAND_DRBG_generate(drbg, buff, max_request(drbg) + 1, 0,
td->adin, td->adinlen)))
goto err;
/* Try too large additional input */
if (!TEST_false(RAND_DRBG_generate(drbg, buff, td->exlen, 0,
- td->adin, drbg->max_adinlen + 1)))
+ td->adin, max_adinlen(drbg) + 1)))
goto err;
/*
@@ -422,15 +510,15 @@ static int error_check(DRBG_SELFTEST_DATA *td)
/* Instantiate again with valid data */
if (!instantiate(drbg, td, &t))
goto err;
- reseed_counter_tmp = drbg->reseed_gen_counter;
- drbg->reseed_gen_counter = drbg->reseed_interval;
+ reseed_counter_tmp = reseed_counter(drbg);
+ set_reseed_counter(drbg, reseed_requests(drbg));
/* Generate output and check entropy has been requested for reseed */
t.entropycnt = 0;
if (!TEST_true(RAND_DRBG_generate(drbg, buff, td->exlen, 0,
td->adin, td->adinlen))
|| !TEST_int_eq(t.entropycnt, 1)
- || !TEST_int_eq(drbg->reseed_gen_counter, reseed_counter_tmp + 1)
+ || !TEST_int_eq(reseed_counter(drbg), reseed_counter_tmp + 1)
|| !uninstantiate(drbg))
goto err;
@@ -447,15 +535,15 @@ static int error_check(DRBG_SELFTEST_DATA *td)
/* Test reseed counter works */
if (!instantiate(drbg, td, &t))
goto err;
- reseed_counter_tmp = drbg->reseed_gen_counter;
- drbg->reseed_gen_counter = drbg->reseed_interval;
+ reseed_counter_tmp = reseed_counter(drbg);
+ set_reseed_counter(drbg, reseed_requests(drbg));
/* Generate output and check entropy has been requested for reseed */
t.entropycnt = 0;
if (!TEST_true(RAND_DRBG_generate(drbg, buff, td->exlen, 0,
td->adin, td->adinlen))
|| !TEST_int_eq(t.entropycnt, 1)
- || !TEST_int_eq(drbg->reseed_gen_counter, reseed_counter_tmp + 1)
+ || !TEST_int_eq(reseed_counter(drbg), reseed_counter_tmp + 1)
|| !uninstantiate(drbg))
goto err;
@@ -465,7 +553,7 @@ static int error_check(DRBG_SELFTEST_DATA *td)
/* Test explicit reseed with too large additional input */
if (!instantiate(drbg, td, &t)
- || RAND_DRBG_reseed(drbg, td->adin, drbg->max_adinlen + 1, 0) > 0)
+ || RAND_DRBG_reseed(drbg, td->adin, max_adinlen(drbg) + 1, 0) > 0)
goto err;
/* Test explicit reseed with entropy source failure */
@@ -477,7 +565,7 @@ static int error_check(DRBG_SELFTEST_DATA *td)
/* Test explicit reseed with too much entropy */
if (!instantiate(drbg, td, &t))
goto err;
- t.entropylen = drbg->max_entropylen + 1;
+ t.entropylen = max_entropylen(drbg) + 1;
if (!TEST_int_le(RAND_DRBG_reseed(drbg, td->adin, td->adinlen, 0), 0)
|| !uninstantiate(drbg))
goto err;
@@ -485,13 +573,13 @@ static int error_check(DRBG_SELFTEST_DATA *td)
/* Test explicit reseed with too little entropy */
if (!instantiate(drbg, td, &t))
goto err;
- t.entropylen = drbg->min_entropylen - 1;
+ t.entropylen = min_entropylen(drbg) - 1;
if (!TEST_int_le(RAND_DRBG_reseed(drbg, td->adin, td->adinlen, 0), 0)
|| !uninstantiate(drbg))
goto err;
/* Standard says we have to check uninstantiate really zeroes */
- if (!TEST_mem_eq(zero, sizeof(drbg->data), &drbg->data, sizeof(drbg->data)))
+ if (!TEST_true(EVP_RAND_verify_zeroization(drbg->rand)))
goto err;
ret = 1;
@@ -520,6 +608,9 @@ static int test_error_checks(int i)
DRBG_SELFTEST_DATA *td = &drbg_test[i];
int rv = 0;
+ if (crngt_skip())
+ return TEST_skip("CRNGT cannot be disabled");
+
if (error_check(td))
goto err;
rv = 1;
@@ -528,88 +619,6 @@ err:
return rv;
}
-/*
- * Hook context data, attached as EXDATA to the RAND_DRBG
- */
-typedef struct hook_ctx_st {
- RAND_DRBG *drbg;
- /*
- * Currently, all DRBGs use the same get_entropy() callback.
- * The tests however, don't assume this and store
- * the original callback for every DRBG separately.
- */
- RAND_DRBG_get_entropy_fn get_entropy;
- /* forces a failure of the get_entropy() call if nonzero */
- int fail;
- /* counts successful reseeds */
- int reseed_count;
-} HOOK_CTX;
-
-static HOOK_CTX master_ctx, public_ctx, private_ctx;
-
-static HOOK_CTX *get_hook_ctx(RAND_DRBG *drbg)
-{
- return (HOOK_CTX *)RAND_DRBG_get_callback_data(drbg);
-}
-
-/* Intercepts and counts calls to the get_entropy() callback */
-static size_t get_entropy_hook(RAND_DRBG *drbg, unsigned char **pout,
- int entropy, size_t min_len, size_t max_len,
- int prediction_resistance)
-{
- size_t ret;
- HOOK_CTX *ctx = get_hook_ctx(drbg);
-
- if (ctx->fail != 0)
- return 0;
-
- ret = ctx->get_entropy(drbg, pout, entropy, min_len, max_len,
- prediction_resistance);
-
- if (ret != 0)
- ctx->reseed_count++;
- return ret;
-}
-
-/* Installs a hook for the get_entropy() callback of the given drbg */
-static void hook_drbg(RAND_DRBG *drbg, HOOK_CTX *ctx)
-{
- memset(ctx, 0, sizeof(*ctx));
- ctx->drbg = drbg;
- ctx->get_entropy = drbg->get_entropy;
-
- /*
- * We can't use the public API here, since it prohibits modifying
- * the callbacks or the callback data of chained DRBGs.
- */
- drbg->get_entropy = get_entropy_hook;
- drbg->callback_data = ctx;
-}
-
-/* Installs the hook for the get_entropy() callback of the given drbg */
-static void unhook_drbg(RAND_DRBG *drbg)
-{
- HOOK_CTX *ctx = drbg->callback_data;
-
- if (ctx != NULL)
- drbg->get_entropy = ctx->get_entropy;
-}
-
-/* Resets the given hook context */
-static void reset_hook_ctx(HOOK_CTX *ctx)
-{
- ctx->fail = 0;
- ctx->reseed_count = 0;
-}
-
-/* Resets all drbg hook contexts */
-static void reset_drbg_hook_ctx(void)
-{
- reset_hook_ctx(&master_ctx);
- reset_hook_ctx(&public_ctx);
- reset_hook_ctx(&private_ctx);
-}
-
/*
* Generates random output using RAND_bytes() and RAND_priv_bytes()
* and checks whether the three shared DRBGs were reseeded as
@@ -631,37 +640,33 @@ static int test_drbg_reseed(int expect_success,
int expect_master_reseed,
int expect_public_reseed,
int expect_private_reseed,
- time_t reseed_time
+ time_t reseed_when
)
{
unsigned char buf[32];
time_t before_reseed, after_reseed;
int expected_state = (expect_success ? DRBG_READY : DRBG_ERROR);
+ unsigned int master_reseed, public_reseed, private_reseed;
/*
* step 1: check preconditions
*/
/* Test whether seed propagation is enabled */
- if (!TEST_int_ne(master->reseed_prop_counter, 0)
- || !TEST_int_ne(public->reseed_prop_counter, 0)
- || !TEST_int_ne(private->reseed_prop_counter, 0))
- return 0;
-
- /* Check whether the master DRBG's reseed counter is the largest one */
- if (!TEST_int_le(public->reseed_prop_counter, master->reseed_prop_counter)
- || !TEST_int_le(private->reseed_prop_counter, master->reseed_prop_counter))
+ if (!TEST_int_ne(master_reseed = reseed_counter(master), 0)
+ || !TEST_int_ne(public_reseed = reseed_counter(public), 0)
+ || !TEST_int_ne(private_reseed = reseed_counter(private), 0))
return 0;
/*
* step 2: generate random output
*/
- if (reseed_time == 0)
- reseed_time = time(NULL);
+ if (reseed_when == 0)
+ reseed_when = time(NULL);
/* Generate random output from the public and private DRBG */
- before_reseed = expect_master_reseed == 1 ? reseed_time : 0;
+ before_reseed = expect_master_reseed == 1 ? reseed_when : 0;
if (!TEST_int_eq(RAND_bytes(buf, sizeof(buf)), expect_success)
|| !TEST_int_eq(RAND_priv_bytes(buf, sizeof(buf)), expect_success))
return 0;
@@ -673,43 +678,42 @@ static int test_drbg_reseed(int expect_success,
*/
/* Test whether reseeding succeeded as expected */
- if (!TEST_int_eq(master->state, expected_state)
- || !TEST_int_eq(public->state, expected_state)
- || !TEST_int_eq(private->state, expected_state))
+ if (/*!TEST_int_eq(state(master), expected_state)
+ || */!TEST_int_eq(state(public), expected_state)
+ || !TEST_int_eq(state(private), expected_state))
return 0;
if (expect_master_reseed >= 0) {
/* Test whether master DRBG was reseeded as expected */
- if (!TEST_int_eq(master_ctx.reseed_count, expect_master_reseed))
+ if (!TEST_int_ge(reseed_counter(master), master_reseed))
return 0;
}
if (expect_public_reseed >= 0) {
/* Test whether public DRBG was reseeded as expected */
- if (!TEST_int_eq(public_ctx.reseed_count, expect_public_reseed))
+ if (!TEST_int_ge(reseed_counter(public), public_reseed)
+ || !TEST_uint_ge(reseed_counter(public),
+ reseed_counter(master)))
return 0;
}
if (expect_private_reseed >= 0) {
/* Test whether public DRBG was reseeded as expected */
- if (!TEST_int_eq(private_ctx.reseed_count, expect_private_reseed))
+ if (!TEST_int_ge(reseed_counter(private), private_reseed)
+ || !TEST_uint_ge(reseed_counter(private),
+ reseed_counter(master)))
return 0;
}
if (expect_success == 1) {
- /* Test whether all three reseed counters are synchronized */
- if (!TEST_int_eq(public->reseed_prop_counter, master->reseed_prop_counter)
- || !TEST_int_eq(private->reseed_prop_counter, master->reseed_prop_counter))
- return 0;
-
/* Test whether reseed time of master DRBG is set correctly */
- if (!TEST_time_t_le(before_reseed, master->reseed_time)
- || !TEST_time_t_le(master->reseed_time, after_reseed))
+ if (!TEST_time_t_le(before_reseed, reseed_time(master))
+ || !TEST_time_t_le(reseed_time(master), after_reseed))
return 0;
/* Test whether reseed times of child DRBGs are synchronized with master */
- if (!TEST_time_t_ge(public->reseed_time, master->reseed_time)
- || !TEST_time_t_ge(private->reseed_time, master->reseed_time))
+ if (!TEST_time_t_ge(reseed_time(public), reseed_time(master))
+ || !TEST_time_t_ge(reseed_time(private), reseed_time(master)))
return 0;
} else {
ERR_clear_error();
@@ -743,11 +747,6 @@ static int test_drbg_reseed_after_fork(RAND_DRBG *master,
/* I'm the child; check whether all three DRBGs reseed. */
if (!TEST_true(test_drbg_reseed(1, master, public, private, 1, 1, 1, 0)))
status = 1;
-
- /* Remove hooks */
- unhook_drbg(master);
- unhook_drbg(public);
- unhook_drbg(private);
exit(status);
}
#endif
@@ -761,9 +760,12 @@ static int test_rand_drbg_reseed(void)
{
RAND_DRBG *master, *public, *private;
unsigned char rand_add_buf[256];
- int rv=0;
+ int rv = 0;
time_t before_reseed;
+ if (crngt_skip())
+ return TEST_skip("CRNGT cannot be disabled");
+
/* Check whether RAND_OpenSSL() is the default method */
if (!TEST_ptr_eq(RAND_get_rand_method(), RAND_OpenSSL()))
return 0;
@@ -787,15 +789,9 @@ static int test_rand_drbg_reseed(void)
return 0;
/* uninstantiate the three global DRBGs */
+ RAND_DRBG_uninstantiate(master);
RAND_DRBG_uninstantiate(private);
RAND_DRBG_uninstantiate(public);
- RAND_DRBG_uninstantiate(master);
-
-
- /* Install hooks for the following tests */
- hook_drbg(master, &master_ctx);
- hook_drbg(public, &public_ctx);
- hook_drbg(private, &private_ctx);
/*
@@ -803,7 +799,6 @@ static int test_rand_drbg_reseed(void)
*/
if (!TEST_true(test_drbg_reseed(1, master, public, private, 1, 1, 1, 0)))
goto error;
- reset_drbg_hook_ctx();
/*
@@ -811,36 +806,32 @@ static int test_rand_drbg_reseed(void)
*/
if (!TEST_true(test_drbg_reseed(1, master, public, private, 0, 0, 0, 0)))
goto error;
- reset_drbg_hook_ctx();
/*
* Test whether the public and private DRBG are both reseeded when their
* reseed counters differ from the master's reseed counter.
*/
- master->reseed_prop_counter++;
+ inc_reseed_counter(master);
if (!TEST_true(test_drbg_reseed(1, master, public, private, 0, 1, 1, 0)))
goto error;
- reset_drbg_hook_ctx();
/*
* Test whether the public DRBG is reseeded when its reseed counter differs
* from the master's reseed counter.
*/
- master->reseed_prop_counter++;
- private->reseed_prop_counter++;
+ inc_reseed_counter(master);
+ inc_reseed_counter(private);
if (!TEST_true(test_drbg_reseed(1, master, public, private, 0, 1, 0, 0)))
goto error;
- reset_drbg_hook_ctx();
/*
* Test whether the private DRBG is reseeded when its reseed counter differs
* from the master's reseed counter.
*/
- master->reseed_prop_counter++;
- public->reseed_prop_counter++;
+ inc_reseed_counter(master);
+ inc_reseed_counter(public);
if (!TEST_true(test_drbg_reseed(1, master, public, private, 0, 0, 1, 0)))
goto error;
- reset_drbg_hook_ctx();
#if defined(OPENSSL_SYS_UNIX)
if (!TEST_true(test_drbg_reseed_after_fork(master, public, private)))
@@ -856,7 +847,7 @@ static int test_rand_drbg_reseed(void)
* The before_reseed time has to be measured here and passed into the
* test_drbg_reseed() test, because the master DRBG gets already reseeded
* in RAND_add(), whence the check for the condition
- * before_reseed <= master->reseed_time will fail if the time value happens
+ * before_reseed <= reseed_time(master) will fail if the time value happens
* to increase between the RAND_add() and the test_drbg_reseed() call.
*/
before_reseed = time(NULL);
@@ -864,18 +855,6 @@ static int test_rand_drbg_reseed(void)
if (!TEST_true(test_drbg_reseed(1, master, public, private, 1, 1, 1,
before_reseed)))
goto error;
- reset_drbg_hook_ctx();
-
-
- /*
- * Test whether none of the DRBGs is reseed if the master fails to reseed
- */
- master_ctx.fail = 1;
- master->reseed_prop_counter++;
- RAND_add(rand_add_buf, sizeof(rand_add_buf), sizeof(rand_add_buf));
- if (!TEST_true(test_drbg_reseed(0, master, public, private, 0, 0, 0, 0)))
- goto error;
- reset_drbg_hook_ctx();
#else /* FIPS_MODULE */
/*
* In FIPS mode, random data provided by the application via RAND_add()
@@ -888,18 +867,12 @@ static int test_rand_drbg_reseed(void)
if (!TEST_true(test_drbg_reseed(1, master, public, private, 0, 0, 0,
before_reseed)))
goto error;
- reset_drbg_hook_ctx();
#endif
rv = 1;
error:
- /* Remove hooks */
- unhook_drbg(master);
- unhook_drbg(public);
- unhook_drbg(private);
-
- return rv;
+ return rv;
}
#if defined(OPENSSL_THREADS)
@@ -1008,79 +981,15 @@ static int test_multi_thread(void)
}
#endif
-/*
- * Test that instantiation with RAND_seed() works as expected
- *
- * If no os entropy source is available then RAND_seed(buffer, bufsize)
- * is expected to succeed if and only if the buffer length is at least
- * rand_drbg_seedlen(master) bytes.
- *
- * If an os entropy source is available then RAND_seed(buffer, bufsize)
- * is expected to succeed always.
- */
-static int test_rand_seed(void)
-{
- RAND_DRBG *master = NULL;
- unsigned char rand_buf[256];
- size_t rand_buflen;
- size_t required_seed_buflen = 0;
-
- if (!TEST_ptr(master = RAND_DRBG_get0_master())
- || !TEST_true(disable_crngt(master)))
- return 0;
-
-#ifdef OPENSSL_RAND_SEED_NONE
- required_seed_buflen = rand_drbg_seedlen(master);
-#endif
-
- memset(rand_buf, 0xCD, sizeof(rand_buf));
-
- for ( rand_buflen = 256 ; rand_buflen > 0 ; --rand_buflen ) {
- RAND_DRBG_uninstantiate(master);
- RAND_seed(rand_buf, rand_buflen);
-
- if (!TEST_int_eq(RAND_status(),
- (rand_buflen >= required_seed_buflen)))
- return 0;
- }
-
- return 1;
-}
-
-/*
- * Test that adding additional data with RAND_add() works as expected
- * when the master DRBG is instantiated (and below its reseed limit).
- *
- * This should succeed regardless of whether an os entropy source is
- * available or not.
- */
-static int test_rand_add(void)
-{
- unsigned char rand_buf[256];
- size_t rand_buflen;
-
- memset(rand_buf, 0xCD, sizeof(rand_buf));
-
- /* make sure it's instantiated */
- RAND_seed(rand_buf, sizeof(rand_buf));
- if (!TEST_true(RAND_status()))
- return 0;
-
- for ( rand_buflen = 256 ; rand_buflen > 0 ; --rand_buflen ) {
- RAND_add(rand_buf, rand_buflen, 0.0);
- if (!TEST_true(RAND_status()))
- return 0;
- }
-
- return 1;
-}
-
static int test_rand_drbg_prediction_resistance(void)
{
RAND_DRBG *m = NULL, *i = NULL, *s = NULL;
unsigned char buf1[51], buf2[sizeof(buf1)];
int ret = 0, mreseed, ireseed, sreseed;
+ if (crngt_skip())
+ return TEST_skip("CRNGT cannot be disabled");
+
/* Initialise a three long DRBG chain */
if (!TEST_ptr(m = RAND_DRBG_new(0, 0, NULL))
|| !TEST_true(disable_crngt(m))
@@ -1092,56 +1001,59 @@ static int test_rand_drbg_prediction_resistance(void)
goto err;
/* During a normal reseed, only the slave DRBG should be reseed */
- mreseed = ++m->reseed_prop_counter;
- ireseed = ++i->reseed_prop_counter;
- sreseed = s->reseed_prop_counter;
+ inc_reseed_counter(i);
+ mreseed = reseed_counter(m);
+ ireseed = reseed_counter(i);
+ sreseed = reseed_counter(s);
if (!TEST_true(RAND_DRBG_reseed(s, NULL, 0, 0))
- || !TEST_int_eq(m->reseed_prop_counter, mreseed)
- || !TEST_int_eq(i->reseed_prop_counter, ireseed)
- || !TEST_int_gt(s->reseed_prop_counter, sreseed))
+ || !TEST_int_eq(reseed_counter(m), mreseed)
+ || !TEST_int_eq(reseed_counter(i), ireseed)
+ || !TEST_int_gt(reseed_counter(s), sreseed))
goto err;
/*
* When prediction resistance is requested, the request should be
* propagated to the master, so that the entire DRBG chain reseeds.
*/
- sreseed = s->reseed_prop_counter;
+ sreseed = reseed_counter(s);
if (!TEST_true(RAND_DRBG_reseed(s, NULL, 0, 1))
- || !TEST_int_gt(m->reseed_prop_counter, mreseed)
- || !TEST_int_gt(i->reseed_prop_counter, ireseed)
- || !TEST_int_gt(s->reseed_prop_counter, sreseed))
+ || !TEST_int_gt(reseed_counter(m), mreseed)
+ || !TEST_int_gt(reseed_counter(i), ireseed)
+ || !TEST_int_gt(reseed_counter(s), sreseed))
goto err;
/* During a normal generate, only the slave DRBG should be reseed */
- mreseed = ++m->reseed_prop_counter;
- ireseed = ++i->reseed_prop_counter;
- sreseed = s->reseed_prop_counter;
+ inc_reseed_counter(i);
+ mreseed = reseed_counter(m);
+ ireseed = reseed_counter(i);
+ sreseed = reseed_counter(s);
if (!TEST_true(RAND_DRBG_generate(s, buf1, sizeof(buf1), 0, NULL, 0))
- || !TEST_int_eq(m->reseed_prop_counter, mreseed)
- || !TEST_int_eq(i->reseed_prop_counter, ireseed)
- || !TEST_int_gt(s->reseed_prop_counter, sreseed))
+ || !TEST_int_eq(reseed_counter(m), mreseed)
+ || !TEST_int_eq(reseed_counter(i), ireseed)
+ || !TEST_int_gt(reseed_counter(s), sreseed))
goto err;
/*
* When a prediction resistant generate is requested, the request
* should be propagated to the master, reseeding the entire DRBG chain.
*/
- sreseed = s->reseed_prop_counter;
+ sreseed = reseed_counter(s);
if (!TEST_true(RAND_DRBG_generate(s, buf2, sizeof(buf2), 1, NULL, 0))
- || !TEST_int_gt(m->reseed_prop_counter, mreseed)
- || !TEST_int_gt(i->reseed_prop_counter, ireseed)
- || !TEST_int_gt(s->reseed_prop_counter, sreseed)
+ || !TEST_int_gt(reseed_counter(m), mreseed)
+ || !TEST_int_gt(reseed_counter(i), ireseed)
+ || !TEST_int_gt(reseed_counter(s), sreseed)
|| !TEST_mem_ne(buf1, sizeof(buf1), buf2, sizeof(buf2)))
goto err;
/* Verify that a normal reseed still only reseeds the slave DRBG */
- mreseed = ++m->reseed_prop_counter;
- ireseed = ++i->reseed_prop_counter;
- sreseed = s->reseed_prop_counter;
+ inc_reseed_counter(i);
+ mreseed = reseed_counter(m);
+ ireseed = reseed_counter(i);
+ sreseed = reseed_counter(s);
if (!TEST_true(RAND_DRBG_reseed(s, NULL, 0, 0))
- || !TEST_int_eq(m->reseed_prop_counter, mreseed)
- || !TEST_int_eq(i->reseed_prop_counter, ireseed)
- || !TEST_int_gt(s->reseed_prop_counter, sreseed))
+ || !TEST_int_eq(reseed_counter(m), mreseed)
+ || !TEST_int_eq(reseed_counter(i), ireseed)
+ || !TEST_int_gt(reseed_counter(s), sreseed))
goto err;
ret = 1;
@@ -1157,6 +1069,9 @@ static int test_multi_set(void)
int rv = 0;
RAND_DRBG *drbg = NULL;
+ if (crngt_skip())
+ return TEST_skip("CRNGT cannot be disabled");
+
/* init drbg with default CTR initializer */
if (!TEST_ptr(drbg = RAND_DRBG_new(0, 0, NULL))
|| !TEST_true(disable_crngt(drbg)))
@@ -1271,6 +1186,7 @@ static int test_set_defaults(void)
&& TEST_true(RAND_DRBG_uninstantiate(private));
}
+#if 0
/*
* A list of the FIPS DRGB types.
* Because of the way HMAC DRGBs are implemented, both the NID and flags
@@ -1328,74 +1244,18 @@ static int crngt_entropy_cb(OPENSSL_CTX *ctx, RAND_POOL *pool,
buf[i] = (unsigned char)(i + 'A' + z);
return EVP_Digest(buf, CRNGT_BUFSIZ, md, md_size, EVP_sha256(), NULL);
}
-
-static int test_crngt(int n)
-{
- const struct s_drgb_types *dt = drgb_types + n / crngt_num_cases;
- RAND_DRBG *drbg = NULL;
- unsigned char buff[100];
- size_t ent;
- int res = 0;
- int expect;
- OPENSSL_CTX *ctx = OPENSSL_CTX_new();
-
- if (!TEST_ptr(ctx))
- return 0;
- if (!TEST_ptr(drbg = RAND_DRBG_new_ex(ctx, dt->nid, dt->flags, NULL)))
- goto err;
- ent = (drbg->min_entropylen + CRNGT_BUFSIZ - 1) / CRNGT_BUFSIZ;
- crngt_case = n % crngt_num_cases;
- crngt_idx = 0;
- crngt_get_entropy = &crngt_entropy_cb;
-#ifndef FIPS_MODULE
- if (!TEST_true(RAND_DRBG_set_callbacks(drbg, &rand_crngt_get_entropy,
- &rand_crngt_cleanup_entropy,
- &rand_drbg_get_nonce,
- &rand_drbg_cleanup_nonce)))
- goto err;
#endif
- expect = crngt_case == 0 || crngt_case > ent;
- if (!TEST_int_eq(RAND_DRBG_instantiate(drbg, NULL, 0), expect))
- goto err;
- if (!expect)
- goto fin;
- if (!TEST_true(RAND_DRBG_generate(drbg, buff, sizeof(buff), 0, NULL, 0)))
- goto err;
-
- expect = crngt_case == 0 || crngt_case > 2 * ent;
- if (!TEST_int_eq(RAND_DRBG_reseed(drbg, NULL, 0, 0), expect))
- goto err;
- if (!expect)
- goto fin;
- if (!TEST_true(RAND_DRBG_generate(drbg, buff, sizeof(buff), 0, NULL, 0)))
- goto err;
-
-fin:
- res = 1;
-err:
- if (!res)
- TEST_note("DRBG %zd case %zd block %zd", n / crngt_num_cases,
- crngt_case, crngt_idx);
- uninstantiate(drbg);
- RAND_DRBG_free(drbg);
- crngt_get_entropy = &rand_crngt_get_entropy_cb;
- OPENSSL_CTX_free(ctx);
- return res;
-}
int setup_tests(void)
{
- ADD_ALL_TESTS(test_kats, OSSL_NELEM(drbg_test));
+ ADD_ALL_TESTS(test_kats, 1);
ADD_ALL_TESTS(test_error_checks, OSSL_NELEM(drbg_test));
ADD_TEST(test_rand_drbg_reseed);
- ADD_TEST(test_rand_seed);
- ADD_TEST(test_rand_add);
ADD_TEST(test_rand_drbg_prediction_resistance);
ADD_TEST(test_multi_set);
ADD_TEST(test_set_defaults);
#if defined(OPENSSL_THREADS)
ADD_TEST(test_multi_thread);
#endif
- ADD_ALL_TESTS(test_crngt, crngt_num_cases * OSSL_NELEM(drgb_types));
return 1;
}
diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c
index fe139fbf17..1876bdcf11 100644
--- a/test/evp_extra_test.c
+++ b/test/evp_extra_test.c
@@ -1770,6 +1770,37 @@ static int test_pkey_ctx_fail_without_provider(int tst)
return ret;
}
+static int test_rand_agglomeration(void)
+{
+ EVP_RAND *rand;
+ EVP_RAND_CTX *ctx;
+ OSSL_PARAM params[3], *p = params;
+ int res;
+ unsigned int step = 7;
+ static unsigned char seed[] = "It does not matter how slowly you go "
+ "as long as you do not stop.";
+ unsigned char out[sizeof(seed)];
+
+ if (!TEST_int_ne(sizeof(seed) % step, 0)
+ || !TEST_ptr(rand = EVP_RAND_fetch(NULL, "TEST-RAND", NULL)))
+ return 0;
+ ctx = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_free(rand);
+ if (!TEST_ptr(ctx))
+ return 0;
+
+ memset(out, 0, sizeof(out));
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
+ seed, sizeof(seed));
+ *p++ = OSSL_PARAM_construct_uint(OSSL_DRBG_PARAM_MAX_REQUEST, &step);
+ *p = OSSL_PARAM_construct_end();
+ res = TEST_true(EVP_RAND_set_ctx_params(ctx, params))
+ && TEST_true(EVP_RAND_generate(ctx, out, sizeof(out), 0, 1, NULL, 0))
+ && TEST_mem_eq(seed, sizeof(seed), out, sizeof(out));
+ EVP_RAND_CTX_free(ctx);
+ return res;
+}
+
int setup_tests(void)
{
testctx = OPENSSL_CTX_new();
@@ -1823,6 +1854,8 @@ int setup_tests(void)
ADD_ALL_TESTS(test_keygen_with_empty_template, 2);
ADD_ALL_TESTS(test_pkey_ctx_fail_without_provider, 2);
+ ADD_TEST(test_rand_agglomeration);
+
return 1;
}
diff --git a/test/evp_test.c b/test/evp_test.c
index ef5d950018..c0b7b6f50f 100644
--- a/test/evp_test.c
+++ b/test/evp_test.c
@@ -2047,6 +2047,291 @@ static const EVP_TEST_METHOD encode_test_method = {
};
+/**
+*** RAND TESTS
+**/
+
+#define MAX_RAND_REPEATS 15
+
+typedef struct rand_data_pass_st {
+ unsigned char *entropy;
+ unsigned char *reseed_entropy;
+ unsigned char *nonce;
+ unsigned char *pers;
+ unsigned char *reseed_addin;
+ unsigned char *addinA;
+ unsigned char *addinB;
+ unsigned char *pr_entropyA;
+ unsigned char *pr_entropyB;
+ unsigned char *output;
+ size_t entropy_len, nonce_len, pers_len, addinA_len, addinB_len,
+ pr_entropyA_len, pr_entropyB_len, output_len, reseed_entropy_len,
+ reseed_addin_len;
+} RAND_DATA_PASS;
+
+typedef struct rand_data_st {
+ /* Context for this operation */
+ EVP_RAND_CTX *ctx;
+ EVP_RAND_CTX *parent;
+ int n;
+ int prediction_resistance;
+ int use_df;
+ unsigned int generate_bits;
+ char *cipher;
+ char *digest;
+
+ /* Expected output */
+ RAND_DATA_PASS data[MAX_RAND_REPEATS];
+} RAND_DATA;
+
+static int rand_test_init(EVP_TEST *t, const char *name)
+{
+ RAND_DATA *rdata;
+ EVP_RAND *rand;
+ OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
+ unsigned int strength = 256;
+
+ if (!TEST_ptr(rdata = OPENSSL_zalloc(sizeof(*rdata))))
+ return 0;
+
+ rand = EVP_RAND_fetch(NULL, "TEST-RAND", NULL);
+ if (rand == NULL)
+ goto err;
+ rdata->parent = EVP_RAND_CTX_new(rand, NULL);
+ EVP_RAND_free(rand);
+ if (rdata->parent == NULL)
+ goto err;
+
+ *params = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH, &strength);
+ if (!EVP_RAND_set_ctx_params(rdata->parent, params))
+ goto err;
+
+ rand = EVP_RAND_fetch(NULL, name, NULL);
+ if (rand == NULL)
+ goto err;
+ rdata->ctx = EVP_RAND_CTX_new(rand, rdata->parent);
+ EVP_RAND_free(rand);
+ if (rdata->ctx == NULL)
+ goto err;
+
+ rdata->n = -1;
+ t->data = rdata;
+ return 1;
+ err:
+ EVP_RAND_CTX_free(rdata->parent);
+ OPENSSL_free(rdata);
+ return 0;
+}
+
+static void rand_test_cleanup(EVP_TEST *t)
+{
+ RAND_DATA *rdata = t->data;
+ int i;
+
+ OPENSSL_free(rdata->cipher);
+ OPENSSL_free(rdata->digest);
+
+ for (i = 0; i <= rdata->n; i++) {
+ OPENSSL_free(rdata->data[i].entropy);
+ OPENSSL_free(rdata->data[i].reseed_entropy);
+ OPENSSL_free(rdata->data[i].nonce);
+ OPENSSL_free(rdata->data[i].pers);
+ OPENSSL_free(rdata->data[i].reseed_addin);
+ OPENSSL_free(rdata->data[i].addinA);
+ OPENSSL_free(rdata->data[i].addinB);
+ OPENSSL_free(rdata->data[i].pr_entropyA);
+ OPENSSL_free(rdata->data[i].pr_entropyB);
+ OPENSSL_free(rdata->data[i].output);
+ }
+ EVP_RAND_CTX_free(rdata->ctx);
+ EVP_RAND_CTX_free(rdata->parent);
+}
+
+static int rand_test_parse(EVP_TEST *t,
+ const char *keyword, const char *value)
+{
+ RAND_DATA *rdata = t->data;
+ RAND_DATA_PASS *item;
+ const char *p;
+ int n;
+
+ if ((p = strchr(keyword, '.')) != NULL) {
+ n = atoi(++p);
+ if (n >= MAX_RAND_REPEATS)
+ return 0;
+ if (n > rdata->n)
+ rdata->n = n;
+ item = rdata->data + n;
+ if (strncmp(keyword, "Entropy.", sizeof("Entropy")) == 0)
+ return parse_bin(value, &item->entropy, &item->entropy_len);
+ if (strncmp(keyword, "ReseedEntropy.", sizeof("ReseedEntropy")) == 0)
+ return parse_bin(value, &item->reseed_entropy,
+ &item->reseed_entropy_len);
+ if (strncmp(keyword, "Nonce.", sizeof("Nonce")) == 0)
+ return parse_bin(value, &item->nonce, &item->nonce_len);
+ if (strncmp(keyword, "PersonalisationString.",
+ sizeof("PersonalisationString")) == 0)
+ return parse_bin(value, &item->pers, &item->pers_len);
+ if (strncmp(keyword, "ReseedAdditionalInput.",
+ sizeof("ReseedAdditionalInput")) == 0)
+ return parse_bin(value, &item->reseed_addin,
+ &item->reseed_addin_len);
+ if (strncmp(keyword, "AdditionalInputA.",
+ sizeof("AdditionalInputA")) == 0)
+ return parse_bin(value, &item->addinA, &item->addinA_len);
+ if (strncmp(keyword, "AdditionalInputB.",
+ sizeof("AdditionalInputB")) == 0)
+ return parse_bin(value, &item->addinB, &item->addinB_len);
+ if (strncmp(keyword, "EntropyPredictionResistanceA.",
+ sizeof("EntropyPredictionResistanceA")) == 0)
+ return parse_bin(value, &item->pr_entropyA, &item->pr_entropyA_len);
+ if (strncmp(keyword, "EntropyPredictionResistanceB.",
+ sizeof("EntropyPredictionResistanceB")) == 0)
+ return parse_bin(value, &item->pr_entropyB, &item->pr_entropyB_len);
+ if (strncmp(keyword, "Output.", sizeof("Output")) == 0)
+ return parse_bin(value, &item->output, &item->output_len);
+ } else {
+ if (strcmp(keyword, "Cipher") == 0)
+ return TEST_ptr(rdata->cipher = OPENSSL_strdup(value));
+ if (strcmp(keyword, "Digest") == 0)
+ return TEST_ptr(rdata->digest = OPENSSL_strdup(value));
+ if (strcmp(keyword, "DerivationFunction") == 0) {
+ rdata->use_df = atoi(value) != 0;
+ return 1;
+ }
+ if (strcmp(keyword, "GenerateBits") == 0) {
+ if ((n = atoi(value)) <= 0 || n % 8 != 0)
+ return 0;
+ rdata->generate_bits = (unsigned int)n;
+ return 1;
+ }
+ if (strcmp(keyword, "PredictionResistance") == 0) {
+ rdata->prediction_resistance = atoi(value) != 0;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static int rand_test_run(EVP_TEST *t)
+{
+ RAND_DATA *expected = t->data;
+ RAND_DATA_PASS *item;
+ unsigned char *got;
+ size_t got_len = expected->generate_bits / 8;
+ OSSL_PARAM params[5], *p = params;
+ int i = -1, ret = 0;
+ unsigned int strength;
+ unsigned char *z;
+
+ if (!TEST_ptr(got = OPENSSL_malloc(got_len)))
+ return 0;
+
+ *p++ = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_USE_DF, &expected->use_df);
+ if (expected->cipher != NULL)
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER,
+ expected->cipher, 0);
+ if (expected->digest != NULL)
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_DIGEST,
+ expected->digest, 0);
+ *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_MAC, "HMAC", 0);
+ *p = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_set_ctx_params(expected->ctx, params)))
+ goto err;
+
+ strength = EVP_RAND_strength(expected->ctx);
+ for (i = 0; i <= expected->n; i++) {
+ item = expected->data + i;
+
+ p = params;
+ z = item->entropy != NULL ? item->entropy : (unsigned char *)"";
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_ENTROPY,
+ z, item->entropy_len);
+ z = item->nonce != NULL ? item->nonce : (unsigned char *)"";
+ *p++ = OSSL_PARAM_construct_octet_string(OSSL_RAND_PARAM_TEST_NONCE,
+ z, item->nonce_len);
+ *p = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_set_ctx_params(expected->parent, params))
+ || !TEST_true(EVP_RAND_instantiate(expected->parent, strength,
+ 0, NULL, 0)))
+ goto err;
+
+ z = item->pers != NULL ? item->pers : (unsigned char *)"";
+ if (!TEST_true(EVP_RAND_instantiate
+ (expected->ctx, strength,
+ expected->prediction_resistance, z,
+ item->pers_len)))
+ goto err;
+
+ if (item->reseed_entropy != NULL) {
+ params[0] = OSSL_PARAM_construct_octet_string
+ (OSSL_RAND_PARAM_TEST_ENTROPY, item->reseed_entropy,
+ item->reseed_entropy_len);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_set_ctx_params(expected->parent, params)))
+ goto err;
+
+ if (!TEST_true(EVP_RAND_reseed
+ (expected->ctx, expected->prediction_resistance,
+ NULL, 0, item->reseed_addin,
+ item->reseed_addin_len)))
+ goto err;
+ }
+ if (item->pr_entropyA != NULL) {
+ params[0] = OSSL_PARAM_construct_octet_string
+ (OSSL_RAND_PARAM_TEST_ENTROPY, item->pr_entropyA,
+ item->pr_entropyA_len);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_set_ctx_params(expected->parent, params)))
+ goto err;
+ }
+ if (!TEST_true(EVP_RAND_generate
+ (expected->ctx, got, got_len,
+ strength, expected->prediction_resistance,
+ item->addinA, item->addinA_len)))
+ goto err;
+
+ if (item->pr_entropyB != NULL) {
+ params[0] = OSSL_PARAM_construct_octet_string
+ (OSSL_RAND_PARAM_TEST_ENTROPY, item->pr_entropyB,
+ item->pr_entropyB_len);
+ params[1] = OSSL_PARAM_construct_end();
+ if (!TEST_true(EVP_RAND_set_ctx_params(expected->parent, params)))
+ return 0;
+ }
+ if (!TEST_true(EVP_RAND_generate
+ (expected->ctx, got, got_len,
+ strength, expected->prediction_resistance,
+ item->addinB, item->addinB_len)))
+ goto err;
+ if (!TEST_mem_eq(got, got_len, item->output, item->output_len))
+ goto err;
+ if (!TEST_true(EVP_RAND_uninstantiate(expected->ctx))
+ || !TEST_true(EVP_RAND_uninstantiate(expected->parent))
+ || !TEST_true(EVP_RAND_verify_zeroization(expected->ctx))
+ || !TEST_int_eq(EVP_RAND_state(expected->ctx),
+ EVP_RAND_STATE_UNINITIALISED))
+ goto err;
+ }
+ t->err = NULL;
+ ret = 1;
+
+ err:
+ if (ret == 0 && i >= 0)
+ TEST_info("Error in test case %d of %d\n", i, expected->n + 1);
+ OPENSSL_free(got);
+ return ret;
+}
+
+static const EVP_TEST_METHOD rand_test_method = {
+ "RAND",
+ rand_test_init,
+ rand_test_cleanup,
+ rand_test_parse,
+ rand_test_run
+};
+
+
/**
*** KDF TESTS
**/
@@ -2819,6 +3104,7 @@ static const EVP_TEST_METHOD oneshot_digestverify_test_method = {
**/
static const EVP_TEST_METHOD *evp_test_list[] = {
+ &rand_test_method,
&cipher_test_method,
&digest_test_method,
&digestsign_test_method,
diff --git a/test/param_build_test.c b/test/param_build_test.c
index d2cf78dc97..7a3bfa54b5 100644
--- a/test/param_build_test.c
+++ b/test/param_build_test.c
@@ -24,6 +24,7 @@ static int template_public_test(void)
int32_t i32;
int64_t i64;
double d;
+ time_t t;
char *utf = NULL;
const char *cutf;
int res = 0;
@@ -33,6 +34,7 @@ static int template_public_test(void)
|| !TEST_true(OSSL_PARAM_BLD_push_long(bld, "l", 42))
|| !TEST_true(OSSL_PARAM_BLD_push_int32(bld, "i32", 1532))
|| !TEST_true(OSSL_PARAM_BLD_push_int64(bld, "i64", -9999999))
+ || !TEST_true(OSSL_PARAM_BLD_push_time_t(bld, "t", 11224))
|| !TEST_true(OSSL_PARAM_BLD_push_double(bld, "d", 1.61803398875))
|| !TEST_ptr(bn = BN_new())
|| !TEST_true(BN_set_word(bn, 1729))
@@ -70,6 +72,13 @@ static int template_public_test(void)
|| !TEST_size_t_eq(p->data_size, sizeof(long int))
|| !TEST_true(OSSL_PARAM_get_long(p, &l))
|| !TEST_long_eq(l, 42)
+ /* Check time_t */
+ || !TEST_ptr(p = OSSL_PARAM_locate(params, "t"))
+ || !TEST_str_eq(p->key, "t")
+ || !TEST_uint_eq(p->data_type, OSSL_PARAM_INTEGER)
+ || !TEST_size_t_eq(p->data_size, sizeof(time_t))
+ || !TEST_true(OSSL_PARAM_get_time_t(p, &t))
+ || !TEST_time_t_eq(t, 11224)
/* Check double */
|| !TEST_ptr(p = OSSL_PARAM_locate(params, "d"))
|| !TEST_true(OSSL_PARAM_get_double(p, &d))
diff --git a/test/params_api_test.c b/test/params_api_test.c
index 110820c8d1..8ba05120c3 100644
--- a/test/params_api_test.c
+++ b/test/params_api_test.c
@@ -379,6 +379,33 @@ static int test_param_size_t(int n)
return test_param_type_extra(¶m, raw_values[n].value, sizeof(size_t));
}
+static int test_param_time_t(int n)
+{
+ time_t in, out;
+ unsigned char buf[MAX_LEN], cmp[sizeof(size_t)];
+ const size_t len = raw_values[n].len >= sizeof(size_t)
+ ? sizeof(time_t) : raw_values[n].len;
+ OSSL_PARAM param = OSSL_PARAM_time_t("a", NULL);
+
+ memset(buf, 0, sizeof(buf));
+ le_copy(buf, raw_values[n].value, sizeof(in));
+ memcpy(&in, buf, sizeof(in));
+ param.data = &out;
+ if (!TEST_true(OSSL_PARAM_set_time_t(¶m, in)))
+ return 0;
+ le_copy(cmp, &out, sizeof(out));
+ if (!TEST_mem_eq(cmp, len, raw_values[n].value, len))
+ return 0;
+ in = 0;
+ if (!TEST_true(OSSL_PARAM_get_time_t(¶m, &in)))
+ return 0;
+ le_copy(cmp, &in, sizeof(in));
+ if (!TEST_mem_eq(cmp, sizeof(in), raw_values[n].value, sizeof(in)))
+ return 0;
+ param.data = &out;
+ return test_param_type_extra(¶m, raw_values[n].value, sizeof(size_t));
+}
+
static int test_param_bignum(int n)
{
unsigned char buf[MAX_LEN], bnbuf[MAX_LEN];
@@ -608,6 +635,7 @@ int setup_tests(void)
ADD_ALL_TESTS(test_param_int32, OSSL_NELEM(raw_values));
ADD_ALL_TESTS(test_param_uint32, OSSL_NELEM(raw_values));
ADD_ALL_TESTS(test_param_size_t, OSSL_NELEM(raw_values));
+ ADD_ALL_TESTS(test_param_time_t, OSSL_NELEM(raw_values));
ADD_ALL_TESTS(test_param_int64, OSSL_NELEM(raw_values));
ADD_ALL_TESTS(test_param_uint64, OSSL_NELEM(raw_values));
ADD_ALL_TESTS(test_param_bignum, OSSL_NELEM(raw_values));
diff --git a/test/recipes/30-test_evp.t b/test/recipes/30-test_evp.t
index 5f7585cc79..27b3781f27 100644
--- a/test/recipes/30-test_evp.t
+++ b/test/recipes/30-test_evp.t
@@ -31,7 +31,8 @@ my @configs = ( $defaultcnf );
# Only add the FIPS config if the FIPS module has been built
push @configs, 'fips.cnf' unless $no_fips;
-my @files = qw( evpciph.txt evpdigest.txt evppkey.txt evppkey_ecc.txt);
+my @files = qw( evprand.txt evpciph.txt evpdigest.txt evppkey.txt
+ evppkey_ecc.txt );
my @defltfiles = qw( evpencod.txt evpkdf.txt evppkey_kdf.txt evpmac.txt
evppbe.txt evpcase.txt evpccmcavs.txt );
my @ideafiles = qw( evpciph_idea.txt );
diff --git a/test/recipes/30-test_evp_data/evprand.txt b/test/recipes/30-test_evp_data/evprand.txt
new file mode 100644
index 0000000000..bce86b7db4
--- /dev/null
+++ b/test/recipes/30-test_evp_data/evprand.txt
@@ -0,0 +1,79522 @@
+#
+# Copyright 2020 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
+# https://www.openssl.org/source/license.html
+
+# Tests start with one of these keywords
+# Cipher Decrypt Derive Digest Encoding KDF MAC PBE
+# PrivPubKeyPair Sign Verify VerifyRecover
+# and continue until a blank line. Lines starting with a pound sign,
+# like this prolog, are ignored.
+
+# Test vectors come from:
+# https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/drbg/drbgtestvectors.zip
+
+Title = CTR DRBG No Reseed Tests (from NIST test vectors)
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 890eb067acf7382eff80b0c73bc872c6
+Nonce.0 = aad471ef3ef1d203
+Output.0 = a5514ed7095f64f3d0d3a5760394ab42062f373a25072a6ea6bcfd8489e94af6cf18659fea22ed1ca0a9e33f718b115ee536b12809c31b72b08ddd8be1910fa3
+Entropy.1 = c47be8e8219a5a87c94064a512089f2b
+Nonce.1 = f2a23e636aee75c6
+Output.1 = 5a1650bb6d6a16f6040591d56abcd5dd3db8772a9c75c44d9fc64d51b733d4a6759bd5a64ec4231a24e662fdd47c82db63b200daf8d098560eb5ba7bf3f9abf7
+Entropy.2 = 130b8c3d2d7b6e02c410b4168e122c38
+Nonce.2 = 79a674c5b2c51aa9
+Output.2 = 57e8a1e578ede1c66879c430df726435d51a369a0fe59a0358d1de352d4280fd7b225f5f386a4fcf12f72794ad0f3757fb25deba3c7512ce4d3733c7ee067043
+Entropy.3 = 04d24145287664f6762b5d2a102ac603
+Nonce.3 = ecac63e1217ee335
+Output.3 = fa5e746decd6801eb7083b6f0e72432e1fd4243104f748d0f19083923b9555688f43146d5acea962da01231d9e5faff0e81f3d394ace3a3454536d726575041f
+Entropy.4 = aede4e613556b1d5a30fce261fbb820c
+Nonce.4 = 39acba03c5f10af4
+Output.4 = 232c44b819b88f1aeb83f2034f842d5a00f0301505d2aa69aaecb3cb14bcb15875e0fd60071a80f6262dcebcf41a0e1476d96f409712d828ae313a9d28ec2dee
+Entropy.5 = 9f90541c10d4b7c089fe688ea3ef4fc6
+Nonce.5 = 1eac1c22036e2b22
+Output.5 = 71af3fdf673404163b06737e0f39915faec21821816c3142e80a503c70cb2edd468c3f03cb1f8a2f9248635b63d7b8f19e9e11caf0ab0c3d2ff9c71321cac154
+Entropy.6 = 3b8a181cea8390d5d7a4e6515cf92e3e
+Nonce.6 = 37f4d1748714345b
+Output.6 = d6fd0ffb10850eb6eb7050e61eac00d472f65cd3d935081477fe44aa85694e120ab5a1ca1fa198af76dfa8d0abdf53e85aa8c87fed0a8c24163943b96d80aafb
+Entropy.7 = 854caa2a74f3f43b6abd806d6748ed80
+Nonce.7 = 0cbd1372beb62736
+Output.7 = 46534028165ffe2845a972627e67e153510ca1880e6a3ad31fdee71ff240d3278624b31f2d386d7b2228ced624a42e7a3b07480b2323166c18d1ac0f60002ec4
+Entropy.8 = 87e1c532997f57a35c286de864bff264
+Nonce.8 = a39e98db6c10787f
+Output.8 = 2c147e24119ad8d4b2ed61c153d050c924ff597515f1173a3df44b2c8428ef890eb9def3e47804b2fd9b357fe13f8a3e10c8670af9df2d6c96fbb2b8cb2dd6b0
+Entropy.9 = 2fc623429029c96edef6166247b08cb0
+Nonce.9 = 9982663355582788
+Output.9 = 5596cb16f3be8552c1e5c164d540cb1faf4bea8733b60a8ad0c40626256548c7aa96d1d2729d26f008731fc39307be5bcd2081c69e314e0c73e3d0fd1d905828
+Entropy.10 = 98ab8b4eafab6e536f7845abec137808
+Nonce.10 = dba944c98b311d8e
+Output.10 = 86eed3a9fa53452fb11dba9cac8e4402522928f2705a5e582f4d00eb8fed818e629c72a6a779beb4ed9a239368233cbfcf55685dbf2de34ab58920cfaca4aafe
+Entropy.11 = 7dcf4fa731139c5bb6442fed91e89f68
+Nonce.11 = ffd94fe21a808b15
+Output.11 = 8eca20e31c9839b741aaa9bf6ceee224d32126b3196eef3ecd343d414d3233b9fd0ea0ed1bc7700c88cd7c88d3c07613c42cd1f909fed8c6a708d05d6b68fb2e
+Entropy.12 = 519c6efeded2a110ac41839a8b8abfce
+Nonce.12 = 81d95edc06dde6b3
+Output.12 = 39cdd10e49e03581e3811ddd07d9d0acc34085a12c1c6b87a76386e97032dc01f523f632ec950d0434c25937e432d98554599a855db9adf58b9e04597a21d00d
+Entropy.13 = 80c19eeaad1a58379466afae1d80876d
+Nonce.13 = d9a2093f11892b82
+Output.13 = cec51b985ec97b18ee8ead36157beaf96f129f28280889ec873c27b5627198c585a6ad21ae23a959c9fa49d985af0df4028fdf1f51d82e8f2b3f028853f14e8f
+Entropy.14 = b77bd22efeb771586d516f582192a311
+Nonce.14 = a699f42a4981fefc
+Output.14 = 7ff0abeaffc6ec923cebd910f5937bf14fc52d2a74258388c76c1bc9e635adf175858f0a55877e7e9f5f867d00b9b1363dde46288a6fff5321f469445aad4198
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b408cefb5bc7157d3f26cb95a8b1d7ac
+Nonce.0 = 026c768fd577b92a
+AdditionalInputA.0 = 5737ef81dee365b6dadb3feebf5d1084
+AdditionalInputB.0 = 3368a516b3431a3daaa60dc8743c8297
+Output.0 = 4e909ebb24147a0004063a5e47ee044fead610d62324bd0f963f756fb91361e8b87e3a76a398143fe88130fe1b547b661a6480c711b739f18a9df3ae51d41bc9
+Entropy.1 = 71bdce35427d20bf58cf1774ce72d833
+Nonce.1 = 34502d8f5b14c4dd
+AdditionalInputA.1 = 66ef42d69a8c3d6d4a9e95a6914d8156
+AdditionalInputB.1 = e31883d94b5ec4ccaa612fbb4a55d1c6
+Output.1 = 9733e82012e27ba1468ff234b3c9b66b20b24fee27d80b218cff63736929fbf385cd888e432c718ba255d20f1d7fe3e12aa3e92c2589c714529956ccc3dfb381
+Entropy.2 = 9c0e4aeafc357ff8e3f540a455678d7e
+Nonce.2 = efd83dc5c531d167
+AdditionalInputA.2 = 58a11814081c1c35af8988f13140f6cc
+AdditionalInputB.2 = 19192270d61a43264a30ba9ebc728a5b
+Output.2 = 1eff1cf6b575315590703882359b6adb3c21ebcfda5d3b5d6e88acab6e879e0a6f75375c02d1d3fbae943c3443e39c299b80e241cd365d4af8cd1ad5d9d54c58
+Entropy.3 = 9507019b1fe87984bec1d09ceccf3635
+Nonce.3 = 47586274fa753e0d
+AdditionalInputA.3 = f17de4ceef9f2f234220cb71d8ceb70d
+AdditionalInputB.3 = 99d48d9ce2fe76dcb8d05fa4ec071aec
+Output.3 = 25a0d1678e25b19439d8334ca902db6347a9a42b86f354b9e0b3c4f4e8ba9d192a5d765aae5f4c5a74a0177d3eb6137062e6d98b651822265bfefc929a3969dd
+Entropy.4 = 12e8b3da3a3b3e773afc2305bda86db6
+Nonce.4 = c49f261a9ab9d9f8
+AdditionalInputA.4 = 86b638524196159dea0176e5462ae65c
+AdditionalInputB.4 = 5eadb76772be3ce847af6b7794e002e3
+Output.4 = 1bbf85e02c1fc04bea5fc47f236a071c13f8f52eb113cb83c4152ac832627abba6ecdec17a9ff0305b7a49817983fa5b665145e7ba9a5df57226eccfc164e3bb
+Entropy.5 = b608b149cf44fe060613b1661da0df63
+Nonce.5 = 9517c993f1503477
+AdditionalInputA.5 = 559cb812c3758b2b319dd9f5768e8d3d
+AdditionalInputB.5 = c9af987efce4700fa9c8ebb9fecf00da
+Output.5 = 5b48134dc7e6589f1b402cf5c4f6e3a3ebfda8267250e8e811ec05986ff21c78a16930a8e08103077608c06fa5e2a048e85dd6f395cee201d3cde635e17e203e
+Entropy.6 = e92fd07a09f2bccb43424c575773b0f0
+Nonce.6 = b4e3ca71ae15a036
+AdditionalInputA.6 = e1b4b04013dc12188c623d1011d408f1
+AdditionalInputB.6 = 7956bf5b16580b3e720a81333eae2483
+Output.6 = 21a46722424656370c475b69a1fbc70c8cbf442dc2bc28e0ab34bb6ffed06d10f490df7e787c12b652d219a577306f04a9c878b6cfdff43e1355c4d110fb0fb2
+Entropy.7 = de0b4ea1a440ce680ed004cf64afbe0f
+Nonce.7 = abb31a3ab15ed449
+AdditionalInputA.7 = 45e710100cad00f3d293db755ee1990d
+AdditionalInputB.7 = b911c9a4389e7167982a51248ee2937e
+Output.7 = 01c3af83557c632dd822833f18e548fb6036e9ccacc3b433c5a700793993308916220e5a741639861c2f17719b32512206e36e947b2860073b113ccda3fe3168
+Entropy.8 = 7227e11cfc1a6b84b40eca24e77f8c64
+Nonce.8 = ab7e9fc45e5863fb
+AdditionalInputA.8 = caebb3cd32c9d3e1f5d38f8bdd89587d
+AdditionalInputB.8 = 31380926b8608006b7c79361f0f91d5e
+Output.8 = 3ad7b93259c6d0fdb514277ae9950122fb971133742de8e517dd2269dd5a3c257e3d106b555660cfdd6a92c2cddf1e53c4945ed772ee303804d056f242bf5399
+Entropy.9 = 3b9ee20c8242b3f358dbe8ea589e6e7c
+Nonce.9 = b1dc3a4703685215
+AdditionalInputA.9 = 473334478673e7b4a43e9ae6a8ac98bf
+AdditionalInputB.9 = 061fe4455a17087498fe209c2cba7a91
+Output.9 = 8e5062b1fb2905c157c526fa5f67cc99c6d7080a3d3142fa37c209cf534af16a9a2f2861b894ea84a373d4a804c3dcd51fcc09dd0f5b3945697aacd0b8f3eafd
+Entropy.10 = 8ff757b21169b3fd6e8800aac0e3c41f
+Nonce.10 = 494d4251e88815b4
+AdditionalInputA.10 = e0199fb9f0f0a1a8dd9d19d14368fa1e
+AdditionalInputB.10 = 2191abe72441285636c11bdee983ed8c
+Output.10 = 0675b2254b71318eb3a3604d7b6d77806cd7df325c7ce89e16d3bd5616b0faec330cfe6b84b68761adf70cc14e46253e115572c1a4acbbaeee1ad681b538d6c9
+Entropy.11 = 460c0a1e929b7518dbcf44e4e7ee4d83
+Nonce.11 = 8865d5015348259e
+AdditionalInputA.11 = f932789140a0a76f07b25b5f8e1d00dc
+AdditionalInputB.11 = e6446ae2c6626673e18e373deb12bd26
+Output.11 = c5de2e1a2aa70a28ace68e620c94b888a07b0780b31438c5e11c5d76dfd615f41d4ba324d22c12fee38f58935dad35e00fe6a6e61186c7881c306e9631cc15ec
+Entropy.12 = b2da44bc3be2d17a9ac2088085e926f8
+Nonce.12 = 04be54493526c578
+AdditionalInputA.12 = 67be89195965cd7dc984271b497d6190
+AdditionalInputB.12 = c9956b004b0c26b3f657c6c155d360cc
+Output.12 = c77456621948f60838e3779a146063225296da38180e2c4c5835ea27b28424a8831cee8c8df739a2b173b37be2c02bff38e0b367d482fb76545fb3c98d82b6e7
+Entropy.13 = f177bc8af75c49e1d379b5722692bb3f
+Nonce.13 = d8b5fbdc5da7ea7b
+AdditionalInputA.13 = 374194383554a421410af5de2fc2ec82
+AdditionalInputB.13 = 000be9ac8e4b0cd1245d7b7dbf8d874f
+Output.13 = b4a00cd6e5f47ea87b1207c3a218d8988d4cb7ed52b14b79bba56aa7e57e6364057025ab8f60d97b84717bbf2558dd431f4bc38cf1f61ec0e7c2b4aeb54b2faa
+Entropy.14 = 526bc8b797ad67eb9b11bb5d17320087
+Nonce.14 = 647bd232ad4d1300
+AdditionalInputA.14 = 58c8bf950fab027119ee4a592727aa02
+AdditionalInputB.14 = 2539e123926b74ab23414d6350b89287
+Output.14 = 359c560834bbebdb4134cc3e66bc0695cefdb4fe5663752b6eba974c4b85924a01dcd4ea3ed77f2af3957b8751f7371574bb8b090bc0d512c157c6559c16d0fd
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e10bc28a0bfddfe93e7f5186e0ca0b3b
+Nonce.0 = 9ff477c18673840d
+PersonalisationString.0 = c980dedf9882ed4464a674967868f143
+Output.0 = 35b00df6269b6641fd4ccb354d56d851de7a77527e034d60c9e1a9e1525a30ed361fded89d3dccb978d4e7a9e100ebf63062735b52831c6f0a1d3e1bdc5ebc72
+Entropy.1 = ca4b1efa75bd69363873b8f9db4d350e
+Nonce.1 = 47bf6c3772fdf7a9
+PersonalisationString.1 = ebaa602c4dbe33ff1befbf0a0bc69754
+Output.1 = 59c319791bb1f30ee934ae6e8b1fad1f74ca254568b87f7512f8f2ab4c23010305e170ee75d8cbeb234c7a236e1227db6f7aac3c44b7874b6556744534300c3d
+Entropy.2 = 3519491574719ddb1f51b5f59e21ad3d
+Nonce.2 = ef1dbeae79f0898b
+PersonalisationString.2 = 7fdc21e353249e93df98f29102b9acec
+Output.2 = 192c71857447af82013706b8eb008f8e2c2eb3994a238cf739e17460fe84ef71ca437e8acbb8d9d28807c47a5f034442aaf3c2f3e7debe531bc3596056685848
+Entropy.3 = 68edc1c7f04fa22f751b918b016bbfb5
+Nonce.3 = a9b67a3958f202f0
+PersonalisationString.3 = 9d6fbb020e3d99d195ff469f0ac0b8ca
+Output.3 = d90289b1b6763a7690fcb5d67c81c203a1cfb08871b94af651c4cd7ec2fa4b9d47c8e5fcc99affc22143b6127018e9e2c0914f9d47a5a30b26e74ddc31a44842
+Entropy.4 = 8e6baf81a3f9e732efb965afa59e71ee
+Nonce.4 = 9a4036fe7ff225b8
+PersonalisationString.4 = c57e42ad7aef5377fc4cd620d631b061
+Output.4 = 7139a2d674eefe54087a2dd5f497f5a1cb444472e364045cb9202bce24581b4b1b803fa5f4a9ac6d6637bdd906af3d8f49b5b80f44cd16ee5b1ae3bf51b598ba
+Entropy.5 = f8992f340f90c8d816b4bd8b435da035
+Nonce.5 = fcf944006f292798
+PersonalisationString.5 = 5632235e852c074009b497eda438a16f
+Output.5 = 9eab55fa4b2c1cfac63d4de47aa8f59f785ee490da44cee30f9161e93afc461dad0e7f4a064e92efd6008916c22f8364c190467ade12ab4e18b1f39ce18b358a
+Entropy.6 = 07438f8353b7b0674218319e29540bca
+Nonce.6 = 411477636a500c62
+PersonalisationString.6 = cf36f2aa72f2f35e335e65cfd17e2d3d
+Output.6 = 6cfacfe47acf8f61d8af3ed4fbacef5cd741ac2f165e15bdaab1d030c68567837ef3da1ec83da0423ca3424cf293f61f7175fba8e91e5fdc8b3955777361d690
+Entropy.7 = 8e93735c34ae0c5ea5213d83a8da8045
+Nonce.7 = 2a0b279a9d677838
+PersonalisationString.7 = 14f45266524a8152857a83316a177585
+Output.7 = e00cb8636f9602c33021a82a7f9dc9c74ed3435b34897d6efd8c05f177e8556a443bd18c20a557b9bdc417e8998506485091d6bc918e9cbffbb85c620f74c6ec
+Entropy.8 = ec6b87e9e03f44f919e40e1dac02f873
+Nonce.8 = 5e9ac5090a5e2897
+PersonalisationString.8 = 0d9ba462bf166f3b366a2adf55d27645
+Output.8 = ec37acbddfb041e4249c1cb9833a31fc6fbdaa6658e4b748c0ebf6ab54a3b9c0f62d7c89dbb21d1de13315cbae2ff4f5462491321fbe04b414fba2807ed914ee
+Entropy.9 = 9d282f5a0c15a653047310b5627d8fa2
+Nonce.9 = 5522c42f4bb076dc
+PersonalisationString.9 = 846b2e17b062c4c7c561943b5d97565d
+Output.9 = 45f60e1ba981af7f52ef4939c0bb0bdb6fe46f372cc648064bbd3a0a2b85c02391b29792cc8805bb5d453ee290cd1b9c9f8f20b09116af1fd5eceae80d0358d8
+Entropy.10 = 83827c08524b54e80f60e186cfce36db
+Nonce.10 = 177e5c00f785a6f9
+PersonalisationString.10 = 7175a2c22eab4d0b1a65fdaded356aeb
+Output.10 = 8424e76c736c0309423cf48dc105feef228dd47bfd8d33801950d2102d5dbafb51e1a85b4a971e4f0b9d52656973db455b286f588ca61d1599c4ec60dd80be98
+Entropy.11 = 9f3213a2d6fe5f3dfaf0e4ed292e0f2a
+Nonce.11 = f9c0553b18b21cc3
+PersonalisationString.11 = 2173d39b3755041911989f89f1e95d3e
+Output.11 = 1045f7b536dab4de015448ac4766188a367bb69397913dfd3d5bbf83f1bbac73232d47644e5a9c169960581e4ad5ed2695360b94f4209c77d7694016b4b397c2
+Entropy.12 = fbc8199074a76f23688636ae3114281e
+Nonce.12 = ebc22e95ddaeb6fc
+PersonalisationString.12 = 71fbd59f88fc99a9b6070027e73541c2
+Output.12 = 872566a7004798e00697bdb33af1ee7a076e9fd289af83afcb10a0252bb5c106c8dd20d77c859f1401118c24f5a8968f11fa9f7778c2803189c8da87e64945c8
+Entropy.13 = 43f4d089060c907f3876051fd5e36f74
+Nonce.13 = 4571e6615ba3bbce
+PersonalisationString.13 = fc9057749ba437d8fbe9f81d29df5ef1
+Output.13 = 9078f1bc92910ebcf8e31757b624bd23dbcd74f9ca70ff1c6f2b21d859a4e8a4e9963ef132a025b3ae285b43a69698900d4f8a30bb5e99290e4504161997a837
+Entropy.14 = 0ee38ea29d7195003e2b942abf1348fc
+Nonce.14 = 80a75c77ceff54e4
+PersonalisationString.14 = 838eaebc982caa1562c3064cce42e51e
+Output.14 = 66291b8685e97c76e2216d708b407022684b28291f3dc71b5d60de143f5fdf0bb07ae9d7524456c4dfd089ea88de86ddfa1d48ca542f00fa586da7a6027d837b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = cae48dd80d298103ef1ec0bf1bb96270
+Nonce.0 = d827f91613e0b47f
+PersonalisationString.0 = cc928f3d2df31a29f4e444f3df08be21
+AdditionalInputA.0 = 7eaa1bbec79393a7f4a8227b691ecb68
+AdditionalInputB.0 = 6869c6c7b9e6653b3977f0789e94478a
+Output.0 = 920132cd284695b868b5bc4b703afea4d996624a8f57e9fbf5e793b509cb15b4beaf702dac28712d249ae75090a91fd35775294bf24ddebfd24e45d13f4a1748
+Entropy.1 = c0701f9250758fcdf2be739880db66eb
+Nonce.1 = 1468b4a5879c2da6
+PersonalisationString.1 = 8008aee8e96940c50873c79f8ecfe002
+AdditionalInputA.1 = f901f8167a1dffde8e3c83e24485e7fe
+AdditionalInputB.1 = 171c0938c2389f97876055b48216627f
+Output.1 = 97c0c0e5a0ccf24f3363488adb130a3589bf806562ee13957c33d37df407777a2b650b5f455c13f190777fc5043fcc1a38f8cd1bbbd557d14a4c2e8a2b491e5c
+Entropy.2 = 6b98532d678fd279cf737c58150ce589
+Nonce.2 = ca5545073d549d06
+PersonalisationString.2 = 80908ac134e0cd23ef7e318548f92191
+AdditionalInputA.2 = 53790da909bfdeedaafd99619f3f461b
+AdditionalInputB.2 = c7a58777d1fbd1553e9546c83e409fc2
+Output.2 = d984a2405887390227940959e49f944e4904c4f0467ff24d8764db91530a1e5965688472fac131bea055c7151227e2fcb0dad9655ec3ac22cd7dff72f6c74aa0
+Entropy.3 = 97516e48d910372a3f1fb4aa7ae4930f
+Nonce.3 = bba30b3deb193389
+PersonalisationString.3 = 8c0e3e71c8201a77105519dffa89c1aa
+AdditionalInputA.3 = 0a18787e4650fa0249f77962ac158c63
+AdditionalInputB.3 = 2fb192314c3e07f963fba34d8dfc8c9c
+Output.3 = d7b73e449aed8f0a06938483e87811049b4acfe51ca555f1ee9786e33fce90697db68d2dc6361c942cf67d892619497e96194332ae32a635cf355bbc3c667955
+Entropy.4 = 62cef35a518ef6520b6edb1aa9a21496
+Nonce.4 = 2b98e269f51fb3ba
+PersonalisationString.4 = 89a6c9112713d0d196c8e02660a25131
+AdditionalInputA.4 = 35edb87701cb5001434db1857bf98efb
+AdditionalInputB.4 = a9fa53b5d3032e4be60dcdb1e94b4f50
+Output.4 = de8b770b3ed43315ab7e8331e2df12cb9abeb3f6b14c457a304bcd1df730db52d4b402f78b80545965fc5a83ddf99963aab5e1b3792457df4bf927b66a4d6745
+Entropy.5 = c02af705f699c3a7f5e2bb9b14c7cea7
+Nonce.5 = eb246b26a3a0a10b
+PersonalisationString.5 = 07df3d3d486bbe6819044094c9158999
+AdditionalInputA.5 = f49d279f04815d983092b6b5fe4f10f7
+AdditionalInputB.5 = d766070064dfe203b2a39d1b24758410
+Output.5 = ddbb488c6b6f0f9cb705a3c5ab13c3176f867b120c29db37f79c00238a77a0414504d32893a08c7e99c2b1a88d50922e52b0df560b753add48604caabbb9752f
+Entropy.6 = 566fc338985a8fc867dabe24f7f9097d
+Nonce.6 = dbf71d7917e0b151
+PersonalisationString.6 = 6656941817a615e29f62bd4f1d93cb11
+AdditionalInputA.6 = a274be529746bd0b6a5873dc3c1daebc
+AdditionalInputB.6 = 4e23fa29d26b1fe92bb42b3e9f2b4c08
+Output.6 = b5da60b870226a48b2b9b5d9a9464954a8db0d3e5fb3063c80e675197dc58407b4c0409cd06975eda8afe6667aa0d79ecf555e238f83424f130819200c244a77
+Entropy.7 = 6743bc122aaa134f82ac8c78cc0b64e7
+Nonce.7 = 2dc32e4f3bba5a20
+PersonalisationString.7 = b8077f23a908c42592c13b63890998d0
+AdditionalInputA.7 = d68374f58ce25bd8e95fe06de8a950a1
+AdditionalInputB.7 = 07b7ab9c32a97830a00ed9895e3bbe19
+Output.7 = fe827f53076df30847d0fb0f55a2cd6381ca0e79e681621f49f31e4811e9a64c57c0994f180c311a404440f277fa62e0f99c6f5c7b88bee207fca9926bfc9e46
+Entropy.8 = f2addf0167a16da38d2fd792a7189c06
+Nonce.8 = 2b50d8cc7f71401c
+PersonalisationString.8 = b917a54c13d58cb6ad47c8faf6f9a7f5
+AdditionalInputA.8 = cf2e785a06bc5eb71e3b524f1172c755
+AdditionalInputB.8 = c9a753a9ceddd75d1a626da72795a3c6
+Output.8 = e2aaf11c20de2baf8923041d838f4acb38e222d306b97c97bfe546617b3d8d92e40caa2edcac7a2fb0643ed57d47a90a11641044b6c6a7df424dbda2b45f0df9
+Entropy.9 = ca233458f66b26f2c1357aefceb679ef
+Nonce.9 = fe136404ad7a49e7
+PersonalisationString.9 = 2683dc313bc0bb93ebb46bbb553f5875
+AdditionalInputA.9 = f78ab1f4526f0fa5cb7543d14643feb5
+AdditionalInputB.9 = 40b926324cc2943aca837f690d0bcda4
+Output.9 = 3724d0e580e90d4ef32e5f8a5bb56225a913f210b76d5a78fd8ef25d6eec9ff14711d6db80e1e81142a5607534a725d2785c8e3e4a48a594b0d91bc932827bd7
+Entropy.10 = 2b521dc403129fd9ed0be9f5fde06617
+Nonce.10 = f0dfa01e099b95a1
+PersonalisationString.10 = fe858d59d734f60f71a387553cca46ff
+AdditionalInputA.10 = 6fba8d06ff433007bd7d15569af3d069
+AdditionalInputB.10 = 80b0c11f18b5923a89f0fe23776d3905
+Output.10 = 417388dee9084f588d0adb5e5d1b546b1255cdf59d69957ae687c7822b935ce029306c0250d469839c7df9d3d08ec8c50a667af10d8d5b007302a6e87b4e7f2c
+Entropy.11 = d0502b78f7aa6fa1d888421d702cadd1
+Nonce.11 = 4b37b8965969ea8d
+PersonalisationString.11 = 56bd431f0488fe6d7ba3836e5c8c7aa9
+AdditionalInputA.11 = 26925dbcbed733be2a5e7649c876a0f8
+AdditionalInputB.11 = 9c70352d4f9c880e76d4680838dd0dea
+Output.11 = 6500242c3588b452307b2a0634900e756a3d2619fc2adf10776922b006617ee881828366ac527fada00186bc8bfd6bee66d638035aafffbc8332a54ca17df16f
+Entropy.12 = a3b95f3201fa010107573074b1199bc0
+Nonce.12 = 6030e5b61347b0e2
+PersonalisationString.12 = 9e778546d45f1793a11d80a02e4ca3c3
+AdditionalInputA.12 = e507336198253137a555e8c118a12d2f
+AdditionalInputB.12 = e5ceeacbb522f5de81789c32cbcdef30
+Output.12 = 4ad18ea0837f063e9fbf6c72d1af6f779641f4e11c400d95cb2ba42299a96648e059e1a63f7c0379254489c7cbfffb2211845718c52600c9e85849d6e0951f7b
+Entropy.13 = 8818be7e8e815bca0cb5a0144d44b672
+Nonce.13 = 122b148ca1aaba60
+PersonalisationString.13 = 906dc30b395427385673261366f5e9a8
+AdditionalInputA.13 = 56ee67ff1466ceedd7281d73f39c6c85
+AdditionalInputB.13 = 82e4a6edb0780079faee258ed1137ecf
+Output.13 = 8855ad03e38727d049e8558ecc663b8c89cb5bd138ac349c6e5f784170c50769c8c97b094dfa0752d065531da40085817ccb08f2b94cbbbae7598c963e3ad6d1
+Entropy.14 = 0090dcb91f0270f658207d49a74738e2
+Nonce.14 = 9d18aea2684ee2b7
+PersonalisationString.14 = 64a81857ce29f0d2a8510300b0a3fac0
+AdditionalInputA.14 = cd7f89f8d5468eae8bca314fd9f25b23
+AdditionalInputB.14 = 949b94417fb42bbc7cdb3f53a0558019
+Output.14 = 63d3e919881f87d69cbadcb6789e0b8f2e49f4c9d0e3ba1e4a59162af718bc40dd673eae8f48fd2782e06cdec5632a4b2e60655cba75afaf4c12a674eee4d3fc
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 2d2ab564202918c4ef5b102dda385a18
+Nonce.0 = 259195269ec11af6
+Output.0 = 2c5cd79ed87622a91b8654c8903d852242cd49cb5df2d4b4150584301c59f01fd95a702ac157c84cc15f42c8211335672d8ce1291ef9b1def78149a04fa2697c
+Entropy.1 = a016463dbb499990cbcda45046d8f337
+Nonce.1 = 249d02de2dcf3e57
+Output.1 = 35b81fb94241f4c9319a7f16b442495252db4c984860d035f6c45403f974f534fa93b21b6b89441be07c5c29317f868dc9ab5c18377437fadb4d857ee092f923
+Entropy.2 = 1e3820c46e50b7cbc58b05aa722427a8
+Nonce.2 = fe0f40014eb3279f
+Output.2 = 18530b9de889d8ad3f41d539796c2a95d682fb026df7ca094af4ab2395292e6fcdb175ba257d61279da4d0fc78fdf8a4eb46a0e2d754f5f8f09ecb157c8a58a1
+Entropy.3 = 3b02c5a474679648e2fe090a13be041c
+Nonce.3 = 71ed5aa078b83a7b
+Output.3 = e8e2e5d8bd9929e4e1675c8461457cab0633d83f9bd243bc582937c2b961b71c11856f836c37329d3fa86376eec97139104de53260e122cb2b6d824e21e75ce7
+Entropy.4 = 050c48ab8a05ff690b62e37d9b21f2fa
+Nonce.4 = f7964875be288353
+Output.4 = 24cb0edcb89eec617613a27fe3e4475affab498d57bc3c4ef844fe19b38413477c1db040f16757f1851b799c1f2669aa9f9c50532eafbe1e2948e338d1ca4bd7
+Entropy.5 = ecd99c0b491cf6a323bc333646e5c56a
+Nonce.5 = b10a1784995cb34c
+Output.5 = 6535c48d999a306acb83f7b720b3c39772a496e75a890f6e14d70a824142a12d01dee55271b82c7b027b9468c309fa2d08e91e5e379eb90cf8915cf4cc241b50
+Entropy.6 = 34aee3ef35b2a1e31c429725feaa6bfd
+Nonce.6 = e4369b6ada9091ed
+Output.6 = af9db4df46ac80fecad6c3d1d975d2d0a665f31b4e3b07d962632296b76039ddcab8edde17bad6230131162e59d07dbbd0f0b52e5ca93cf37f12c03042bf0c82
+Entropy.7 = 91156469540c785df56a10e16b66107c
+Nonce.7 = 7e2b2a7f58f3ef20
+Output.7 = 9a763a4c052725e7ae9d2122a45cd18ea28c58172b87c57edb9daa32f8a26eb98d6b8812095a54cf6282c5e0fc18cd30124415d267c9fc2cdae9beedbb86584e
+Entropy.8 = cd5dbc35d1b4435c4c945bafe4b8fc7a
+Nonce.8 = af4acdfc8119322c
+Output.8 = fe678299f1ade19621880235fa6fe2b50184f81243833ebe68c616a9034e23e0cc873e8ac4d0e365b524a37832b52d97a83862932491d2643a73e46a80b5149c
+Entropy.9 = d52d1159787baab213e87921fd959110
+Nonce.9 = 7ab37538ee0245c8
+Output.9 = f4d9ead3594606ac51942215aa0bd29baa7c281e62d2bcc1a77f57e3596683199d70c009c084eb3654224ed7b07a09b494480a113b33e0366cb2253edbb0cb5e
+Entropy.10 = 5110db9d5f4fbdc037550e83c2bd96fe
+Nonce.10 = dee641f9177c9da4
+Output.10 = 05f8cad2d031ce6b527ee043b5056db20ee5ca660a95c29b8f8b2e43efa5c7aa62351233f4f160368c3dad4a74f471bb02153f86c87a140a36e0f122c68ba77d
+Entropy.11 = 979065bc1a1c8c8290dde219f0121abe
+Nonce.11 = 593a0e1fa98564a3
+Output.11 = 199e68e5b637a27be79453d9953a0e529536374e7f63e8595afe4b5d4e3bb379c6d462f6431244af4336b17f9dfdfeafa6f4fff5004aa65f7d6bb3b88af8e9e2
+Entropy.12 = 89a787be64ba3358952f9d602bd8fab4
+Nonce.12 = ab961b68c65892d3
+Output.12 = 6e5dd2a651f2614fca881f5edb05d5eec61275dd05b31fd8a3062fac515960def7b0d4db304f642b91e6401f2a00b0fb693edd7313102f58d73302ea8b5a9d7a
+Entropy.13 = 21f02fc75a282d7f87cab05767558e08
+Nonce.13 = 3b43d77b0c6471e9
+Output.13 = 3b8709cefe270627eb4947f3c7695eed2c85cc1525be253f200a44ad55f7583e1091b880ee16a808e90dc1dd5c0ed3b8d196407661de8061f6a2d78cdc93429d
+Entropy.14 = df5b1cd51045c83801532449d6a87aed
+Nonce.14 = 8dd172b81286a238
+Output.14 = f0172b3a5b42ead6e654d3abc78dda08780ea43223625707f8ab021bef5412db89b089cf751178eb1b97be13f5e83b9f1076d0fc88e6bbd6eef1ef6355e3672b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = adf5711f93d8c8997349429ccaedae0a
+Nonce.0 = b25716931b6e3cc1
+AdditionalInputA.0 = abf8cd66dd39758b01d7dbb99ab17dc3
+AdditionalInputB.0 = 4be0f6b2755377c6e881fbb261b56beb
+Output.0 = d420604dee6467492db5957c86207a708fd242ed67942aed299425335c83b41437418582f41bc7fc0ef0d6927f34d83acd67c70133644fd711dd5a65731f9f02
+Entropy.1 = e92100020734909d6109d29cf2c898b0
+Nonce.1 = 91fbd9a3a8edc3a4
+AdditionalInputA.1 = 0980c7dbcfd0e7f77af835acc74a4ba3
+AdditionalInputB.1 = 3cbf47d46655a0ce75a5d56528127bc0
+Output.1 = e77ccc5263625429ce7e535622481d0bef476141d1a0abfa7f6967c11f47f7a70fa9bc70598ece3ff283e5ae04f10535d349c231349af8071a22323a6e951039
+Entropy.2 = 092ffe7457d6173e6713b0af76521d82
+Nonce.2 = d0b8cae6ab9e29ac
+AdditionalInputA.2 = e31af5e181c4346e423ebc1ff9f46ddd
+AdditionalInputB.2 = 02b949d134fc8968ba518fda3b42c97f
+Output.2 = 0b64d9c61d1f23440ce57dbf465f8c629a9ffedd164399ab84fc118466a5679bb2d9c805ea9d29497261ea58bd8fa45cf24e212c077baba4d4e5738bb883c883
+Entropy.3 = a7a47841cf1a75ee96935f52a3322d9d
+Nonce.3 = 5b48c3c347394656
+AdditionalInputA.3 = aac2031f6aa40f0875493370927c7ca8
+AdditionalInputB.3 = 1a6744d03fc2151294707c3bcea88402
+Output.3 = b4674867cb6cd4fade7846f492bd9eca69c133f1171cc60b6cd75f22e2ba7e70207ca38bdcef17ac15e48849ba130d5fb810844c2539fec519c4fa977ffa0738
+Entropy.4 = 5289c333ce1ceef56a19a111e9201a38
+Nonce.4 = dbd6b76b1fdf5d1b
+AdditionalInputA.4 = f1fa6ec8caf94f65f12e9c0d8f5704f6
+AdditionalInputB.4 = 6eb6a557f17018830b5d72b67d322263
+Output.4 = 39ec96bc716e1d214880d1f4b8a984bb83399453ec1eb9f371282d658e32d739b489f4c5eeae62a8fee8e084eeae6d01cca0ad80da1c53230f8a1faf7c335edf
+Entropy.5 = 4f05ef26c685444d6e65d8f26e0f2ef2
+Nonce.5 = d0ab066c7a4903b7
+AdditionalInputA.5 = d275426043a82de20f89f1cb2cff5c9b
+AdditionalInputB.5 = 02a32763ed9aab167282d0a097f3103e
+Output.5 = afa2d37cc1c79d20a6104d6729fc7544361b95d23633487e8bb282b277e25f8ad53136109b21c380aa05e41dd9efd8adf46b7d695bbaf5b0307216a194fd9128
+Entropy.6 = 0c2ccfd65c23bc0693c9d4667a942b42
+Nonce.6 = c08d55228fe84bd7
+AdditionalInputA.6 = cc017bb7962da6db0f517be9183fa6f4
+AdditionalInputB.6 = c424aa0ce84a807a78b7b732113c22a1
+Output.6 = cb556f6d223a51a200d735f2f4ba217a672ef6bc1451976d1d05b44a2c0d54278af747837922cd0b28d7aaa2a87e23055e18d67d76fa90728294aba4ac36965e
+Entropy.7 = 3b74813eebf5f5f2a6a5a4f3f907dcb8
+Nonce.7 = 35daa2efdad88fb8
+AdditionalInputA.7 = 5e0ae369b6e850ed30f9ae64fe105af3
+AdditionalInputB.7 = 3e697bb2bf25852645f2d16f676f9078
+Output.7 = 790b1f6ccdf352dec0e57fa0c772c64d7777e4bdb9ff8a91da018902203db582f901c20dd25361df22e71712a497578d22eea85246cefd425b08f15074341f39
+Entropy.8 = 462607b2b77b903fdbd42bf1d77bc81a
+Nonce.8 = b54d43006ade2a7c
+AdditionalInputA.8 = 6105c5ddedcc744665915ebe48ad3b54
+AdditionalInputB.8 = fddee235c37ed4bc21eae08e6153331f
+Output.8 = 16339e910eaf9bad904a7b3f9b2e0241d2b4665d1f9c7655f9217e34253acc330dfc98817d978186f8ad77b10f38dd72f471b4615b28f3a39c406623ea5d6377
+Entropy.9 = ba2ea99b792bdee8bdbaf9c05ab7b633
+Nonce.9 = 4453344644d434a5
+AdditionalInputA.9 = 81727d30d64ae07ff61569fc7a350ccc
+AdditionalInputB.9 = 6556f62f75d5268493cca5120114934c
+Output.9 = 2a3b398702bc5fffd914f91672aa05beb68782e0a622f67b21826c23326c5078ccda6aa3db014cec56a065636b8057e812a6f4b7c6c4de6e9f06aa5377b28be6
+Entropy.10 = 61cf4e09d9a46af318c706425cd350fb
+Nonce.10 = 28ec9c4ae98f0574
+AdditionalInputA.10 = 7fc3bf8ad33e5961745bb2ae7c399ba0
+AdditionalInputB.10 = 313571d30dc5909a03388c693f4ef94c
+Output.10 = d225f0c65e9ae8c36493b009476f5a5636d452544ce16b991c73d6eae5ef5eff3b74e00328f87f2030f3df53b2fc2647d63a28e5c7b58344ed99c5d0bc6293b4
+Entropy.11 = dd6c7dbac4fc4c8d9c69ce4dcf43b667
+Nonce.11 = 8326161c2aac4806
+AdditionalInputA.11 = cf959f9e938909d95c4725dc39d7efd7
+AdditionalInputB.11 = e437d226c40268cb9f63945cbce54b2d
+Output.11 = 90ddc53c48041f0c4501ffee617b3a3583cbf51a4c45ad7ba5b3dd3465ff1392bd2eb4651ac22a34a0f53772012712f23931ba8f0a3b74fae0a16bd4a1883513
+Entropy.12 = df4fefc1c3d403fb179b9b95775381e3
+Nonce.12 = d68483aee42cfc00
+AdditionalInputA.12 = e877eb3751e2bafea033ac8cc5ba66f6
+AdditionalInputB.12 = 7956874022b50aa032bafa29e721f356
+Output.12 = 6ada0620d429cd38754e559a2eb88c08266cd9cbac2448b2b8a05d927da17259199dbcc5eb0b7adee61c6074ae2e7af6b2c9b1fd5289fbc3d9be308584d0ae4a
+Entropy.13 = 620ea317344d86858d64f6bb05d44797
+Nonce.13 = f6ddc5844fbd739e
+AdditionalInputA.13 = 3ccfb069ef27f864e3b731d94c3f2c6c
+AdditionalInputB.13 = 80857d3f598b1b16014e6a3549a2d22c
+Output.13 = d7a787beeb7efc9c584f93345533a599ed615eb2136b8fb874a7f5a71aea98f80c56923098567aa3b4c31696826f081676a3ceed1d914c949d542390b699d3fe
+Entropy.14 = d8ba9d16a0070fbdf5109d3c1ed85916
+Nonce.14 = 29ce07dda61b5014
+AdditionalInputA.14 = 160ad77675c64c7487eedb34343700c0
+AdditionalInputB.14 = 1632546058f19ee1b849e5d27e2d755a
+Output.14 = e05c62cbefaf038043d49c976ba85521c20671d9f81cebf5a87581659e3d1819908e84ec0193a530f310cc3544ba90ad92a6c99d3a1af55b5aed72871db89002
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 0af13f645902af49e9a7ced6e36a210d
+Nonce.0 = c3bff291a11ac497
+PersonalisationString.0 = e8f1d1b4731c4d57d7ead9c2f600fdc6
+Output.0 = ac6f945a4b9fd3b47c74379eb1f2a7bbedf8eec68efd3c7a6cf68c54ae7a3f7be7280f459c2e0b72afa45cebbebba17c867e9611c896a57d515beb06a7b91f4c
+Entropy.1 = 0e113f47f2fc76e83e2d13d572245608
+Nonce.1 = 5ff85cc6a534f15a
+PersonalisationString.1 = 50250668e59de35fde91e08fe18484ab
+Output.1 = dcc64a966a52d6008dbe07a2484bcaad67b254d6f246e4501d9864b64ad8b7edf10fdbc6ddc414a9b431b058a7ee5ced23f7a6ac7eea0fe6131c9eb7412e68df
+Entropy.2 = 16d2a233f0497c751ddd85ef7cd862e6
+Nonce.2 = 7e7e1aab1b82675d
+PersonalisationString.2 = 15f81e40a2493b859cced33cdf7b7590
+Output.2 = c52097d2d009dce7cbd46d740de54d70c0732f96fac0bd169f3856e50f9e4601672538b23f371f780e61e82f2db99ef3834008aadc26c27855a68696ee812c9c
+Entropy.3 = ea36891e0d6426945a6e1f338c86ca4b
+Nonce.3 = 896966600e85d3da
+PersonalisationString.3 = b8c701a11e7c008e37c232627c24b6d1
+Output.3 = 446360f16b1e59a82596e61df23af18f5a95b7d8b7dd6172f3575d45251386b04b69785ba44a75eb2a5415713a84365cac81b30df0b48a610977fe6961e7ee8a
+Entropy.4 = 3f4138d84d7abd13bbe15e18b292f15f
+Nonce.4 = 3462e52e82f28653
+PersonalisationString.4 = 24c5177084951cf532f2432a1882596f
+Output.4 = ba2ca1e443c75d55c42065ba91f77db5b8de6c342b65a2c149445979ff263e9d018f564430fe1edb48b403cef23f860ea27146d8511843e0a39ff337ba74d221
+Entropy.5 = a6aef80fab61e27ef611b86f924e976c
+Nonce.5 = 74278f5023c2552c
+PersonalisationString.5 = a3851679e112948201396d98d6be5c13
+Output.5 = 685726827f3d38427d07dfcfb64a7f95b6f06ef01ced281dce7f41303412361124362ba51ce8d2552af054a20fdac94e5169165b715267638c1e0b9b3452b5b7
+Entropy.6 = 0164ae53e533f2f1222d4aa27276814c
+Nonce.6 = 2605f589cb1bea9c
+PersonalisationString.6 = 9de703a5e2bbf2e53d0fe3b573f52acf
+Output.6 = fd7f64622e87de3b66e19930cf4ccdc3e672f5a4def0daddb37107430ec7f691c6321545103c2a614d7f0f33173bdec420585822cda8c272201922b602f5d8a7
+Entropy.7 = 29dc8bad500cce295b9e86b2159c6dcd
+Nonce.7 = b69a5a77694fc4a0
+PersonalisationString.7 = c53b13afbf21f17ee9f4dd7c0993e0f9
+Output.7 = 08c97d638b5d82599310325d3b1e6327741cd91887d658b5d815eeed7a72ab86e2fa17e9d013e17a9214d6396ac1481f768830a4d8c4fc392012e9076434939f
+Entropy.8 = b3aee2cf80e3d05aeda0e01cf65ea965
+Nonce.8 = 24b58b7c6a99eb2a
+PersonalisationString.8 = 7344043c84915bcdd6d81f3fe23ba273
+Output.8 = be353cf832e846444af0015ed05d54b72c9a1a0231f2a4c475611746ef861029e18842c1b76148d2a3eb0174a30cad81b558d0d1e01a8c7dd510f0b56f1fddc3
+Entropy.9 = a525f69165c44f3a8af80857a5e874b0
+Nonce.9 = 0c806a40c1dcb7cc
+PersonalisationString.9 = 4312c2309a1dfe2d9a66f5c18fc40b87
+Output.9 = d0b46f7e1877db244ff4e0aeb64c4efa3e8c2a8662415cf5ba67f2dc91e82310a6a933c4df6a402f8fae270b229bf254cd35943a13340979376669119e0e5cf8
+Entropy.10 = 0608dc6c8f9f1956fbe7d5a7c82fd3b3
+Nonce.10 = 615b62a00d6d8d85
+PersonalisationString.10 = 70dd43c1764318174a2857c420ddf407
+Output.10 = 71f4b5df5bfa5fd52cdc9851a633f77ed90458b5a290b04d2f35130d67a42c1698ac5f9b139a9ecf3590755a204160a3a8f17b77726652c6dc6e9f00966454fd
+Entropy.11 = 7b391f35db0e53bf48ee5576b023ff90
+Nonce.11 = 7621aad532982b23
+PersonalisationString.11 = a6e75778b777d01f006227c400d8ff86
+Output.11 = d61780b5c781412bf3085eeccee49b99358a183223828c1d8013ace613d89a4504d75ba309e510589a53b472bd5fa1ee2a22392b8265707c15e32935bc8efb4e
+Entropy.12 = 099f1f591707d1f9abae7e2b65adabc3
+Nonce.12 = f90d357a901f1135
+PersonalisationString.12 = 74b8260ced4bbb80417792f193c6f9ac
+Output.12 = 86f506256d29450f1607312739e5a089b6b786fdf52145769cb70ef4eed32109cf62369d7a765955781eae63520275169368257c6d348ecc900a3898778d9a1a
+Entropy.13 = c9059d7c015c64f6e41aa492099f4ef0
+Nonce.13 = 3f6e0769cee177c6
+PersonalisationString.13 = 76c6c6613298d925a6c507ae654d6d9a
+Output.13 = 238111c006e514c05f2ae935a32dbaa0b128daa0736e83d93403776c91e477d0d02c4a24876a2329a0f106038d701feddf0247cc75846dd30108299d840ec4a8
+Entropy.14 = 98d13c30a6dae2ca76d7d6679f1ffbc4
+Nonce.14 = 490b939eb556ff1b
+PersonalisationString.14 = 6c10a7c30fb534b5934b1c29808494b9
+Output.14 = cb7deeea97bdb03f72a03b2d9b5f1b330344486e53e04927c58fb63c971ac98733b0249a1efa85f88bec4818e13110220776e4fde429e6390af466712901189b
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 25ad6e73055ecbc949f291f0f797f17a
+Nonce.0 = 1f85a92a460a2eea
+PersonalisationString.0 = 83d04b4b1591c7bac9bca907bbe9ddd4
+AdditionalInputA.0 = 523c6cb0bc27d19f8d2ebef57926dde4
+AdditionalInputB.0 = d33cd14b5b7937388e89ecc0806303f0
+Output.0 = 23d9195e4026edf07088b837627547a0ea9137ed0336d7696015dd6f2984dedb2a207f2eb8a25660a5ee781178579a0f233fb6f7260358dbfd5325c3f8c8fe33
+Entropy.1 = ae332f73390e27756bc93d2b951b8b44
+Nonce.1 = e69fc8a16450fb6d
+PersonalisationString.1 = 5f76863d3a2087e9cb90e112c16806e2
+AdditionalInputA.1 = bf6a8e056e6c3cc1a6cbdb6b59ebeae2
+AdditionalInputB.1 = d87ab9224aa9cd9b5b847835cb0daac4
+Output.1 = e0a2dd5606a0a26157f9210511bbde50c92f34ad92363cb92a05208b60b33d21c3d6c0c6ef054ec409b4630deac4c6d1ad1b6be75fff27aa749413c8b64cf3e1
+Entropy.2 = e1a589afab8391692dba52318aa8dc0d
+Nonce.2 = 22ebcf2e24a95528
+PersonalisationString.2 = 82e8c355dbc9cd4c8d52fa452118f9f8
+AdditionalInputA.2 = f77457ec32de666f370da9e6c220c580
+AdditionalInputB.2 = ba25aa3ab3d50a72b6c1b43f30db4455
+Output.2 = 885955d127faf4c921c4ed3f38bc1542b95a87834d4d73d1562400a6d3aa8e6c697b711d910eecebc9ca4ec2dc17e79893e7f734c45675de477f5545bd94cdee
+Entropy.3 = 6fb76fcd3d762fa4c50de1f22e927683
+Nonce.3 = a5eef12f3b3c25a3
+PersonalisationString.3 = 54867d7dc8cef52342bbc009954efbf8
+AdditionalInputA.3 = fac552aa8796e8858d55ae371a0f548f
+AdditionalInputB.3 = fefbe9c83c159fcfa92ee818761d49dc
+Output.3 = 094f863b88e2b55ef415d2688294c7d8d2d776c169167391df36f80ad8e9833e97616ef6e0a45f940d66383018aee86a480a2651d6e2efad615a051f0dca64ae
+Entropy.4 = 5b32a392dc665ab58f2598eab07d8e53
+Nonce.4 = c6f61310738860f5
+PersonalisationString.4 = 9f309a685329821692a97300620c0156
+AdditionalInputA.4 = 875a4a43bddf1a7305526a488a1e0eb4
+AdditionalInputB.4 = 2114a7cb15490c063bb4668f369a3d8e
+Output.4 = 91c1f199f671ff568e0ece46088765162322a8216066f9a415d7ccd9dfe723c521f57dbd8469e39bacdac31e742a2d2ff2a31d5a15a01bfd32be50286c730ead
+Entropy.5 = 79957c33e45bba1c8ae69029077ae36b
+Nonce.5 = 5b49d8e7c180bcb6
+PersonalisationString.5 = 2aa8e77b94fe0ddf0e57302c8ebdc22a
+AdditionalInputA.5 = 14844d85e50cb1fcb4e6887b3fc67f54
+AdditionalInputB.5 = 4c7cb069297c18653394b82be6a93099
+Output.5 = 0661e2416e71fe49119f967642fd37ddb582a189a888e7d4a2aa56275194c8ca698fb2d696834b88b572f0fdf5badb6bf58d1612d25f5ee3f62d33db9a86b087
+Entropy.6 = 70508980362e962ae778458081cfbbe6
+Nonce.6 = 29ccf6edba462dc2
+PersonalisationString.6 = 48a3d8dbdc85188abb35b56c194d6020
+AdditionalInputA.6 = a8147242e24737fcf3b007d284d661c4
+AdditionalInputB.6 = 964a9d0686d96193fb2e4a35145edcc8
+Output.6 = d81bd5da60d99d6daaecebc060652633ec14dc3b84693bdff767771f032bfa2e4dfad53ef6d19910bd925df1209f33ea11e3f1e837b03e7a7003257ff420a692
+Entropy.7 = b78371baf586c0dd054bfd293fc7e8dc
+Nonce.7 = 119b232ce4cada97
+PersonalisationString.7 = 3a5875b443073c9bf64a0aaaf26ba44f
+AdditionalInputA.7 = 4d2d4f16b7b7d2d2bb4d83a4929996b2
+AdditionalInputB.7 = 7d3173e08aea4c8b6ef9e3cd698f9b09
+Output.7 = bb048641f036dc11b8df8ad3e4d5bdfc309b2c3f22b3d2b8acf196d50cd542de13cd99978a920acba61dc07c646b48094479bb4417d8409abae3d69ed52a2a3e
+Entropy.8 = 96bfc347b306805af88da007675db47c
+Nonce.8 = 12953706a06eb530
+PersonalisationString.8 = 46733dddaf70e3f2075cb870f47e72df
+AdditionalInputA.8 = 64f79ad1dfa393d36bf5be833290b694
+AdditionalInputB.8 = 5d210f1285f0fb038a753476ef249179
+Output.8 = 67b69ba434903e2bbf46d3f5e300b9e5cf3301beaab7d30b4652ed3bf6626579503a544e58237c5e551ad5ee17b736120c37a3029bd7a1034d4c49f61e040aca
+Entropy.9 = 9a4c8b46a974fbc85e256d1f07cc59aa
+Nonce.9 = eb8d662102090114
+PersonalisationString.9 = b94b8d2a649266645a715afca0995d9d
+AdditionalInputA.9 = f336e1d62ac568ed132ea01815dad508
+AdditionalInputB.9 = 667626a23d23b7165a6a885d41fa901c
+Output.9 = 2df33f7ad2c2d86e61633c25a8ac57b5dead88021c93ad69ba6c522799c4bebfda782772c81e7e02d8b882546b242bb22f310565bac316269ffc8004d5440631
+Entropy.10 = c7d6557565a1fde480841f1f1a10f67d
+Nonce.10 = 02f847986626bb4b
+PersonalisationString.10 = 618cac99531791673603a16b99ab0e80
+AdditionalInputA.10 = 810c8be4b1801fec754063c261156660
+AdditionalInputB.10 = e2594d34ce1ad65351286069eb1a6308
+Output.10 = a3c4d02da0166fef32ce69975db94d196044e81f59044d22df8405b468ebd5a92997feeba82d7adf97ccbb1a59355626aefae0d435b403b7deb9005b8f5ea9a5
+Entropy.11 = 140dbff63e7083c308419f864c093e99
+Nonce.11 = eb1c6692db949d5a
+PersonalisationString.11 = 23d32721f1c03a90f39ef021ac8884c7
+AdditionalInputA.11 = c6e3808db9f9da14239ad7d718286a96
+AdditionalInputB.11 = a84aaadb7d572a9afca3f76cedf0a4b9
+Output.11 = 743df97c2e99d974077772a6fea403128f41ff32a95fb4f8b0eccaa0571cd2578e482ce7098499c4d3015f9192355238c70f8b76a504272a8709cd0e2dc82c9c
+Entropy.12 = 6af3962fd6ae84dec3f894bf39c64642
+Nonce.12 = c020496461a39161
+PersonalisationString.12 = 75caefe7752045fcb1e5fc227ffb940d
+AdditionalInputA.12 = 1664f7cc88d01d7f278615c563092fd6
+AdditionalInputB.12 = 60b7a86bc0c8dd2bd07adaa4d5c24d68
+Output.12 = b4edc9650d8147170c81529f2fd7331153a61d0d58b76b50bb52da0a795164beebc609320520328f3d4e83cd80d0b1cbbbfd0a84a96510881101fbc740b2817f
+Entropy.13 = 36e27aa6b36699e9464595a932cc928e
+Nonce.13 = 6516bb918566bf89
+PersonalisationString.13 = 9bc683a1f465ba0f2ce18c8b9c614244
+AdditionalInputA.13 = 0d175b34d8b9e270745a71f35d416f10
+AdditionalInputB.13 = a790c86fdf0ca80eb3d6f702916ea99f
+Output.13 = 34ea9629627f6684b9ab85f81646864dd8ef3a15edc801dc39a731dc9e80e626fc8ce21e9b62e948886489d5e4436e659f26bfb3435104ad9bfa0aafc5506917
+Entropy.14 = aca359f107c324648ad445564bfae56d
+Nonce.14 = f95d1c8fd266df64
+PersonalisationString.14 = a5cfdc76c4e849e45d8bcc68eeb01284
+AdditionalInputA.14 = 57802cc06ef0344bd14a4857c69f68d4
+AdditionalInputB.14 = 5314fccbe452018fc16e5ffb5d90e888
+Output.14 = 211d90ecd7d3ddd03f91e8a674400fb18d3fb39886a2262f0e09ff075f998d217419f2e9353d45b9df10723ebaebcff1aa8024d9b096064d6f31835b75f8eaa6
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 2e1724db482232a3e61f92c1c266faf8
+Nonce.0 = 38aa5590f6bfaa4b
+Output.0 = 4438b48a45fb0141e31f0a9624dfe6fcc2f9edc075c0a52bc5fc46d85a966c853feee6af913234b3f9a679f667898dc15a24aaed89f035bfa5da516e435bbad1
+Entropy.1 = 22564f77c45b053cdf61433eb96b1d7c
+Nonce.1 = cf73e620f8515203
+Output.1 = c7908e712c716d1f5ed533e142e72187ea77fb4f516dc31aa10a1e549d85eadb7a4646170464c1f7a752c01a9406be6643ee967d0464b84b6a08b2ed0a7acb07
+Entropy.2 = 2a5b012b097926e8f8570ff8692cc5d1
+Nonce.2 = de8e072d1581afe6
+Output.2 = 81f2e2c8585e8dc465d78e7b75b9f6c2bbdcde9475d4250fb49e04c56e30489e24df4858f74ed085cba9f992eb7d13e4e064a745f451cb6edfc37c57f35e8d57
+Entropy.3 = 2c6b05d1c86aae86a89e816482983236
+Nonce.3 = 3385d929ade996e8
+Output.3 = 5256a64429a556d1a91d58999c75b36de7cc01f7463c4e24afd15de0a35dcb5ada2679134f15f4c51dc06b34454d6dcaa1d2511c1d226f232f445276255751e6
+Entropy.4 = 48bab2f82d80597f93addb7e1f0f2e72
+Nonce.4 = f5f49018e8559b0a
+Output.4 = fa323d2dae9674d80bd2f1427c1c79532b2374ed1fb3a13c620605048ac578b3070c6748314e5ed1dbd3eaaa641e505c3d3f59fac25d897bf394dcadb63b7ff9
+Entropy.5 = ad7aff4224e93f323545416a1e5697ce
+Nonce.5 = 9cc12ce2ed5e8d1c
+Output.5 = 36c72223b9244cdb2c2c0dd5a59706558e2e5a11845cabf9545cd4ad08154a46703ae750b7f0c4f5bb33acd3c381e5ee4ce09916431144e8515fed914d5c5b5e
+Entropy.6 = 299c01d3a2f1323df753cf14845e0de5
+Nonce.6 = 511e36232a11291d
+Output.6 = 7709fdc6278db44b21d39a194b806e48e7fe3e9ae116e238c205c2c345981ce81f255713597cec2b3ad3910f2b6742aea66404712df8328d2f2d1948413097db
+Entropy.7 = b6ee7779994ba8cd490a03cf6899b135
+Nonce.7 = 66eda9b5a54d7ded
+Output.7 = 4e21b48fde082263d76a1034e87a566e1a1c9d2e1bd5c748e30e1d8750f2ff03931c4bfe194d2da4ed1cf1530301e5b1abc4bd2bda7be89284f8c2193688c982
+Entropy.8 = e3ccb991c3e1b3eda0b40b5142ac84d3
+Nonce.8 = 998757e00da2b9ef
+Output.8 = d32bc190998f18e9d5509f46022905d011bbec774f0583691d48124379e81d99f0cdd46138bccc47eb773f257a662b798fab275886948936bce72dbd2c6188ac
+Entropy.9 = c34e398041ccee23897f7ca343f35640
+Nonce.9 = a24f8ea0886bf6bf
+Output.9 = 5ff0daef3004c503b8098e3b968a8e323319be786c7b742aacee355f1a3c9de75061108e79181361f2e3306af07bcded10e32def1b7bb3e4ebc17096c6933058
+Entropy.10 = fc1fd25ced5bd30a621cd4ae779680ad
+Nonce.10 = af17a9c974b36e6c
+Output.10 = 59f99d085749367478684a5ddc8fe181b97a4e67fde5c151c4696d523d7c14b72689a95a5b6092e949dd163bd8f9e45727d2b8a31ed288c8c6229e8be6808ec8
+Entropy.11 = 72c0e23d92070a8bab707f65d595186d
+Nonce.11 = 1a63dcfc52e55c58
+Output.11 = 49fec2675885d54a4c6b101f291945c735ad9c2db51a63b941bc182ee51fd8fd84b8c6337b0f77f310ca50693b91b590e3ef655be7ad7621ed21ff39d3292efd
+Entropy.12 = a09091ca3280f7f58376bf680de11192
+Nonce.12 = 1d08dc0d060095b3
+Output.12 = 0d59aca023647f0bf26881d9126bab8c7fea922d2b4c24f1dcc0bff87a3d0d1b1da0e875626a56426186efd0071f5a789fbf35fa8bfc85afafd3af6c9c7cd07a
+Entropy.13 = 8b4175d0a19539ef3d5d40846cb40ab3
+Nonce.13 = 8c310d431cf00b3e
+Output.13 = 92b3b0e57ae4cefc40d6e5fa0d9fa85c970c2dd0cd4e04d7272756634b84cc20c5368f3a7b3e1211c5fa2e6335436b88582d048bc76a7c19bbfec135a1055cbd
+Entropy.14 = 68c853b9129cb20a3ddf11e78a5875ba
+Nonce.14 = f5ab548605a51103
+Output.14 = 43cfb03a51d7da40b39468361c2ee078819075872f4f7c5d2b09ef39914602a72a62c63e29383fbb9e450fb2aef32eb9f370cbbc1ab4708a5d2898df8ae4f626
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 9bfaefb698b1b5fcc62db2c16498c33a
+Nonce.0 = 111d8612a0f04e2a
+AdditionalInputA.0 = aedbe02847b1b08b6a673bdf25b0224c
+AdditionalInputB.0 = 9901ead62ce56573b0f71cd020fe3469
+Output.0 = dff8bf2aec531f8532607e738bd79f91d6085cb19568b7b0240ce6a6b371a282bafcdba02137df990535d9ebf0ba77117751626b2678aca7be4decfd6b9d4b38
+Entropy.1 = df993fedd59674a87a15147b80be37ae
+Nonce.1 = 22b3315accf1ad13
+AdditionalInputA.1 = 9f9b9409048a711745c7ef7a6dddc17d
+AdditionalInputB.1 = c560685bd49c059f0438e9dff62d82d7
+Output.1 = 04d74fa1b69de6893a47bfb0b6ae58a7984bbb088fce620b9d8ebc0b54cddbca0045d75d5b046fcd8895c16b0513aa521b8d4af276783d9d2577acb32ceadb89
+Entropy.2 = db4fae0c4302ebe84f2a28ad984daec1
+Nonce.2 = 079ebf0f0093cdb2
+AdditionalInputA.2 = 2ffb6485ace2ad77d5f8adbd09b3f372
+AdditionalInputB.2 = f4b844743d0065a038988049f6aa53b5
+Output.2 = cb8e71448ff7911e5caea7d54a12945ed34bea42dbb6573bf8420dbb6bae6a11e0248292c9d93da3096856e0f29418f1c80d138b3415667bfb456b089f26621a
+Entropy.3 = a42348f1bec06f5836fca060661434c0
+Nonce.3 = 2f70f6a2e7d0b436
+AdditionalInputA.3 = 547091ef85b013f3f5dc822a5b3f27f9
+AdditionalInputB.3 = 2ca99ee797f4a9b16788d298bba2d183
+Output.3 = 4b41ed6281a81d442a8cb03a8145fe78863d25d7ee70e72d4d3afd5168164876a66b5aca318c9c91172305e388e1dac386cbab6d150a3912369c9390086bd744
+Entropy.4 = 1483b98e08c04012b03f1f6102a28306
+Nonce.4 = 89e67ca1da05dd4f
+AdditionalInputA.4 = 30859ecc3025047930b3853ae68abda2
+AdditionalInputB.4 = f50557f04029286cafb2fcbf1464e4e5
+Output.4 = 45acf52ff569cc481595880162893b579be40543c56a94b7184bc992d1df378518f93fb4d9755d8658e9722b3479536ba4839a8eee7a655fed884aaf5a556eb7
+Entropy.5 = be9fcdd711ce1b0a3c97b1ac1979207d
+Nonce.5 = a80294b5d659ffb4
+AdditionalInputA.5 = b20c04546a0c6a5e6b95637c960bca63
+AdditionalInputB.5 = 6707cc217fb198af852e06db14615805
+Output.5 = 6b620c76f0b1a4a3d7f0f60a7645811bb79bf18477f85b94f0ee09e0c68b0fdb3e11d8e58a34d24fe36e8b7ea72a26b6cb92d987c581ab48e5fb8fb70f765f5f
+Entropy.6 = a58eb54d109b514db338fccea28ef2ea
+Nonce.6 = 912d24a1d81de7dc
+AdditionalInputA.6 = 59d459b073526021ec45511256cfb358
+AdditionalInputB.6 = f79f7e5a2a791a39bb32b6b15fe01461
+Output.6 = c126d409c20d5d3d4c79461256f5403d1cc59bcf11a4a616abf0653032e0450a11f32f3816c351912fe8e30084ed34dbcd0a9c95e1c01362ef616dd22a137f72
+Entropy.7 = e0a5d94d0ca95a7b380b999c69d9011c
+Nonce.7 = 47cdc55a1956af8d
+AdditionalInputA.7 = a91684d012dc48830be4cfaee2fc8854
+AdditionalInputB.7 = a061c2b13bf1006d3ba2f2297f954fb5
+Output.7 = e136ea573d1d81ecb7842ec43af0b4b9783f3fe4b1ab9024c62eaef0860e813d5a24f1a5fab74b8f1f661b5039290256d0e5aaa9e0fdab3a189b2d6695893999
+Entropy.8 = 918bda9e89727bbd970425c7483ef1af
+Nonce.8 = fc3beeec380b02c2
+AdditionalInputA.8 = 6f483673af64bcd74cfeff3f98b6cd5a
+AdditionalInputB.8 = 15bd5eabba232df5a1b603a2fc1639c0
+Output.8 = 4385551a3a7dd90d77a765f7cb859d80ab6ac4848e3bd91101b4523234ca0f16c06a4579a97ea51db037fd8b8c4083cdb6f4ed9756f5a4488bb5dfcf7a8f8a9a
+Entropy.9 = d8add382d4dc7a1d10d4630317391801
+Nonce.9 = 6fc0b1a3aa2b3adb
+AdditionalInputA.9 = 101fcfd6608075dcbbf2ebe832d96b13
+AdditionalInputB.9 = 632f7a11fba979d2979e417e2ded1d30
+Output.9 = a6a15595bbd857bb621504c85f03033ce47b5df86296b80d40d009fe6c5e1ffff0840456990a14f3a1c49c36737b70b62f406fa3c532952fb22efc76009a1b1a
+Entropy.10 = d19fa338c7bd5240747bacab70328fb3
+Nonce.10 = 5b428235414283b4
+AdditionalInputA.10 = f37c9feb90c96a263f41b1c498d5e075
+AdditionalInputB.10 = a3d88696fc1a447028423171bad46524
+Output.10 = 11ee72b481d554f0fe49dc2737466d5f5a6476a2b5b2f93cd60ee8ab1bf7563d3ebc605e44c365e7865bff31c077d176d361a4240627deb28ad568504691f947
+Entropy.11 = c3d82c63014177e62bda82dde9115450
+Nonce.11 = 5e6f3b1c75706f5f
+AdditionalInputA.11 = 72a717c66fb26906d6995d3eecc579d9
+AdditionalInputB.11 = b1b7a9ad3c64355d5d70f03c7b8329b0
+Output.11 = 34c309f2352709a91f1f1a6afb601466f86dc8022bcbfdee095190a85fe1f0332b8bab32f44249430041cb0cf2c40d9cdd0c0df423e34f2da8d7f7b832945619
+Entropy.12 = 1c34804679408c0dd1c0b0b2cb4c0c8d
+Nonce.12 = 23e6d5a131740ec9
+AdditionalInputA.12 = 8b99e4485510e7c4ef3186c75d0f421d
+AdditionalInputB.12 = cc1ecf023c9beafb63486957327c2bde
+Output.12 = 7fbf33f05108786fe01997146a27e5946876499a8ba52a714716d982cea23f392d40234d3e00338d1ac8809d43c779424030193bc6123b7067b6a8c2ed179a25
+Entropy.13 = aa70aa9d3c0a77f86838805eef3482ba
+Nonce.13 = cf7a0f57c7dedf50
+AdditionalInputA.13 = f6d476eae42f02c9ec21981229d0f976
+AdditionalInputB.13 = 1aa41efdf106e5a3e5d976778b8f0c32
+Output.13 = 84c1c0619f6979e2f4d2abc6333542bf42fd3279142f071dadb26445fb2de51c4fad681dce8918af3ae16419fafa3c5526d8c478599e85ee61a273183605450e
+Entropy.14 = 94c69757c975e53ca944cbe8f7686f85
+Nonce.14 = 6e145cc7d72dec57
+AdditionalInputA.14 = ce08946b04fd8313dcda8cde3b0ff9df
+AdditionalInputB.14 = 9ffc939d305ae586d86a1a147032680b
+Output.14 = b1d7b387a9f67b915055e68298e03773a0197556f8d4b7e029520335efdce2acb0d4d4cdae8af8c09fb57a215f2087abb84ec85b12dc3a853d73a4dd114300c5
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = aba36ff7a53537454b5cb26839171540
+Nonce.0 = 6871c0f526fbcdc7
+PersonalisationString.0 = dbc44af498161f1f2af6fce66ccc30a8
+Output.0 = af686e9aaf10aabcbb44b3748953ad185dbf12898e524d04086102e45f3841c650f623f48f542caa14793e4fcbbcf2e461be1c01ed8f1f48b9704d79a8ebf79d
+Entropy.1 = 47afb83e3ada220f7d7e6382a8b38cbb
+Nonce.1 = 7ab8ae9bac8b15a5
+PersonalisationString.1 = 8bec1cb2d180b3677cd1a8604b614dbe
+Output.1 = 90cf1d9e65d976cace2f20e78147d5040d02237e04173f1f3710e5227dcb8564684f2eba38e1def72b93bedb4485f2b817ee66c189024b2a127365bc83500871
+Entropy.2 = bb6993aff4804a87dd425973fde35311
+Nonce.2 = fb14700b335a0146
+PersonalisationString.2 = 1eb06544caa86e2ac4588aa851e8fc0e
+Output.2 = 4ee727073abaa3d7418d6b3e3bd467c9284854423ba6d4ef02b2dabf14b9b824b27ada2b4a42f7dd1cd39dc4420ee6e843fa7f2eee06bb05c647dcc0d697c009
+Entropy.3 = a05d9d84a50de79701c75959af26a8fa
+Nonce.3 = 7ede7f1630dc01f7
+PersonalisationString.3 = 54f5d6e5d9b1feb0a1c3d9a7ec81dd98
+Output.3 = f47aab57dfff931d4bfc75a0131186f0f5c1505e9c6c7eb935e31b49f134efc00e45fc967358eec4a921fda0d0537d9e4fb33b263db8e08e73f21fe17505196f
+Entropy.4 = 807d1b1096e3d7f789036d644dfb9e8b
+Nonce.4 = 8cd77f71ccd8a322
+PersonalisationString.4 = 4f72745e2f2aa5436189db9227820e46
+Output.4 = ff4ae0064c25fcef074ab3650eb6d3044f86687e6db22629992b08ed078c65d03daf6241a310e5763c298663848e32d0614e98989a16d37dc1729135fca5e62e
+Entropy.5 = 1abce21f123368b26c6656b0cebc03e8
+Nonce.5 = 1f7a6d5bc2cb9759
+PersonalisationString.5 = 00cd259bb87e4e6e213ed44eec19d99d
+Output.5 = 86c00d3181c1b606c51f90989383b4b8922e4a190b9401658f8d4513697ca7d584f5fcceb3324f624c4781dfe55c0dba2d66bd858fb643f23ce5d67e57250007
+Entropy.6 = 06d5fb814ca4b2bac9e1cfba0f13699d
+Nonce.6 = 0ea87b9f3bb1e629
+PersonalisationString.6 = f63679dfa353703f12e7236173c7d320
+Output.6 = e0c8ff1f1d2c69afcae0b73be8b3c4c7413f7fbcbefc3bcf1e688d2a7d0849fdee60bde91a0fb1a5ef4bf3dfb336b73ed047dfa77477a51c6dee817263a20c37
+Entropy.7 = dd3b7cfc518c180cf289f14525150ca5
+Nonce.7 = 3694043c71c2ddc5
+PersonalisationString.7 = 3b1c08fab6361851d7a518ae355b8c9b
+Output.7 = 59164bac7a714fcd5a4580fb54ed4ddf99c39cf59c23f85f6c5216f4e89cf28da1599f8257a6afc302ed3a1dec003ff450912c2bcd682cd34079cfb3ccf2593a
+Entropy.8 = b7314bacd0b3e9e2214e11a49c4fab54
+Nonce.8 = 8cd59a9c39501c0b
+PersonalisationString.8 = b6e3a4644fb913a54c8921cbc1737238
+Output.8 = e92c97ccbbd6013178ee06d01ad2c9eb5464a7e30432b943e0b371f136a994b9f544f37b60561e1025b12b5a15cb661b301b5dd4384b8bc00d1d72b3c618f875
+Entropy.9 = d62b1fc2b045718a3fe59dfac4a1c03b
+Nonce.9 = 419917d58a6756a5
+PersonalisationString.9 = f4794bdc109f13004b893b3283c0977e
+Output.9 = 0542dfdab88e349163ed9ba634ee76257dc9276661cd5dd2faa931bc3a2e9c2d17e570ffa1a5f14496f0eac3339efde46aa40e87f21a985495fda394f2066ebb
+Entropy.10 = 91b4aa7d565832e96a21d680a0ecdb4c
+Nonce.10 = 060909e2ce8b2dc8
+PersonalisationString.10 = 5cbaceb89c150d229b516c349360f27f
+Output.10 = c079c2917e8f6b84c58e0226ad0b8a60a87b8822a990459de24cc6554c7f241aff30cdea61a748470a58c94a150ebddc355c644dd4786e36f17ecfcea7339d42
+Entropy.11 = 32e166c0938d6da721cfce235a66a180
+Nonce.11 = eb687996a8ff6394
+PersonalisationString.11 = 05b99f8d9f102c5ff6d0d45c4d685ff8
+Output.11 = ec5ae397257220452e6105a5a29f56d9332132f5338d19e81af6d31022bb91f87f04e4520d50766143d3533e7b9d570a806884a3dfe281e000f77e7b85594434
+Entropy.12 = 3a3d6aa9db0f540a37eb81509ddb655d
+Nonce.12 = 1fe8c25b27ee3abe
+PersonalisationString.12 = 8e15a5ad7a5f2938ebdb5c088bdcf307
+Output.12 = 8d7eaee50e87f0bc34a49be94e7a4a64fd1ec9861ef334222ffb15af8929f9ed42fb3fa629d6ba39706b9193e12ba2404476177c4f69bfd18cfe59555dca7c04
+Entropy.13 = c08469f836fc1248ded4edd8af4d9de8
+Nonce.13 = 746ea2d74cccc4cd
+PersonalisationString.13 = a51818ae5437562552651180f3de5dae
+Output.13 = a08aeede463fc9ac48907ab4b0b39d6f86a879f421816141a052eb48d87ff5d9b5b6cbfeefdd8cfc1772eb626712453f88ec747f6a05af917c9fa161ede11d7f
+Entropy.14 = 0ce4c1828f9c9f0aeab4953672235923
+Nonce.14 = 464b42c9fc5b3831
+PersonalisationString.14 = 48de34d848298dcf3f58c52d96c77bf5
+Output.14 = a7d3790226f5ab5b3833dcc763c2e9e7c5b77d57c2fa261547ae0e39e9784df269d08bbd4036462f3accc71b378b0941e99c327c4a503439a93b4ec7a039a2a8
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 707a43072eacb8cea95fb8521ae5160b
+Nonce.0 = fd621213261630ad
+PersonalisationString.0 = 6bf9a72eafe35d583c915c9525747ba0
+AdditionalInputA.0 = e3dfd6927c4ae103432eb6196367ecee
+AdditionalInputB.0 = e18cd504e94027533cf33071ca931b60
+Output.0 = ee463cdc78dd253c4466ddc2e35cc4a91af20ad3b3396669cef5221b0a9ccc5dfc723b2fe1e57fa26dd030ad0b6ea14ecb89f91c4bc69382a01d8dfa6f1dff8a
+Entropy.1 = 3567ac54b903fd5ddc57234c319b1415
+Nonce.1 = 8f75c56a85772192
+PersonalisationString.1 = d1e3ffed85211c408e31db12e85b75db
+AdditionalInputA.1 = cc3884335e19427caf09f01c634b308a
+AdditionalInputB.1 = f7733d0251ff02afc0e961c1122884fc
+Output.1 = 28c69bb4987642e5a467938f52a73714d39ad089ee09dabe70d69036178f5998186cc645100b56f98ef45ce35b06f09c2620ba680a5a03d3d95943ed17160fe4
+Entropy.2 = 41767258e06e501124f3db8be458d3bf
+Nonce.2 = de8fa0a79f1a7f0c
+PersonalisationString.2 = 9dab2f46d22d378608e21fc237e99871
+AdditionalInputA.2 = ea41d133b4f86a35227b76167f51bb5f
+AdditionalInputB.2 = 7161e12c6f65c142baf94f1a09e94e22
+Output.2 = b390c9520ead2882692a29593d165c58bc661462112af6d25a571473e61f1cbcd075e3ad1caeeb51cb99284051cea45a1706e984e27c3284fc1e87ab68a6f146
+Entropy.3 = 19db2dcdc57df21e55b6564eae47410b
+Nonce.3 = ebec8ece62d329b6
+PersonalisationString.3 = 80baeca82b3ba207b9f3750838bde498
+AdditionalInputA.3 = 5d74cdd7bcbe7bc948b8f13efa835ad4
+AdditionalInputB.3 = 17bb7cb91b4811a5e7db26784cbbc2e5
+Output.3 = 2654d98667f75615fb6c74d5b90b623cccb96249e14e08e88d1cb5e0909326b67767a573e0a4d1df057f2de7a495deaecbeb7e25e3aa82de555908bfe3cc6a85
+Entropy.4 = 64d7b42c52643376d8a11b0da5cca5e6
+Nonce.4 = 6feb035f39142514
+PersonalisationString.4 = 3f12a6f24001b98c1f24abcfab689508
+AdditionalInputA.4 = fee482b1fea05365aba07bc7c3351c6d
+AdditionalInputB.4 = af135983ab811391453513491878b5b5
+Output.4 = 0c21f697f1b00d2283aee4e7b7e10133386ab0abfadb5e14bfe5b452a6d917462a7bd0eda06fa141b1bc3eab4f4773a240be7351e32a1dabddc57bae02d26cd2
+Entropy.5 = a55a5a0729c39efbc86ce64d9151034e
+Nonce.5 = 10f1155773fbcd3b
+PersonalisationString.5 = 6c6f3f778015b2d334922e7a13ead6e6
+AdditionalInputA.5 = 8410155a9f4d40a3298d5b0f42c0ef46
+AdditionalInputB.5 = fd911c8bb6ff14e7d76a611addda7211
+Output.5 = 165f07d14bb1b37bd9e0949e7b0c0dfadd067adf15b66cb396e6444bcdf11bc234b0d59b2317214a9cde72e532f300c9d0907ff59e6212826a920fd92b53adf7
+Entropy.6 = 53ea1bef7112fdcb15513616ae7e0703
+Nonce.6 = caac5b2fbf5bd1b8
+PersonalisationString.6 = 7904268d846f8141cd783ecba6efc901
+AdditionalInputA.6 = 0364aeeaf7424c92c2611f3386fbe38a
+AdditionalInputB.6 = 9c77d680c5f270aefa8a45b3e9355330
+Output.6 = e56fa9812923890b9481ee0780ea23b205947e80f3e38f55c22defce6caea84fd9850f2c509c5148e01cd977348cc8b3ccabd3d7515cc2ca95d0bc1348bac5c2
+Entropy.7 = 1faef5935cb82d270813252c77ef3d6c
+Nonce.7 = 75f68a1b658c7277
+PersonalisationString.7 = 0815fa388db03a892df4474f19de31bc
+AdditionalInputA.7 = 9f9223ae3786d38c43e0e92aa1bf5e3f
+AdditionalInputB.7 = 4d9c28cd694e016fafbde3cb3085b8d9
+Output.7 = cd693aab02ec80a04bebcfef6604384f48c8eb7d44d691ac35fb11e18183884b9e35d58e62fc567b9a3da40e3aeea783115e8019220903ab559be9834c377758
+Entropy.8 = 0b8c5208d9113cbe8a31cf3de143381a
+Nonce.8 = 449ebf57b82aa5cb
+PersonalisationString.8 = 7f6001d60c31cf8a904cb318cb70047b
+AdditionalInputA.8 = 4fe045edbb98160a42635b77796e8a97
+AdditionalInputB.8 = d8964e5fa816ea83d1a5abbd1568adaa
+Output.8 = ab1fbaf154a9072b62c3d6bb9d0148ace4b4cde08d9a712aa29410ab514d03e35db3f491806673041833a2ebebe87055f1f5fb64dd8e408e3b9957d21e66caa2
+Entropy.9 = ae906d89041545c7ef7071f53eceea52
+Nonce.9 = 1f4b284c36aae3ba
+PersonalisationString.9 = b91998c32183006f7df1c5d71fbac57b
+AdditionalInputA.9 = 86475ca2b484b8c6f33b11228bc66505
+AdditionalInputB.9 = 0c34e0eae8fa94c26cb511c79a49833e
+Output.9 = 89ebf1815e2c333259d6aaa007d19ca5e01e598776ac2af55abf78c11b4ed744b6de875a36f452c27ac4a0e677938b161b2c00eb0659bdf2dc425a89a24affd0
+Entropy.10 = 1d0e60e6801740421d29f65a60606c1b
+Nonce.10 = 370336db0835e91a
+PersonalisationString.10 = 7a273b4d99753511fcf34f3b1bb29e16
+AdditionalInputA.10 = d644cb46e01c0712ef9da4ede5ca407c
+AdditionalInputB.10 = 5c990545eeaf59de4d349ae6661f7041
+Output.10 = dad503e7209602a86f18d01a2b0515b4b3d4a4c037af7186ecba25dcb781d97311810f98c17c34173061ab78eccbd49185cf5d4fb91dfff4b0b653dc15899229
+Entropy.11 = 675885383c6b3b008e884937eda77be8
+Nonce.11 = b91c7c06878532f2
+PersonalisationString.11 = 12ce97b40a1bcde50390e315cd911d53
+AdditionalInputA.11 = 1058434cf9b38fd72a140cf0942436e3
+AdditionalInputB.11 = 598bf8014339820966d94be1e2e9c855
+Output.11 = 45488ca0e2f283f1741bcbf49a79365459075249e1c41777f3e008d8020ee1f598aca0ad26edcd920c8559d0eaf7cc5d5a714437c04581a64c7499e5f0be089c
+Entropy.12 = 712393a9f4a1b0bbabf4f496e8170adc
+Nonce.12 = 0f590c3239c6cf47
+PersonalisationString.12 = b72b4097a9fb3d45bb062415b6f2dfb1
+AdditionalInputA.12 = e27ade7c118656553f06ec20199b5370
+AdditionalInputB.12 = 4eb4fda3ffdad4f9ddafd0d0bfecd444
+Output.12 = 0449a82a317e22e5a7a6684d08b8f63e02d8b9085d619ab56cde522c8667d5f88b2ea8830329491a5ea828e0a366ae7e84f2cdee698a9241188883be00c533e8
+Entropy.13 = 576640f976a628b09e98af483b645e56
+Nonce.13 = 822e8a10df06d0fe
+PersonalisationString.13 = 6d6a6f68bb381c291f3fa621d6ab64b2
+AdditionalInputA.13 = b05f14e41f54338c4415a5b5c8c56199
+AdditionalInputB.13 = c6847c9ed74c869ac4a56ff2d0956d6b
+Output.13 = 5c6a7e58eacfa58dca9399a3f9b6cb41d2bc24f672587db229bf2220c2851347d47da1ca0a6a13779605db90d91a61488818d33b2a4ad6740900685f8ec6136f
+Entropy.14 = 696503c84860518784dd4c6c31710f43
+Nonce.14 = ee52c0a4cd90df1e
+PersonalisationString.14 = 9a08d6b480ef3ac200a130878d80d079
+AdditionalInputA.14 = 5c5131597bd3ab025ca00579c86ffded
+AdditionalInputB.14 = a8cc33c851ee11e4701a32197b617623
+Output.14 = 9afdc454f5c2ce2995fc7ccfb4e8671a4b27dfcb1c02fec607aafc6422657096ce1814101b8a743e2d4a2c4e2e8da257578de7105412f352a4cd14af7db0eb03
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6bdf5332bdce4655d45c2cfea897b000
+Nonce.0 = e78c5571c5f926f9
+Output.0 = e0715688765a3285e7b7db555f277924e7171f7541bf26122b13dbaaa39f9e2b0345c659583ff8c9cfd888f1abd2f3b36a7c9d47c687b01c819a9f9888542e0f
+Entropy.1 = a4737d48a89325078579e649e2fa65eb
+Nonce.1 = 6a799a7a2f13e813
+Output.1 = 752a916d980518d9e7e47599066b45714661f34159f0c8cea8dabd596a066aff7ae6c21e69a356dd2ee0da55429c675aa6fa0900173f5477cd7fd649eae0c99a
+Entropy.2 = 99b4e9e5baaa99bf8b8a0c2cfd9a89ce
+Nonce.2 = f48b312941d3554d
+Output.2 = 85cf148c65ece7525dea96344da6451199492185c8b8dfff500ddd68caab50bd741866937a501af876ae849b5b1b5330de65ebf38e9d559693fae805ccc9aaed
+Entropy.3 = 7c1ef846e7f3a7cfe5c7bb47e46aa0e8
+Nonce.3 = 78eb002955d270d3
+Output.3 = b739f95339e83fe8a339162f1e96cc82b67af41759f483064e61a039137af07d934a0eb7ca7284c14686ca0488953ee440f6cd1145d0766f4ff1c77b0d81d361
+Entropy.4 = 6f750fb73fbcb6db57506cf2defaf6d4
+Nonce.4 = a52c9297e02f4255
+Output.4 = 0ca748fcb3ba23bd043f48507585425234ec4a0f350efdcc87f9062c8ae0cf1e033b7df8357f5b0e4f7c21d4fbdcf89ce0199c25790270fe67ffeec26cfc4d18
+Entropy.5 = 44b6c39a3af6a473148e32d9792b9eee
+Nonce.5 = de44dd36003e4822
+Output.5 = 101220087ca770e4574fd05b2e88851b4809cf21e65eb0e3d1ecda29aacf2d93e75d793b9924aedd9b9a38844db430470d015da60418753f2e3c6a15f558f4a9
+Entropy.6 = e4d1ff1c3cd27849a297e5a98ede086a
+Nonce.6 = f89d58b0617e5d10
+Output.6 = 54c46797a38e11c543477809d9d6ed0ae4020285edf99e7ec945cfcf21ddaa6d9a71856bdbd6613bf8e97e0af8d3c4cedd0dfcfb4742a2ef0a443ef878960e6f
+Entropy.7 = 1514be706e4c1672905506b0c55347f2
+Nonce.7 = ad8d889f2b91a6dd
+Output.7 = b3644a6d16340ef8b28ad06f4cbfd5e799f080d4b2f831fd90b313c862d5763d22b1217fe3d4f07c006a39895d46d52470b3f8b77521e141f68b06b54c38666f
+Entropy.8 = 8335a433a80d5a3e8ab1f73855f97a9b
+Nonce.8 = 0262b47c2ab5fcba
+Output.8 = 66a03a0b3b2ef8d04e01da6e31bc9002ebaca98d63fddeb07fa3e0650a32e142fcab9963f06ba88cd58be75a99dfa13b4f8feae6f84ce2de4d201992231ff3b8
+Entropy.9 = 37faeb0b3f85372ccb4422e36690e96c
+Nonce.9 = da165c92d5faaa3a
+Output.9 = 4775159025d5b882f37c7edb8d89b38acb14a02839802c377ac482f8c6b59ad69c7d67556bc41cc322d9cd75032af52715b3602f24c2b099840eab00b74293ad
+Entropy.10 = b6830f64e47388a9c3c64aa0be708451
+Nonce.10 = 5cd43034c989da56
+Output.10 = e12f1e9fd90e4f166a13a4d35f9091a974443291ffae4402cbcd9a24893b77096b0a00db20e43288626139f7c1767f6e7ffee9022dde41b478485ee9125f3eb8
+Entropy.11 = f71a01ef00b3d6134607dfc57325f687
+Nonce.11 = 49760aebbc8961fe
+Output.11 = 0f008e60ab4814ccd8d2897753f58ca358bacd3f2efc22c0ec89a65b0a9182f555cc497aa59af914bc9c65be7c092146cb78fce240fc8fe136729ea77716447f
+Entropy.12 = 790ef8f0ee6df480b2d44dac1c37614c
+Nonce.12 = d552444d7dc35e5c
+Output.12 = 2af8e30977556fae7c18ae12ba2201b40de8c02166ed94c141272050dbea72f3b8f991547fc0f55836171267d42a53dcfb37c15a227676bf218a49d0b723689c
+Entropy.13 = be196c9ce383c8b101cd27a112919fbc
+Nonce.13 = 332ebe3d473a3a35
+Output.13 = 016b05d557777b36a192040c580a5c516dda1155934afbd96cc85b6e8b0083bbda273ea6db52a0589d9de2e5568ffef9db3950093c4db2e8ce9c2513084693e4
+Entropy.14 = 7639616ee5cb269b5f540de150b4650e
+Nonce.14 = 3c933abed307f6e2
+Output.14 = 0633c9af4d40f3c21ad4e078a0c84ee03ad7ad410a0f7cf3dfdff5920dcd3987fceced11a2b38b15535e44b55377a8f20f4fe05187f976a276e64b813e55a8b9
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8b80936e69c67edb771c28f9b9452124
+Nonce.0 = 7ee2614ead3c128e
+AdditionalInputA.0 = fc35cba97a1e211bc420e8af53f8e13c
+AdditionalInputB.0 = fba438aaa75a3cd4cd0cce399bfec74a
+Output.0 = 6721cc1ada5ebc1713f74c759000765652eeb5f3f9c24fb9341b36a369cec1d27ea80d6b73b56047af07138c5a43c99a87753115c471b8587ea65fa2065e3ce0
+Entropy.1 = 89ce6c76bc41aa32a9c8e3e37d6202ef
+Nonce.1 = a347f6cb64ed19dd
+AdditionalInputA.1 = c503b122957dcec8d9eb9cc994b8d122
+AdditionalInputB.1 = 3bb2f1197a99588df357c0d1986ac6ed
+Output.1 = f0f425b19eb75aea6899fab7612c98a0b5c5c5a3c86107a8c201623f759931909afd63419d1cceb86bd4f16e948aef08476170757bcaf79884f9c36bc77e9ff9
+Entropy.2 = bc51678d1f3128657b38849ae9c4bb1e
+Nonce.2 = dd29d9d83fdb5e09
+AdditionalInputA.2 = d4cd00675cfe227de0cbab6511352289
+AdditionalInputB.2 = 55bb936280ae46b26d66b2f3feb268d8
+Output.2 = e58138b6b0232e4d6d9ea8b65bd76965cdbc584cca2e83d4ead936bfb9c79d77dec9424f2cf895011ef1033c619e28d1dba5dd3ced04429c1bd3c03e5d13e2b8
+Entropy.3 = 065a5d4fdb34b08fd8efc81f996269ab
+Nonce.3 = d5a6747c7f8eef46
+AdditionalInputA.3 = 72ebd351edc000d8363258a69f2b98cc
+AdditionalInputB.3 = e5c861213296ea2ad5098f9b4c50647d
+Output.3 = a8ea470f17bee5021d49c84b721e0b67470d3bc4f98fac68c67442979d4fbccbbcd0477c1e7493126cbe169b84446f5fcf666786775d19f35c6152529a41de6d
+Entropy.4 = 1248ed4bf606cc658b641b7958597f5a
+Nonce.4 = 16c88dea4e753d50
+AdditionalInputA.4 = fc67e763413202e04c55697eb7548c56
+AdditionalInputB.4 = 21e0e38665ecf60fa9730bdf7e22cc7f
+Output.4 = 63d9b50dd69ea9dac75f48ae012fcec27c2e1dcfc2ac2e59244af4a6ce9a73c4d8bde6570d85ee15b08a48ef473d12db871f6df1d81441613dcc1efb2018f0c3
+Entropy.5 = 6fa629d03cb4eb534efa03334d3b1d02
+Nonce.5 = d952153e79df538f
+AdditionalInputA.5 = 2e5c554578a069f5e4959dcb351a294d
+AdditionalInputB.5 = 2d26aeaad9cbf253add8684d29b1a633
+Output.5 = f58246313284990298864a89bfe7be1970c033dc1664ad7f5cd9b812f5b7e90f69a49cdfbee0e279f7df1a8ed79eca6e680d740c0f2ae12f87798acc6d73d42f
+Entropy.6 = c58eeb2e57f295d7af1a3767935b85eb
+Nonce.6 = 98612b6ca02f60e4
+AdditionalInputA.6 = 10e89c271e2b283d69b04abf6c54b1e1
+AdditionalInputB.6 = 207950c28b26ec16c4f28121607f4a5a
+Output.6 = 28eff603ff0dc839f88f844733b275bc6fda6d4546ee26034f51f84ce430b073c3da8abfe82b5313ba2e0f60045b8096b9cf31424863e06f72eff1baa4b25270
+Entropy.7 = 8a345b5a5eb7d7aa700bff266125ede1
+Nonce.7 = 00b29637278da457
+AdditionalInputA.7 = 44534b92af038171b67b70f4e1d5e7f5
+AdditionalInputB.7 = 53147660c0fde5f9893474f03884ab14
+Output.7 = a6a7a56fc32c3d3c3306dd65109ff8d68031193bbf5b38380e3825db7bef7294051416263795f334d1f87054e97dbb52dd244d527a6ffce086d1ad177ba8fb81
+Entropy.8 = fe504e06895d340890509f398fe70832
+Nonce.8 = 3b3d94b6948f7401
+AdditionalInputA.8 = 642003181f791cb5bacef723c96ce262
+AdditionalInputB.8 = 345e8d29d5efddc8ab37838b1891bcd0
+Output.8 = 45304099145b8e3da800a92e0f5915c8981fb7706a1df0a6c0b2ad5435da19ced3acdfd5832795013afa5ff21ff3326ada7d577817f6b94eb35f33623db47176
+Entropy.9 = e0227de14d5bc6ade2a014ee430151b4
+Nonce.9 = 1537f85616758753
+AdditionalInputA.9 = 87eefef0e0cfd90dd26d483379787c7f
+AdditionalInputB.9 = 74d2fff6f29f892e66a9f80b2a5d9d20
+Output.9 = dde086cec0add31fb9553d56cc2c6b7c022d8c87ff5499fa78a68eeb051cdbf899673b4ed76fe867b79ecf6fc1d7c6f8f597013139d528d348ca3bee9605dd80
+Entropy.10 = 44b7282f951c591a7a3d9ff6960f20b9
+Nonce.10 = b77ebe26990cbe8c
+AdditionalInputA.10 = 9000587bb18d201ecfd56f30dba483d2
+AdditionalInputB.10 = 245523060b0af3e575b1480aa6d8a33b
+Output.10 = 9f25674ac085a7a487e7d72084d5d3c0fbd7d41870f0f766d613015996052ebfc6f62e4cf389af85cf125d9d99c649d4e8755079a6817a9e81445d1b994d2961
+Entropy.11 = 745ca16ebc9e1a58da810278885dff33
+Nonce.11 = 7e11f949862cbcc9
+AdditionalInputA.11 = 4b898ebdd32142627815be1035435696
+AdditionalInputB.11 = 330b0ce287842d3d719a0ce415363b77
+Output.11 = 9c6dd763888065541b1a380cf4f459839fb4f1ef4f7817286be45033957f79d1429cfefed1abd6228b26747e69ec9b1a027b3a0b9a28487e954dda06b7eeb454
+Entropy.12 = 1e546feebaf0feba3a07c635e6235bfb
+Nonce.12 = 1788d9eea444ad7b
+AdditionalInputA.12 = 5199d4aa5930220c27342e1c0b99464f
+AdditionalInputB.12 = 16dd520f009329ed7be14d25e5c79112
+Output.12 = 34fa78306c9efb912ee78fb98a03546d16c1cc9bc3b67a04f2a8e6fb262414bcf3cc51d3cf3a1a304809f186bd74f209b24286f7717667cc5660d3ec732fb0d3
+Entropy.13 = de1fcaee6329e9ac06a6dc18a18d147d
+Nonce.13 = e10ea548cc3773ab
+AdditionalInputA.13 = 5cddd4fd07b6ac3e96b13339a75f56f9
+AdditionalInputB.13 = 454714bebf9603e1cfef7b8038374899
+Output.13 = 5e3483125835243048a510184f086487e9b02fc0ca60fb46416fb0ccc13e45081da59691e32678fcb6aabef585fb492b194e06171a8d17af8556a36bf4931ff5
+Entropy.14 = 8b529507bc2e8f711934adc88c6530a3
+Nonce.14 = 7215956b7c574e71
+AdditionalInputA.14 = 1adb1ef63347b21e33518b962f6db898
+AdditionalInputB.14 = d5c69f42f36ea2249842b6fc26ac54fe
+Output.14 = c374bdd62cb1e42e648403843b8c06c0b305f945685f72d1bc2e428c19df452018ddea81ebe5b15fad3be4eb17fa2d2cf57836dd080970f716c0b22f7263414a
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f41f466b3219be21597763fa7b76fb40
+Nonce.0 = cd93feb9962e81ac
+PersonalisationString.0 = b58f869ad0aa9808f6646137431d430c
+Output.0 = 2fb6d7eca392674fc722a619202e819d0da9d11bc67db10be4c13cb964e30ada96dccf0c922b710ac00ded5457fa971bb1c661a09afa720a5864344bf77a36ae
+Entropy.1 = 9d1b8834832ffa13832eb086047bf3b1
+Nonce.1 = d0f15efe86477f75
+PersonalisationString.1 = 73c93734f6ea39ae04e6a4b49766b820
+Output.1 = 9fb67d35378940a5d76b963ace4f8158e93fe0ca064f9656d46df1c10d025f48b33569da07c77ec512236d08d26997d6b9bb6915df639ea89da957e66fc29003
+Entropy.2 = 2989862a79e255195a24828fd300eb34
+Nonce.2 = 30ffdacb3ac7b27b
+PersonalisationString.2 = 719b899c9e4a5db9e71dfda48fa658cd
+Output.2 = b4f20060ea3001efdbd5cc89838e0a08c09f7a6fe5bc023c33d115fedd6ae151307422f997d32b3ceab87995862368c4c3af7ac4815874c0084ea1dcec5058ba
+Entropy.3 = 7482b2b02a7446de589d7e60cf012969
+Nonce.3 = 1c4bda6a57f41ffb
+PersonalisationString.3 = 529e4e80f501e73ec86eaa259628a197
+Output.3 = 7498f9172af7f5f26d847797768e459170dd9ec7f42a1fe979a2e4fa32a5e124c5cb1ad4c394a2c2099e8f942efbe59af0975b56a9afa774331612ad887b3f55
+Entropy.4 = 0a8405991aeb64f3a82d8bef2b6c9422
+Nonce.4 = a7a58da9b216f7fb
+PersonalisationString.4 = 68df62fc01d3dbb018c163be3429f2aa
+Output.4 = 7a9ba1e825133ff4c1d646ce5577f35a1784eec2c1977090b48e30bd3b7506f447ee62d021cae12ad287b417eddb9ec6460e3e284afa73b739564e4073d00e3c
+Entropy.5 = c7e9f68833b18e036aa1da025a359ed7
+Nonce.5 = 99f0e49ce811ee7e
+PersonalisationString.5 = 8de7c86b8ec61d6abb52a7916671adb9
+Output.5 = 1407b68151fcb0f08ebabc21c6c181ac1dbf9c6fb1b2c16eaf1f8c490d6f7d52d0f421116a5998330d8105f5027617dc94b14c083f49d11c34f4f26302316624
+Entropy.6 = d67eeb00a4291a18471184b43159d2bd
+Nonce.6 = e4a361497ee1438a
+PersonalisationString.6 = f054adf2ad3849da7272b3b32ae0fcab
+Output.6 = 5245c30a651d9861b636c8e8cc8b845246da10c104d78134a84e41fea80e0e73692f8481cd4d750c79e3876b9abfa9d614d868249605619defef2968fd33141e
+Entropy.7 = ce08f02bcde47f6030820243e1013887
+Nonce.7 = d1b15130cd038d6d
+PersonalisationString.7 = ad0bcb8201160d82f17966d4c7b6a4ec
+Output.7 = f48ed03bdba9310d7fe0a5dddf9df49c0dbe07b95bde25a0b66ed01a9f7a07820f2d7eaa986370a0ce00013b4331e44beb3010575af7d625bed55a592d973828
+Entropy.8 = 8dbcdaa78addb285dfdb5e41eef67e6f
+Nonce.8 = 49062c098b64e7f8
+PersonalisationString.8 = 7dc14e7396f62450bebdf2ebf017aad5
+Output.8 = 49d03fe3b72d44a8a1e469d25a145ba64d6169dd947f8793d5ef43de7b2394137083e6e769bbfde9600c36b032b7786522070b5a65c793926892b9fb0d1c1d54
+Entropy.9 = 0d98370cffa0a879fe85b5de4e69cf7d
+Nonce.9 = 9350a86b7a1bc68a
+PersonalisationString.9 = 0161b24d1c3ca590117ec29acc39446f
+Output.9 = 7cd64684289b43b1e593d94ae979f7fa5de89577f37c7aea0b584d18602c251b1ec25ff612d97fda3784e9655973e31fd4b5d1eadec66861ae2e9719ad344730
+Entropy.10 = d9b6fb62da0a023235e7cd7816377cf5
+Nonce.10 = 1ca8c5fa5b9f8c90
+PersonalisationString.10 = 17be4885b5f9641bf5f689bc97978858
+Output.10 = e11e3ca6c832f46ff1f971c07e7b66c7d5b1b2e6ec8c5ffc77103f0ad308800bb989b9ab7010683378a3f7819a297a3765256ac40fb0a9cb2246aeb85d73601b
+Entropy.11 = a7113944fc4d4b15a94967c8f5652a36
+Nonce.11 = a506b79afe6af822
+PersonalisationString.11 = 918fe4f365259c18eb6850fbee403f5e
+Output.11 = 6076b2c0f7de1dd3e46adb1161b72a7f83b8773fab0dcb1c1fde25db0d09862acdd38f8d2164903a8e8858f8a9b61bd7dae3f60668e6ee264b9ffaf578b55646
+Entropy.12 = acf7623839b94bd7a893c287616cdb6a
+Nonce.12 = a1f6039f91c17623
+PersonalisationString.12 = 5f9c69de2c32873f679d1768ef3c70fb
+Output.12 = f6abbffd7965649436b48b092086cdf0502f52c87c8fdc8f6d49f08433a202d8be44f6562ace580e8075f0bc670b2e9d951f15f84d82afe6b832765ecab037ee
+Entropy.13 = d90d786e9d1962843b027aa0e8598fd4
+Nonce.13 = 0417f14f96f2029c
+PersonalisationString.13 = ec5c55145a4f9552f251f7dfb017c1d4
+Output.13 = fe2ca44455a5e7de708a710ab646cfcfbc87d678b3e941063fa701dac7cb4f0953af8fce458cee549f537fa771b89b0494c0bb5cfd35bf67f4b270d6205f4703
+Entropy.14 = 1cdb744559a82c62fb3b15a2a3aad189
+Nonce.14 = 43432ce30ae7f96b
+PersonalisationString.14 = f59ad9939fcd6c0f478cc50839f8ffce
+Output.14 = 91b9ebeb929dc699949122970b2177d5d5b705042d3a0d60d7d3bb218b7a69e1cd6864b8a268ca78c834232d0cb88f937730084b1ec7d2867fbc850e04050324
+
+RAND = CTR-DRBG
+Cipher = AES-128-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 71ba029a7a92391b3f294f2fbf5727ab
+Nonce.0 = f0e912788f9827ff
+PersonalisationString.0 = 23f36980da4016642c810da2990aa25e
+AdditionalInputA.0 = 59ab41b24ee8e271e253c6cc40487cb5
+AdditionalInputB.0 = 9164f02860773e3b96d85b3738385066
+Output.0 = de1b8a2595892354da47b4eaaf9ddcec64a9610117b05e40d07660a80bcf825eefdbd28e07d59681f9e0037bdb725fe6ce846d824b3b34c2c21a48f8895f9f5e
+Entropy.1 = 677394f03eacb5a137515fcd3ea2bbc7
+Nonce.1 = 9a5c1cea26efbf76
+PersonalisationString.1 = dd73b18eee6294349aa6456daa77d24f
+AdditionalInputA.1 = eb7019826db32717a5735eb40773ea56
+AdditionalInputB.1 = b62de2b4aa8d97f526ddba4409f5aa26
+Output.1 = 2222a6bb0ffe14d2f789e64dcdf47851a6c3a6e1d0837d8b511aa2f56a6d08534c97f4b12a77447db20409d327fc088162c0f2c59fe47e8c92ae5dcdd738c768
+Entropy.2 = 3f51f6ccf22479ed891b891fc4c6b551
+Nonce.2 = 19e0754f7bfa0cef
+PersonalisationString.2 = 402a1dab450ea9049738782a93347aff
+AdditionalInputA.2 = 52c90f571c8c63f0dcdbd4e6c9653478
+AdditionalInputB.2 = 8be63b5ef212694edbc2c8dec9a0587b
+Output.2 = 1abfe2d72193b6e3d9be85107ece8fea5d229568568c93eb5eaed463bf2b79cfdbd047402ff4e42234c4e3e150c1f0e82400f6a59eebd092ee73adf1ffca6494
+Entropy.3 = 5a01b638311a296bfe1f6e180f243d5b
+Nonce.3 = 16bb4e36fd04b05b
+PersonalisationString.3 = d5440a6fa4d345cb84d56decaa3dbd18
+AdditionalInputA.3 = bd3e11dbb9f40a1351c8bf7bd894ad20
+AdditionalInputB.3 = e04a83a5187515104aa1e7f434ff4336
+Output.3 = 2728fcc1fea7fe635ddfed8bb3f7ca29e1cbd8516a2b5eabb7d091e6e7f2046a8077ef6d1a90165f189d07a897cdfc06882adb781be589e0e5eb2dc97be6546b
+Entropy.4 = 97e415b3ca110a809ea600a13e47aa04
+Nonce.4 = 126e16dc5722a449
+PersonalisationString.4 = a9be38e3011986b904717193ec4a7d4c
+AdditionalInputA.4 = 1968699221eb8b5ed023a5d2d2d81256
+AdditionalInputB.4 = 4b5e1bde38b2a9793b166d86816ed231
+Output.4 = 4be98989df2fe6687e5088e50698507d91061a8d6eb95d6627d2b857253f053c99ee7984a498de4df3124442856f18e98e6641f152cd129bd04e99710930c3e1
+Entropy.5 = b6c4cd96f7fde83eb571229b537acf5a
+Nonce.5 = 4c4e0aacb5c528e7
+PersonalisationString.5 = 5ce1094d0d307b41db9bf26da41db100
+AdditionalInputA.5 = 98047ee987637e4584fe7fe2869c845d
+AdditionalInputB.5 = 177e3c29d4faf043077fbefe0b994b91
+Output.5 = 5eaf013fd3775a2d3e97166d23153a00f18644963e69cb962a7bd2c30af9bd6a29d4bc70930a929b9252d808db410c664123bd69c1d0c1d4ba3c7d8ff7ae00f0
+Entropy.6 = 2d1b8061d7d583f83be553c4837212a0
+Nonce.6 = 62a1fa745362bace
+PersonalisationString.6 = 4d976add18d5e2484f67f7c84cc68b52
+AdditionalInputA.6 = 5764de5db97e223c044a833fa42cf629
+AdditionalInputB.6 = deef8d581f6e4f808992fd20c06e102d
+Output.6 = acb78f273350d459c79809d89b402825bb00e38abd5ec12feadcdef6114684b6fcb0e176cbe465910fc2848f0a708844794c5eeafeada7563c38c3ee63c97ef9
+Entropy.7 = ef30fd995ff0ef44cce6077bb22de699
+Nonce.7 = 85c7d6054a577622
+PersonalisationString.7 = 5d59b3f0250060e22002adf706486d85
+AdditionalInputA.7 = 794681f75df9c988303f751fb7e7fba9
+AdditionalInputB.7 = 7b1374c8472537fa3111eb44e52afa23
+Output.7 = b04950f1a35752c067bce8357635f470d10b3bae47466fd1166f9ffaefbd324b2653c7f30ee4848673d7041865d9954512589492989a00ea4da1dd289e8717c3
+Entropy.8 = ee4bde4f712dc9fc1f2c01f1c6086f35
+Nonce.8 = f6837cfe53ec4874
+PersonalisationString.8 = fdb8f64d99bd717eee3d89353b73c9c1
+AdditionalInputA.8 = 09e5ba3b23895c5dff89382d5e91700d
+AdditionalInputB.8 = eb1a98de8962bbc4cb75cf0bf0f8dfa4
+Output.8 = aacdee0f3d1f955f896d5a5a2530fd809a202c921d90a9cf593e03934e07c392cc5554f59921b40cc003fc2682caef9e6e61ee4abf45148e5ff3ff65871b0d81
+Entropy.9 = a6aa945ebe192998be8e247db99ce7d0
+Nonce.9 = 7dff26e97a0a8dba
+PersonalisationString.9 = 4b6ccfac6c47fd6564bcfd94fe9eb28d
+AdditionalInputA.9 = 07837053d24cd0f4f4327e97d29d6795
+AdditionalInputB.9 = 3b172ddc8d383b98d408394c0ba152c1
+Output.9 = d90aa422a8d2b86e1f09de29dd16d4605098a45aeabe69c6bc8ae0c8f01b7cc73f8850ec0c47d616cb6ccab77f22079938ed11b48fcf3cf46a3f642f05aeb8b7
+Entropy.10 = 7eb50f532b0076528e2d1f266b381406
+Nonce.10 = 2a5e92e8fbf0e9ee
+PersonalisationString.10 = 7ecbfd2298872a7934e4ed61a9f004cd
+AdditionalInputA.10 = 179fa5d2eb90d41548192cc74498bd42
+AdditionalInputB.10 = 92dc9d60d2e36d4bfb9790783d1c5819
+Output.10 = 9a171b5048baf1375c1407a8dc1c8eda532df552967706884e5fe3d46786077448f28f89b38eb764df7e0e3b401aed3a2306fa2bede382aae108e16ab485691e
+Entropy.11 = 7d3340a8b1e15171ee3403cc19d3fea9
+Nonce.11 = fde697acc7e72b75
+PersonalisationString.11 = a128797179c5cad6a9b476ff99f9828f
+AdditionalInputA.11 = 2dfa3085fa023b5361dba79d407738bc
+AdditionalInputB.11 = aef53af3be8941e7d2713c712841dc68
+Output.11 = c1f725b290ed1310dd3f39e99c7a65b801b4742f5066b3c71bb46f3de74dd2caaea40821174f676722db38feda5d1096c79ad1eabeff78def0847a2423bb4602
+Entropy.12 = 0571d41f98b71ead415fcb97fd05a1f1
+Nonce.12 = 4216182c094c4b14
+PersonalisationString.12 = 6bed5cc72660f7fd4c32abe5cb1aefed
+AdditionalInputA.12 = b198973f689c37eb6376a088a7c73e97
+AdditionalInputB.12 = dff3a3b0724302f83b854f2fa8ec3496
+Output.12 = 667ddb87079b3949030f41ff91b2ec0a598ab2d55c99d017e4fc79e94f15b410cc2970ff017482b29eef2c250a09128a18605e0fa14acce37b89c438c8213194
+Entropy.13 = 8ee3edc1c64ea7d6f0bab9731e5d1762
+Nonce.13 = 92a14226087afafb
+PersonalisationString.13 = 2a2404bef6f7113417df0b1854d8473d
+AdditionalInputA.13 = a278e8a50bccd612974d026edef7501c
+AdditionalInputB.13 = e748f5e2f98b488e74b0bbd559b5babc
+Output.13 = 81ecf8b7b07c64ced1a49b213354995a7bf168d38a830b1570414f5a2015499e09aff3bf583719886fe99d00e6d9eb9a4fde29d8d9788dd6ffe209839a739cd2
+Entropy.14 = 0618c2884914712226ad4e9580c09523
+Nonce.14 = 6ebc4d5db4767f5f
+PersonalisationString.14 = 7a8250a3bcbd8154c5058b551cf22036
+AdditionalInputA.14 = 30260532b56c0f8ede9b725c32208f31
+AdditionalInputB.14 = 1e90dc4f67c1cb2da12d10a0b0fbb626
+Output.14 = 4993575880d00145c1f967db25ccc8f34cf0c62acccbcfa0e72c89eacf9fbe56145074e4d47f2b7674f4b0e07ee3b5104bf7ccfed8001d6711c66fda9444fb8a
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = c35c2fa2a89d52a11fa32aa96c95b8f1c9a8f9cb245a8b40
+Nonce.0 = f3a6e5a7fbd9d3c68e277ba9ac9bbb00
+Output.0 = 8c2e72abfd9bb8284db79e17a43a3146cd7694e35249fc3383914a7117f41368e6d4f148ff49bf29076b5015c59f457945662e3d3503843f4aa5a3df9a9df10d
+Entropy.1 = c15f9fc5741f2cace0b58d7249bd0377bd5708e365884b59
+Nonce.1 = c3343e3a11b2dc15261c51751f513b60
+Output.1 = 5c6ced8050bc5ade3f9acacf23899f98f5e045a768ba538fc371747462eb9b84828c9ce88e4199052359b15833668944d618767d0c6cfc2411f82e0412067af6
+Entropy.2 = 34dbd5cfe79caca4258cd1ae24b5afe2d37cb4695d655a7b
+Nonce.2 = 55c28fb44e5849b57a77873513c65705
+Output.2 = 9d471d2cb8e42002ce24e0c6be84c89937595e61faf0371cb7e8285d76be6b34ef1db5f7d2ebad4bf8ff77651389efcf13bae72bd8a13c8e9fc61855581b8ea9
+Entropy.3 = 643e95bfeacafc7d721b48b9f15a80ce8ad7077f301f16c5
+Nonce.3 = 2d908dd6952f862ada902bc1a14a6129
+Output.3 = d6ee5e3796349d47c2ede32c938f2c06ef8a6511b4e9bbbe74eb71bc3c4770d90c70cdcdff6b3c9fbf4fa6bc380ac2f2e16196b4c4c8a6448f040d11d36b4214
+Entropy.4 = 0f477a591490a0accf829c673f1506daca70df96582c3d3a
+Nonce.4 = 1a8dd4233bede3f2838634c09544ab6e
+Output.4 = 43167573867d53ca92e29686d9fd993c69805a6311e33eb96330c537dcbdeab11b0ba15ee5b2287f2485e2e3a6e0ed62d2eb8108c1fc73908dfd4bc7b71b166f
+Entropy.5 = 00a6ed778311528109e6fb5cbd60d1a76c4bd5d00dd103a4
+Nonce.5 = 4089f2f0b74c184ac9afc95647cde84b
+Output.5 = b908d93ab2fdeb1a547b6d15eb950eddce25956d8f5ee9a4b1d508c08277dd7a1a1060fcecaf93eb7a472a363e97d7e63cdec7f94a5dc26db7b2b7f12cd8f3ee
+Entropy.6 = 5f34552a455a029b4bacf1b80cb1cfb412565fb7734f7e0a
+Nonce.6 = bd55aef06db6f20df271cf60594c22ac
+Output.6 = d4b100ef27d79a5d10031db0ccc72ba89c6819776c19f02f9afe4a4405c584a06621f1bb5ba29af5ea696383a67a9ec652bee75928113db28f39404ff0ba3738
+Entropy.7 = 6d7cb232a3203ca6955c1f1eddd6b8e09d820bf6c05ffb6e
+Nonce.7 = c04f1627ed1d7b310aa47ecc7983836a
+Output.7 = 63d6963eff3d50fc0c21aba61d6365742c4bcea7bf76c95d645e88cb139253d563503ec3999ee772c897c9d3663f645ab3041dcf3d9ee8f4c92e895b7644414d
+Entropy.8 = 48bfcef7dbe68d5e09df38e97f8977e2a15014bf751f9e27
+Nonce.8 = eea03c6d77802aa2c5d5e1293631e39b
+Output.8 = ecdd8e7c7881946982ff3a11a43bd020e970a3b8901387a1cd3eb63df3fb510660bc82a5e029beee26b4cc5d891fafcf5e42b6f4dc414916fcd8b05ed3f4a685
+Entropy.9 = 5be961754fe9e9720635875feb2f37c74fb9620e47b88141
+Nonce.9 = 23d35aaceefb412a6fbd187f5787bc53
+Output.9 = 8a8e0e443b8e944d58c8407392296a2c7fc4eb04fcb72cc7ea99513559c0917661db2eda209fbbed400089e3fc48ff6990d97c041bb5752792d130a15257ca44
+Entropy.10 = 2a2535a5afc9b1717542928a3d35e95a7f63b877a8388a09
+Nonce.10 = ab217b029a33f0563530d37f4fbff10b
+Output.10 = 31a210655529fb46eb4e799710c63192e3656cb1ea240408527df7fef82b305c5fa98a1d824f7830d84a53643cfb52517663d516115d45272f5972240fe84827
+Entropy.11 = ffd8b150b287b3ed9d0128dcc8cc5deb90bda98aca791483
+Nonce.11 = bc7b6a7fb0592fda4abc43eeee42b1f6
+Output.11 = 3fdb4ff83c362b76a83b00a8905f2c058bafe8ebdff8eb2e5f53cb9ca5c82e3217c2c60326b0bba6c91c440a4852c72cd73345c5e0d4cc2e158401045a77e0f9
+Entropy.12 = cb33fc14f2b69401b78bbd781cbfe6585f1e736459000c26
+Nonce.12 = 5a914f81d65b197a5d8924fa88fa9ba3
+Output.12 = 6c632091886e24265d123b5c7fca063d70dfea32c7780afaab895c10b51262bc4d363d2165998367c9a8a516476bc763990241baf92d6b87e4de622d4019db6c
+Entropy.13 = c457e7d1c69b1a5300b475ef80441c40800cd3764e414ce1
+Nonce.13 = 3933e498a0f20d3fcf05a3b82b67ac6d
+Output.13 = 2689419fa0f9b3a4c5e96a71f676ef7f76767b51b3cd5ce837e9d8286fa837a5a3456695e3e9ca9396e8d5b9478a1e8cdd5c31fbaa5e0743d277fdf4afc7959a
+Entropy.14 = 49bc4aa4caba364242df5184909ce588f24a2de340e33082
+Nonce.14 = 5101f00ac1899c9ba45e923e07166407
+Output.14 = 9b71e0a09c393eb0f034a12d3ad1320ac1ca422a82967cc54d14ed0e36429ab2a0e8c67a5c7f60e537e410eb5ff075b7c67ac4805200a5ab2fb629b48460cce4
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 89d32f3de167debedfc143e4da789a5f83312a9d420c29d4
+Nonce.0 = 9ae3bab2d965dbe996a6c4c0de280501
+AdditionalInputA.0 = d5165fbf8850e2ecfb4687af79dc62361e7557707051a13680471ee129f284f9
+AdditionalInputB.0 = 852256de3479dc86a3b4d404c2647b74f5f8a1c01b681f1d8efdfedc54c10c07
+Output.0 = b0397eda1daf4544104f730401cbd1be29989cd28797de2c13cdbf184f86c6378f8dfa394e08d9a71de1f1633b5b28363df21659ce58b12592e8ee4f55cb81ac
+Entropy.1 = ad3b6fa3d632a42f8c580b59faf882c0338c5bb044b88f37
+Nonce.1 = f99966db52a2f72711b5af10eff42fef
+AdditionalInputA.1 = bee5974c34302aeefe31c7325987c158df8038a237ef9ecbb8fe74fefbb3e229
+AdditionalInputB.1 = 47b9bd9babc415afaaedbb8ac9ebf02eb581d1eb5fb0b7d43455848d66ceb53b
+Output.1 = 75922a7b1933f4bec275c150e2f9893714cba119c5df7dc2cfaa9618f1eba54d68d558e976ce292e4b9f8306f1d1755978041224748006bd5712310fd085afa0
+Entropy.2 = 16d399b526a83766b5f935e4c12341981724cd872425d859
+Nonce.2 = c0f38354ae696835f9c856716f186e4d
+AdditionalInputA.2 = 56943f5ef7eea66af2ec607fcfa2bd7669899b6ece4cabac8d6e7a0868be422b
+AdditionalInputB.2 = 2f7e746e2d05cd1e523339926e3e96568f5d231b80c268f44b1df962229e5b27
+Output.2 = 0bd1c41c30284fada09eb2447d5638a7a0b73d99c651edc5b8aa15d4e9814048d79c52382baa203d3f7278f4864d18366566248006587cf3f90271c48c493d5d
+Entropy.3 = 8d2bcb66bd17e8b2e36a2a5fd1c1a0861fe34e1cb8f2219b
+Nonce.3 = 868c2babe969d7776f92929795a91eb7
+AdditionalInputA.3 = 4618366b0d51f9095fd867fa7a40e7736294a92fdcc5d0ecf293042566683448
+AdditionalInputB.3 = c45c218fc648de1bfbaaa63be027afa08cde5c7d84a629db9b54a20cf64c5a75
+Output.3 = b85b85cff71851ce211d4eb2dc569ac2d43ccf52ff71cc0090ed59c87e785061b99f352e398f61d23dc0a17e4476da39c31f7b81738caa61475317363c205aba
+Entropy.4 = f3ca9ee324cb0111d5ec081edf77d3fa0b77718a87fbf4f5
+Nonce.4 = 98d12bbe87e476037a5b244735d2102a
+AdditionalInputA.4 = 19069b8fb8148ac00cf607cfce76a954f3129c7975196b8b6128a300ce0dc0a7
+AdditionalInputB.4 = 4f078daabd377680eae1823074ab0d40a693d68121bba429debdfe0f883703dd
+Output.4 = 6728472ebc52a875b1a163211c2b771bdca99e03f0de54a6f4a141a7691d6f9679f963c2fa377f0ae471ecc470768818ab4e627711a0f988ff973e4bce501b69
+Entropy.5 = 5447868cd9252423f03ca3bd8b0a454335d32ea54fbd3edb
+Nonce.5 = 64f2de765d2028a8ba06e6d204ac4bc4
+AdditionalInputA.5 = 191a39d630d66ca946720aefe80c94bfdd3e24dda3e37c414a93ebb784d3e7c4
+AdditionalInputB.5 = 8b664ba74fd0bb5006edd337a1c4dbbfe773902e084c558ba145e8f8ca345487
+Output.5 = ce5f7a6968f3cf5fb01e6208a1651720fe1e90764dea46504e106f13ebfff3d979072b6f5459069a773003e3eca4ee3b730aebfe957c0e68774ddcb971bf4603
+Entropy.6 = e8d93d86c3e98de64f4080bb6452055cc7db86d25bb3a923
+Nonce.6 = a5447f9115891d483037ad4dd4c22a8a
+AdditionalInputA.6 = 56c6cea01972737421a07cb20c79b8f76b32a9e9fbbbe46dd71f02c72d1e450a
+AdditionalInputB.6 = 9642c82159c36a48a252ccfee61c5c1ced6d3a04099d98f9dbe534877b80a98f
+Output.6 = 187f40489f22f35583e75821d69f369d1259352171c569f2d8e9a15097876ce5261b4174530469829ba2c00145cbf4d2a1205e911c2c32d33b5d6706409772d2
+Entropy.7 = 59b9b4df1bb4f778ea1a1bfc41255cc325d6bf4ffc428ce1
+Nonce.7 = e0fb72dd71ff3c2e072f27d657260da2
+AdditionalInputA.7 = ccfb64f43f84f03cd98e1aa3566ca0c9b7438204c8e65a9cb8227e2011b9a716
+AdditionalInputB.7 = 3064a31a84c4eaa6980e6d412cd4f419114bf0e8b227456a91da0fc0f7dcb75f
+Output.7 = 7d48836ed657231f62627ba50897ca8f379f68d86fabe26caa7b4441cd2b6c2ad1daf4eabc2c34b3963400d2361174ee22952d6a28e89937b231c9bc228a78c5
+Entropy.8 = 0d03ee60bca723999d49589eb6e4042ff97b22433c812242
+Nonce.8 = 8a2f6fc8d4c54bf6852b902bcf2c41ec
+AdditionalInputA.8 = cb269441035e071101ac8efb4eb7f9f1de2184771ec0eac62d0692e67bdf1fae
+AdditionalInputB.8 = 905e3d9c1800e1366bc749a60d21ce518fdef2a36f880c26c1528f12dffb9176
+Output.8 = a4cb87de76b2eb39599f68402293cee9c61dc9dc1257789964a2acf0c32f61c907294bdeca88b05daae0754d21f0c2b75697d86142374f9676db34753371e618
+Entropy.9 = b95d8b266acccd6cbac0c061ec32a1ea711ffec8006bc7cc
+Nonce.9 = bfa08402c0c6b87deca2246d81f67f58
+AdditionalInputA.9 = 72ffd4a183990dac6bc7a94647142759bf881cc0b3178f60e0e2cbc33379f7ad
+AdditionalInputB.9 = 2e9fe4d1af62b15f8535e198aad79361e94616418ed2d801e70fad9e0e9ca5b8
+Output.9 = 1b0d15fb4fcdca1497dcfe60e7d82bd0401b1623366a71cf8fa5754f878e20d8f2545bc3d41e7973ae3290506ba2a976b83b7b98c766d8ec0c264be287ee63f5
+Entropy.10 = 6d30465837a61e49dac0fc8448de3afa2e22e094286a5aed
+Nonce.10 = 9418c02870ef4cd119ddb673ee699dde
+AdditionalInputA.10 = ac322ecfff1f7326a4f4cb33c176fe831c0ddf373769fde61a42426fe99ea849
+AdditionalInputB.10 = 5b7052491c3f536ecb91fd04380f9f0380a415dcde601a670a1ee6b8f22e96da
+Output.10 = dca3fdaef8bfb2d09bb906abcb21818aa66a064e7118ff3dac5566ca991ebb37338241e0c829768f715e4c2f1157eb0ac473bad86b0513b64854f3ed8da48328
+Entropy.11 = c683213a47375e2975d3004bcd6fb4aab65531c752931d6b
+Nonce.11 = 11f278b8644f52a0a4074164097de458
+AdditionalInputA.11 = 37c0655ea6c20ec43c58855be314afde29324a8186ae9c08c8ad4d8570081a72
+AdditionalInputB.11 = c39bc560c71aa5cdf2a0eca0ffa4fb562cab1379bc9043259ef8934436142323
+Output.11 = 7af8cdc705cb06c408f789b5a0d677e66fb32bc7a578c4cd6de34202f17a88d91a238574666449c4059f2bdf593557fb78d07795371646f03cf385f3058b1d78
+Entropy.12 = 8bd5a59522837767fbc783caa9a7feec68df135616e98878
+Nonce.12 = 14aaa414ade48e33ac5b443b94a9f1ac
+AdditionalInputA.12 = 233b1e2c230ceabaf88ec1ba30efb72e35cbf99fdc9259514019bc96f6eecbde
+AdditionalInputB.12 = f8b19922b8896175ada11524b98fffc1159f1456dd7aa657b7547f0bf9e4fde4
+Output.12 = 494a5d31a58a50f506825279b248835914081ddccd638067df0e2d3c62008a4f108c819159000bc0d0c7515dbe488c3dc6ca3f2878ca5896b13350985ed7602d
+Entropy.13 = 97fef1c36e3cab72d5043e416cb15706d6d76ec5016451e2
+Nonce.13 = aa865762b80165e239ed7951b056c770
+AdditionalInputA.13 = 418907a25332b9d242bb18775fdcb0b4f2ec9811750e051f96e3d6d252eb87de
+AdditionalInputB.13 = 574b64279394234fe59a14cbc9404a0bc1469e6d181eeb4e7414a4a6de0bab7d
+Output.13 = 8c6b475bacf933c0f7a07c88a528feefc952b9553105b20a17e3bad3939e94320fa8e280fc54b485d4cfe794081c054ee8e7c24c65f6bb95d88272874d2a042f
+Entropy.14 = 5432a340205625c20afdd42ecd54e8d6ef80b29c73f62dba
+Nonce.14 = b8fb4440d8955499cdad97b9b0e33f63
+AdditionalInputA.14 = 9a535410626b872da5064319db921d9fa015a67548f12e8af2b155130ab632d0
+AdditionalInputB.14 = 3a12519f497a8c3af0f35fdfe4aa47fef039563c038c52aa4ee4cecd055f1bb6
+Output.14 = 5701e2ee574684c855d403e5a61b132c211e646ff5ed41cfcb81f79bdd867ef5cda7f0ba5799f93c07f4b5588c34d433df9335010fb6011091177f5e0a7cede7
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = eb4553f7141bc10882f0a3741780a42df8bc38a7121d3b7e
+Nonce.0 = 6f347f9c1de84fd5341625ae8d6bf50c
+PersonalisationString.0 = 5e2e73b86ca2f3150d53d23d590acbeedaaf91638bdc3f9d588e945af4bb6ea2
+Output.0 = a1deb9a5aad608a587d61ce5e0d7c7dd449b8c87898354ad1add6e05853873d279ebe4132fc236a42d8ff0dc3ace95d2cdf9d0b057117cb119ee7550ce03085c
+Entropy.1 = f9ce2d0649bc99288af15fdfbc3db88956d96c84c0d7e5d2
+Nonce.1 = 8cf00c637a079a98362ead51149e5567
+PersonalisationString.1 = b244d68a9b30f3ac88040d6458a625080020535341533be270e894002c07697d
+Output.1 = 2851192fd3b37351d05110974388ece011d10e7b9d380140291048ce3672c134bcb4a0cd074ffff389a02af59c5226be0253e7b7400e6344b1a0d0d145ff366c
+Entropy.2 = 618ab7da12a5839b4d808bc27cd5d32500007814a54e5de0
+Nonce.2 = c3efab857f1feb049ee060ba760f17e0
+PersonalisationString.2 = 33c6af4e264f0d19c361ececf89bd7869fb0af7f9b39159c0fabe0811431e62c
+Output.2 = 1d74ba44eadbae176a0a870622175e4b0ee4e4352f8c2ee19553dcb2100f8e2f132dfd4f4cad5e01e3b702228902dcbee5afd5390939c361882a0b679dc2cd69
+Entropy.3 = 7df2a3c0bd95c6ba8873d6a5ad5dbf0e069da3cde1e3943d
+Nonce.3 = fa28224a8949134e2850c52a28576f65
+PersonalisationString.3 = e2dea15d8d3aeed87ff45e79a4a760a89683dcf82cfe356467affc44592e2bf5
+Output.3 = 3c48823f4528b396c8667407cb8846a229527d9589f1ceb2fee640a83f93327107c4c991c2c8ba3ee81853140a348c1ca5ce264ef75db4956794268c5538101f
+Entropy.4 = 2d8a1a3a6a77e3cd4640a0780f59cb975f81c2733ad7f498
+Nonce.4 = 50fc6bcc7ecbdb3d57beab7e28a49bc0
+PersonalisationString.4 = 95f9c3563b535e69a49134c336cb80fa9ad95108c756ea261f5b3ae9cbafd41b
+Output.4 = 86871f9cb6b4ed252bd1e868c80a263e025bbae2285cca59c629982732a5063e5cbda276f282fdaa90aef8ec6dd31d32b704de5028ddd32e22de3680086f9a89
+Entropy.5 = 133524edabd5a7f7858c13f27953e987283cb172a2c37f17
+Nonce.5 = 5e6cb7f7c98ee13f467d6bda288b577e
+PersonalisationString.5 = 67d39160ccee3040db7820a37aefb7d4a10f7dcdf3bca669fe235db63ab24760
+Output.5 = 2d13ee8b73d518b0afbf4e1ea6f632006ba56e3f4e24a21f6877ed0f79c3ec7ffd19ce81bb170b3aa90df697f5cd9872ccb3d1e33894dd16c6f5cf2fb107aedd
+Entropy.6 = f297474b5b7e68d5aea948f751bc899b36c212636f288b84
+Nonce.6 = b8a60dd726a03fd0d2bf195d2cb09a03
+PersonalisationString.6 = 8e32db4366907abb98c0e09c5360c56fdb6f483c84e606f07f5d1d45a09346ca
+Output.6 = 92089094a89fb532f068a8630fa947b8f86eee22d56f22a514f8a6871aa4c808c8c9f47c1354f151c68bc130c8e85fe47e8beac8cb346b8ee2a7e00159a0ea80
+Entropy.7 = 70508f6035cdc41af63252af23be67af4a468f45533110c8
+Nonce.7 = 77c2bc1a84f4f991796f9c07092ad5c7
+PersonalisationString.7 = 477382b2f6de44e2f09a1d135a35f1ccb02851f9e1f003f98e022043458f5b66
+Output.7 = fc634fd4dca7fcd66c38926518a8d6fdeeca07f87e9b9fe5405efd9af9c941cbf156bc5b09a53f5cc8b5bf9437e676905afaee58027bc25ad46c32abbea05c85
+Entropy.8 = 2e5d95687b0e9b777f1394f18663e798edbd24cf0c3b9458
+Nonce.8 = 02055fa3eb3d1204c253ebf35e3143bd
+PersonalisationString.8 = 1756635c33f8686b458daaec9b9b4460b8a1d75aa2e300e75557411249abc00f
+Output.8 = 91c7e7183eed6ba66496678b9ee8ec8b86de02fd7c6cb977482f0df4849a72859a804d268668a8f4c94934413a94a2ff0d9d39b5188607cc75a079a7e4846169
+Entropy.9 = 2e99703a2bf195a182d221ce79bdbdfca4db53e16e757a5b
+Nonce.9 = 4be52fba5d1fbc7ea77b4ae30d16e0e9
+PersonalisationString.9 = 8af346e52f8c9be68a58f40d50057004b7d75807af922732843696c18290d589
+Output.9 = 23352a39994a03f42506c34ddb8e0d19127ebbfe8239c34a2711cdf1b1beb1cf75402a613c8531d1dcceacdb490073c7a56f0affb3f11f26e8c1901faf3dfb2f
+Entropy.10 = 23931f7e10ad6e553a285481acae7cfcb32f644e08c5b009
+Nonce.10 = 7bc2b57ede9135b4192c5181f90808c6
+PersonalisationString.10 = 6ecd84ef10b4e862bc3447867b3e8088e9db4c5be5381dbcb60514051390bfaf
+Output.10 = a5c115bf8f950b5d18718a9a2269759e78e4fb798937afd06dafc9eac9f5726027d639de08d0b7b008532f70bc48a8f88f637e67ca7fb3fce5196e993f6d3a25
+Entropy.11 = 619642e863a8f8d2f7db9c2ee56c13a2f039595c29ed7496
+Nonce.11 = 9c50ab67fc7668dec6034e8224ae1d54
+PersonalisationString.11 = 230b187d67c9312eaf1923526bfbcb319d9d339fe8c862d1a9fa1ea7830929b2
+Output.11 = 0ece188d8d1a37f158a6d065f9073769d750b6d33bf8493df96d99fa98c9900076f7abeb02312ad4e0c6edde99ebd61c396a8375a1d71f6b2086d9021c11a14c
+Entropy.12 = bf4e566b60a592f6c889bb19252b54489a5815f2bd074b41
+Nonce.12 = 32a2f8e78e17574d6384e1f539959ada
+PersonalisationString.12 = cf758d772963f576b51d327dbaa3517613f3387cb90c85497a9360e04ebfb179
+Output.12 = f6bf711d5002997a3ecaa36ceb5ee63cae530172890764aeb8afd5d812c368568e4ab0afd2ddf97dc310b1c353e673fdac592ac608e1304f97a5f2578c1ec1d4
+Entropy.13 = 18010ffbaeacab06a4c55a38e8e936d79ad49af976b8f748
+Nonce.13 = cf55bc78a1f1ee4abdc554e87b3f114d
+PersonalisationString.13 = 53a974386ba101ba34ea65b75bc360e9c1cb80c2a6508290a78ae23e5c701537
+Output.13 = 5726de6848ee074f353cf17bf3ee0b09b6b603b1246425ddde1d01b5bf5af0d88888217d59018db3171811da02e667fddf8cb35100369dc9a8cf2aafc5452182
+Entropy.14 = f6208773ae06c614107a9865c36eeb2ac2e348ee7cd69dde
+Nonce.14 = ee7c9ec2687703aa103070574d6167d9
+PersonalisationString.14 = a85a25e5cd6390beab64ab8b4f534280f3fc7b169eb0a75cb77d9bf06292abe8
+Output.14 = cd5f73d4febc7fe17351bbb9094729759016bd3eae0dd3d9128697813a0b929dcfce6bfefc1e08deddf617d4e727aaa3c7cb1ff23bf02fcda77d0b1502390349
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d5973b5c9105cbf67e978f419924790d83023e86a8b5dd6b
+Nonce.0 = 358af1ae9a842c6e03f88dfa2a311161
+PersonalisationString.0 = 294d7d35f53a5d7ddef5ca4100f3547112c93e41251257dc0a19b6dfaa4a60a4
+AdditionalInputA.0 = 0805f31446c51d5d9d27b7cbb16e840b9e8b0dfe6fb4b69792bc8de9e3bd6d92
+AdditionalInputB.0 = 934d7fd5e716376342607123ea113d6b20170ccda53fc86541407a156cd94904
+Output.0 = cb95459d1735cb9bce8a75bf097a099c9f7c70bad43e3e431f2d3829d7ca9d0617b9a99337af5248d4741cb5a60dff6f8c5221e23f3cb524a94ffdd2190bfb3b
+Entropy.1 = a04499cc2b3620a47ee66de9ce6510033940958539f754fb
+Nonce.1 = faa492b5eeb620e78fb6375c620f495c
+PersonalisationString.1 = 318a01b475601191438ccf44fed9c0c6af5f4415c2668b2d39f959ef6fa2e2ee
+AdditionalInputA.1 = f1b92d7fb126799f080264bbd2eff39bd755b8d1cbb87963a771e7ac5494c154
+AdditionalInputB.1 = ab7975e342c260f4013856e59d7677e7071821e42dcb0b147dcc74074832061c
+Output.1 = 647a3e82be7173e45782d42ee0bc52ffefc3072ecab3060ae60631b8486289230c00b3e9641f88d3427fbfb150fd14dcf8f2c8db14c71545788951efa074b227
+Entropy.2 = 5682914c36776945e023f98e14171725a2c0204de799a36f
+Nonce.2 = 6d6f71cfef957ff475583315125ead6b
+PersonalisationString.2 = 557fde94d41c13b24829b8fd424124825aacb14094e5e7d4f8deea7db2ac2940
+AdditionalInputA.2 = 4c64c5a5c1c6914b61faf264924c10debc2f367ac4cb1e012488322fb19d69a8
+AdditionalInputB.2 = 7193e61bb3e75d48e4a3f90b108e07074c35390693cd0a4cd3bb6cd246beb740
+Output.2 = 7aed931ee17c7b05533b52f6b3dfc97688f6f3b39744eded73dde27e034afb1801b3d1160dba797559fd721610f6d62f6d0c48a67403075f6c2450e6246a4d66
+Entropy.3 = 199cee8a881888166cb52cf68fde780f3255b13d370b689a
+Nonce.3 = 848016aa71571e1c63f3174bf93587c9
+PersonalisationString.3 = 66212f4c19b5cdf4a6594fd4c4f7b7837230de71b98d506d46deceacb5f0c69c
+AdditionalInputA.3 = 5934b3958ebe2154c246cea55df231e41a867e8844129fd6c7de6c9cf8d4d7b8
+AdditionalInputB.3 = 0b4a32bab842c4d24999e9ac6bb1024b7673086895e89a7072a59c8c75fe3e0a
+Output.3 = 8450410e9a7ff9a104d6d0ecd2315ea540f54cd88d21ac6d7cae8a86181dcb53f1883ee1dce8a2862261620859334fde9ce2deaf1b58d4d4d01dbdfee7732e8e
+Entropy.4 = 2ff3c6290f5140b6c4968afe0c6ac18e5574c71173292e54
+Nonce.4 = 93dd9dfdb45f96b8059cb3fdc125a3b5
+PersonalisationString.4 = dbf6837058a3741abf3ad06297c19b81f4c46adf7d46c58bbbce5bcf296400d5
+AdditionalInputA.4 = 329d4fe2736616b065287f3cad216342b9be26e8f2c594645e7e278807097d5c
+AdditionalInputB.4 = 8a1e258c3a3fb9b0314562a320c0c11e6f8137e291a79ed568489ad0560c7c28
+Output.4 = 281cd762f10ddd29e0ab11cf79494a7eb592dd84dce65804286eea864d8b8544282d3fe80d76fe55f7fc66d0971b8dcb84a3f25d85972133e074cdf1e60bf069
+Entropy.5 = 15b696ecc0149b7805bdbeaa65b9ea9b76e76dd68bb9ba5f
+Nonce.5 = ee4174e087f3e74a3fd2fc403559209c
+PersonalisationString.5 = a42dd88cdba25d889dbcd9c7b7a7bcfe25ad1a81a1761e24e046cad47591025c
+AdditionalInputA.5 = a373c67bf7a8789870768af6015a133936821d97cfe1dc49731b145f6666dfe3
+AdditionalInputB.5 = 7b93dd2855ff93ec1d194c8671a6259939bc4a572994ae3d52a844117490533a
+Output.5 = 78ca84fe42b16eab52888d540c50e521615c5f4dff0456cb808d10f666d08dd19c68789be1d9d855ff995deb8e0261e8c44b1248b0b2dec2599d8e779d24c839
+Entropy.6 = ddc6e50ff9083fedf4a5d56fd9238a2565f50184df283a78
+Nonce.6 = a3060e1732f1b1defc8e5f39e012e303
+PersonalisationString.6 = 8698835795804ba3465f3ecdd4ace047506cb15dd9c8728f075fcea5033fa0d8
+AdditionalInputA.6 = b1011f40cf331e33d24ffe86178f70e6c7d4d2b443b64fbd5c979b94193cac60
+AdditionalInputB.6 = 3a72e1e6636404be69f853beb0633d5def03b16b4b205a02384c26951ca0f220
+Output.6 = 7dbeace1a90a2843c3de36f3bbac6e9140a938ced630416eb1e1638708ec12e480da65e00c8294151ea4b9a1d5b25975d7940d57c8de72e20382996ff4dc64c2
+Entropy.7 = dde27018cdea027b273a83ab28f8182293e5373291641262
+Nonce.7 = e8810e24fb96ba6768b65747bb2793b8
+PersonalisationString.7 = d8ada062fb8a567f4215eb1ff87a2cd6fe964d7bebcc9cf4ecc531be21ad478f
+AdditionalInputA.7 = eea0c651afae1cca7d6b4aef4c1e0c22194c70a63fe474a8b5fcbd26a5696c3c
+AdditionalInputB.7 = 71eee70d6b57854da68789d992e4132485a9aacc3fb8faabc908edda653bf740
+Output.7 = ce2f8c2accc4c45f183bfebecf1add4f32ed360d356efb906315c043d150660a35b5d0350cb053d458167eacf35cc7012bdd1ef70818deddf38b4e8557bcc03e
+Entropy.8 = 49b2ae2b2914d688538bb29193ae6378e0e8b941dd3e3152
+Nonce.8 = 279f5f1832ccd10d0851404527ed25fc
+PersonalisationString.8 = ee3a40ee4322bab168235923b52b80a3c711cd7ad7618e76400e46f153a10722
+AdditionalInputA.8 = ca3e55a7e1a51d7da3379a2cbc3162fee705ffc8e2bb7294e9f2d9c29fe8b386
+AdditionalInputB.8 = 09acba8e05593994248d4066b3d770f41b47ab8244968bb626bdfb6db141760f
+Output.8 = af2eb73e49b13c1c426295fa2643de08b192ac24079b71c8c175509644937f222dfbd6c77dd25ea3eafef71da2aa7bdb68ab4c8e97bdeb7c706d99b5b67c6f9d
+Entropy.9 = e8c538ae11619896bd347d679007661ace7e5192b8391942
+Nonce.9 = f82628a05a8dfc0668f7f754b171d5db
+PersonalisationString.9 = 2c2a7ec31564a34e9cfb9f0f42d8bab6812b4ade263af4f00229e6eb991e2592
+AdditionalInputA.9 = 8d9e1824d27737afc411b24be65eac50480fce4afbf7317a24b04e2467206f54
+AdditionalInputB.9 = 3f026a1a2bb8d059c495b0d4a4f9732d94aaf15de42bf34412d7270aafca099b
+Output.9 = b396a8569388932a6fd28cab6cfb5337571c1c91b8def9835a2dcf23536693b6a275abb4d4a3a2a1f492b6fe5bce7630de03994ef234d4255ea338a13afb8e6d
+Entropy.10 = 9544ea65205283f366824c55602178eb82135d0157788f86
+Nonce.10 = 5e0379adec2387fcdbc64d0f9e23ccb5
+PersonalisationString.10 = be016b1ef274c72c74970c7f16ff9f6dd579ad736ab802385bb7c5eef7086a95
+AdditionalInputA.10 = aabfe48576089e44431ae894cc316ee96bf7a49189c7e42abcca27878b30ef24
+AdditionalInputB.10 = b529e2d37b0808b1c925344019dddd3eea22776838a06e677fff67127bb68a6d
+Output.10 = ab1a41841330df7e734a57be208171950fa8e64f4a2e26c72a10b33df9a77bb24284bfa7220bf8ef035e4d15842be55103ec4743e2a95badd9484b360d22e2db
+Entropy.11 = 25ec0742275e6fd6d309a02699b7f21aa18362ea683ba732
+Nonce.11 = 5424e55026f028369fd96f57509bfe92
+PersonalisationString.11 = efed651e627963c43fbf164bd7b9b3bcf18cb78ae97dc48a85d5212ac71a11fc
+AdditionalInputA.11 = 26b0f1025f318314b55fc1a4dd325513c453b66d0b21293f775ccd7d3b9f4343
+AdditionalInputB.11 = 2f94d7de2ce25d124d9dc68b39f9076ecd2ff14fe4e1d5c17c6e4df2257fc1de
+Output.11 = f9fd576104d7f68a2af7d6a63f8244b063e287787d8c93f3167eed9f8f8320c861cd8ccb5124d32ac75c576daac3082b3f5f7550640b779e6fbeb7a3f89fcb11
+Entropy.12 = b72bc2e75e227a5fabc267c77fc7f99c81d2e4e41efc31b0
+Nonce.12 = 3e286039ed899f2bdc7025a7d30712dc
+PersonalisationString.12 = 3590153ef3b580516a0aae3e9cc7e38c3ee6f1703bf77a3a6d8fdb58400cf120
+AdditionalInputA.12 = 7d62a4687d5c11d37c3a86474a53228ca5307ec5801dc24953a01288de868bdb
+AdditionalInputB.12 = f4ce4d4b6cc8041cc094f05fb46836fe794c810a00ea545426297496d1b3da84
+Output.12 = 919188421ac904b18698662df06b1b2c61d938ee324570a4d3fd845347f76ab90ea898e874d529077542941df547dcd1b0a370adb8f3cf2b66509f2aa00ce007
+Entropy.13 = 800ea2b7e2a34ba4e04a8b2e3f404a4ebe78d1b11964710b
+Nonce.13 = 2614f444b70a50d8ae85270786741635
+PersonalisationString.13 = 61112f4579e8da87f9bd33aad08fbeea17e78de3dbf6a75549dc50d2a9227216
+AdditionalInputA.13 = 671b8cc51f1c53e425d5f97d73053021dd6af23f6abda82efb006375fdfe6818
+AdditionalInputB.13 = 502fc3d1e89e17f0f111dfa32c748a79dd1b1e19024027bc0d92ed3063855b07
+Output.13 = adfce16f2f6482d0190dddbb89ead448e33264fbe9f76ef753076225f1c430686f332cba8454ab81ef9186a82a814531c49a1e46a2372fd06ffc576823001b97
+Entropy.14 = 46bc3011142914e87f3bedea5d09edc188acdb2bd4962d5e
+Nonce.14 = 99b0b4b442e85eaf638ab4654437c6bf
+PersonalisationString.14 = 5be51d437e75057dd2ef4ca7443fade07d520d17074b5bd73aca111731b508a5
+AdditionalInputA.14 = 81a540c5f3379a46a2ea35cfa358d67f6b35c023f910304b873744aab63255bf
+AdditionalInputB.14 = 55a2e34599b00508ea0389563cf5c663775e4c1913013e65999ea152947884fb
+Output.14 = 5622ea844140522181d83c5db4318efea2590780705b949a9422f0ee570c3e61356164c2e8c3275f5edc8cf18b71ecd634eae52901caa523047dc178f02f2cc6
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a57cc3b995f35562ba30619ce6c2b51f2217bff014006ef1
+Nonce.0 = e50a312b22d68f320d4bac240d414f47
+Output.0 = f2cffeb0f4ffbe773dc80472082b3c0a877aaa113dc4d8678b25d8420270e35088cd9eb2cbaad9bc3d5b51865447245a3a78b38c51d0a19ca08c6195587dfd7a
+Entropy.1 = 0b610e8979682f44d937c974e73a4c3df95a34b092405fe4
+Nonce.1 = 085581c01fb9161584b9f6526f547b44
+Output.1 = 282dfb8a9ed6721229f781a15a7033adbcd49a210a231e17eb70d64ca80375a8ffcb4e9ac6e23273ca9654e671ccb1ae3bb596bf7a8df5dd230bf4a2b39bf96f
+Entropy.2 = f93e041748910281a4ff37efe830ac0264e4b12ece0678ee
+Nonce.2 = 7d4d6c545de8c8118455595434651bbc
+Output.2 = a73e59a66de502298a8106939ffaf856af9f172b85f5e99b057d6b4d6ef052f1226700e5e398e6802f2a4afa04e7ff00c46f57f345eb03de8fa7795a060cf340
+Entropy.3 = 814886a6b9a3cfc318785b41939f7b075ec6b00fc7ff1c9c
+Nonce.3 = d13313123fbc45ce8b9e8a0a4d82b27a
+Output.3 = ba2a7c50c6d3e7ef2d849106c6e83310d9ad1c1d0ef53e61c8b955acb4ef4342e1c0f5f22e19bb1eea5d0f03b6d5969291c401fb6c55c99f4252b6ca7f341935
+Entropy.4 = 69ce9bc6a266950270bab47f5019f576fb9dee08179b34eb
+Nonce.4 = 63025d588f1d08f3811696a63a1002e7
+Output.4 = 5e52afd2a86701cb40bd77baf55eff3a6c9f843456ed64d4015332779fe0b26aeac634cb0621c43b3ab71eea2adf96312d385c62c31c0951523260c469b27d88
+Entropy.5 = 25469a3c9a37bd9ea91c6f243e444c1b36030152d63800f5
+Nonce.5 = a2b839abcfe4a87368656f43b5bb4e2e
+Output.5 = 32c1fd38da53adbc0a21a828dddcb6809fb01d2830c6a544d12f55fa2e4443f95f005c0ff24c6492b64095e3746f07122f983d238f23dafff7103a7cda57eb0e
+Entropy.6 = b88a610e687c1e06d18ca912866b55d276a789cff9439595
+Nonce.6 = 254f4baa2b34e9898d5f78597724ddc7
+Output.6 = 32411f3250bf2a18ced48f522b3cc306afc18e7a36cd64816647a00c221b996a82ee850b7c0a8ca2241b7c6e645b453e01fc35fba54d5baed9228a98a672db67
+Entropy.7 = f32bb10c9e0d8f534538940fbaa36844e7f6f0919750e1eb
+Nonce.7 = 334b85e031519607e001a287e3258322
+Output.7 = 7558c59684f7a047a1e5929c8a37defc2f1f554a34c47fcd9ddacf88bbf7eac40704aeaa503cff8963295e702435f73c93ff354f529ee2da08c350d4ccb6d45f
+Entropy.8 = cf144ddfc132a6a6e7b5a1efd515c704fc22823e217d32dd
+Nonce.8 = 5a0bc0c87cccd908b440d6a4c738fa74
+Output.8 = 865db2d0711dd3fdd5d2a19a65fb931eecd82ba2a7f2e53bd6420a8b1647a41802c04f9b6ba34b85a72b48fde760523e28d87edac9b8ad6cba361f1353fd39ae
+Entropy.9 = ade1908534624c6bc3754de0db75313835a828572cd277bd
+Nonce.9 = 05a5b6d21b98050593ab9813268e2dc2
+Output.9 = efb7b77b76d7bf571a9bb13e39ec46a19e9135ab086d06d59b20f00c78f2aaa848f629327a0d670729a45391f2f023a8f45f1cb10b40c6618317a46afe0ae130
+Entropy.10 = 3880c2269082475c16b978c72af1de9d74ec3c7694c519ca
+Nonce.10 = 83ead0f2d46d8d1a778690ae512d66bd
+Output.10 = af4d71c1147552bf8b358e16c9c7fe7f036620cbd61f1432c8c5f270daccb2b9e15c12e9f5921047dc92d40a90e45bf15fef120a3e08421354674c95a63077e3
+Entropy.11 = b1d2c9ab5a904567bd0311c642047de1b39441a5e2d901be
+Nonce.11 = 91c8d19bf5d4f9511f6c6653a6585ba6
+Output.11 = 8bc7b790c77b047f7a178641615c295b164b09037c06a8df76bda59b77ed285f808c96a4b49b4594a18299c2a62b1e0d9caaeb0f82c1de35b428038d10ab00c0
+Entropy.12 = 19700ce2883eac515875fc91353c9a9d5989b0d29fa2eeab
+Nonce.12 = 5656449311e246ee8025cf303d6b6da9
+Output.12 = 000217849939ed26c9d5fdd4d003d57c12f52f6e7dae364e73758c7fd1225b17ae66f38379a903e7845446f0998a8745e9aec9b4ba3173ba1b2921eaac313e58
+Entropy.13 = 552110486f04b8b173748be09db853023d7d1e6b9e6311f4
+Nonce.13 = d28c45ca09d51104d519d381b00cd712
+Output.13 = b35b8cde56d5b2a365a755e4d0bdbf7002e4b06199a342f1b98b734311fcab66af1eea2c7fbc2642ac364c920af724e37d45e8c17cd4467b892a45364794a746
+Entropy.14 = b2f605fcf9929b1243c88199143f154266fd8587c90aaab2
+Nonce.14 = 781c857f75bb5948c2a22dd757b247be
+Output.14 = 7753797b7b3725c8739ff211a0cc8ae8a1e0f28086ede4d4f836dee57fbd7880f10521242759b9725a08cb649659a2d81f540e93f87e4931d81b59d9cdcf45c0
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e62098a16d60d27598ea4c97f2f013c4ffbd456b54a8fcf7
+Nonce.0 = 10391c9e4d7969fd2b1f8986e04860c8
+AdditionalInputA.0 = 6a7db6d2f6f23572feffd3d77446f07b922ee7a9fe580160ed2d8dd7ffb50b00
+AdditionalInputB.0 = 1c4f982ace96e784103ea254cfd685e95adafe7988d9eebdcd82e7ba025f3153
+Output.0 = af0e2c2053e5a0ef2defa7dfa6b4164b4d8378f00dfd9762dba63a67ef5b58c8e1a86f560ccd9337116243609bc4b454bf8d1a1aa3f99ad1d258c318c72d144c
+Entropy.1 = 8302640e79ceab3c2b9f2b3ef87e6ad907d12ea9ad1a07c7
+Nonce.1 = bcf4b6d5f69ca09ba4b3bf581723cd6b
+AdditionalInputA.1 = c27f380b39cbb715256728de4685f3c4287b6e3baf13c0f1be9bb4c84decad11
+AdditionalInputB.1 = 135230d95635fb88c73707078018792d4065848ad813ab981495571cf9888e7c
+Output.1 = 9c61dcac29e1d8508aef2538ade8a838ecf5c5061adcdafbce3774bd240cc6230b68485592a2ec2c0b9d6f4f8202b163b83ebc752cc08cc927e2a79db1bab81e
+Entropy.2 = eead0390cd193410c520eb5414ae6f2e2eb00bf5ae0af3de
+Nonce.2 = d40ca3e521f2a57e35bf3aed3002abc0
+AdditionalInputA.2 = e4309ec8519eed08e154213014518f02a83875c77e6bcb6eb1dc21b148bc17c1
+AdditionalInputB.2 = a76aaeb9bdda282638ae774f35df92a10e2fdcb2fc91703ec8d569372d868944
+Output.2 = b4b80f0d94a4f93107e4b54c118fd8a8ca62d60c54258654fb83dc3f4d24cfeb58a3714ee6fa478e86ea649a64e94ea49e108854bf048e4bc6a0f0f9740aaf92
+Entropy.3 = ee1e3af732bff04e9e45ba62dbe627049708b6ef4aa793e7
+Nonce.3 = 531edbba82b120026835b856bb5b63e0
+AdditionalInputA.3 = c38b7a6cc5d5d23ce416f924c604d64e378dee31f3dd70b7b11d265acb45f98f
+AdditionalInputB.3 = 493e626278f6af2ab99c5335c29dac3825f852aacd3b237a3f014b9adfbe4d4a
+Output.3 = 076aa42c35035575f1f0a492288dbb9c4628c091fcb34eb6b8039a887ba1ed8e0029b2d18c3c1c321d7f0e20b7dbccea886ad518aeff089d44709eaa583e45ef
+Entropy.4 = 79b2039df2893b45d7c4be89d0e0acf41fb11cf70b12dbe4
+Nonce.4 = 35d19a10420d5397d1a6fa35a7676ee6
+AdditionalInputA.4 = e3384b09c4deadf09467fb4c68f2898ed641280c2c61d8ad7f86bed0566927b3
+AdditionalInputB.4 = 39da7d653008b8b599cdda25ccba4d2d15a96adc1d12ac131cbc436488e1f7b0
+Output.4 = bec55b2067ac470dba7b2ae7c7043ca04159957bc54728165741d057f809bf567b9d7b5889a579958d6bf2ea11d38eba7543420f80948f7120d964076067bee7
+Entropy.5 = 6a910a86591cf05521c89fa06b0fd7ebe3c8f1e0de1809e9
+Nonce.5 = 441ea26fe94639085b0d8e28224bf111
+AdditionalInputA.5 = 2928ccab0ddeb1e9681fd9403a48e734c347ae80450ba84b2c3a686c1af6f203
+AdditionalInputB.5 = 22cf810fff9350b5d3b3452476670ab96488b86d6443dd87c4c249a79ef1face
+Output.5 = a7b0a139cd26274c0fd5b7090ae5e6075cd78d934977751132c0b8a7f27b5ff1e868e20176523104e2346027c4ef3a6972ac756328dc5f1ce152b01f4861b507
+Entropy.6 = 70874faa74d1a1af882a3696ff2f409f9c2e0596cce1fb9c
+Nonce.6 = 77c498e0d51af0c6873645fd8889fc58
+AdditionalInputA.6 = e6ed210e045916cf1a691e36697122890485f2852a27851125eb17dbf5791f91
+AdditionalInputB.6 = 1f0d2959f9725604e6a13b7e2e0d72adc8bbdfb4a31b9b38bd8cae264d4dcb01
+Output.6 = b6ef9603ce5cb3b3de7687cc738832a11c398e7330aa552f678e132c71b7c020980c3cab473d17c84399ca192e6b2935de211e179f39aab30552c97e111ff3c2
+Entropy.7 = aa69949c605a8c997aa65076e8ceb63fc9d0af840ea873bb
+Nonce.7 = 6be6f89f549f0eb6dfd761f09bfbccb5
+AdditionalInputA.7 = fa180a06f07fcdcc95ff3711c348c15bae750b8cbd98e43abe61fe154f3f5cd5
+AdditionalInputB.7 = a559c3f7cc6044edc029a35bf02a3a96ad018386e1bd998af108c8fdba6f78a1
+Output.7 = a18f0ffec392706fc837c0a5321558086232f7f69470b6d299d32bba24a3b1d5441e27f08357b0e70f000c321b7081dcffad824de13047322df5f7f4af25843b
+Entropy.8 = d4176b63a9199739ff7d7f46203a4a01bfcc34fa7bd7019f
+Nonce.8 = 050601d50cd5044f978dfe9ee2695a44
+AdditionalInputA.8 = a76a67409e5164ea0abad62a418abd8cd2e729b63482f2aeafc0a3650ea8b952
+AdditionalInputB.8 = 83c9371055ee7fbb935483762e16e2d85dcd70e13497e69aab9ad35001627a4b
+Output.8 = e7b67e052c3b439742dc52289f3884534a0e85b83419308be0b4e632779b4c722a4d8bd38c8feb3a5c21330db1a2f5bd6ade1e0a7788139f9f0e52f2e01ef759
+Entropy.9 = e1aea3229c6c181e32af6500ae4db093d1d5700d647e2724
+Nonce.9 = 656c6242bb520a886409ca4f3af40a1c
+AdditionalInputA.9 = 57483f32653802b2bfc806d028f2b168271e55d49a436a5c4e89c20caa0ca107
+AdditionalInputB.9 = 5cc0202e9f5f19f4010b68de2b2c28c19941cec8cf31f59c299c8958e07cedd7
+Output.9 = 5bb5650ecb99682afef4ba87c22727ee7ab080bcab60f1576e4627f7e905a248d70029caf371ab5898823a35ee5b81182c24031dc3966d7c244b28803b363700
+Entropy.10 = 9cf92267969b13624a016afcbedc9964c071b6d57b9bc1aa
+Nonce.10 = 5fe0ed8becd3bbb44a0dfa8de9cb47ff
+AdditionalInputA.10 = 3a10c087cf4d09d13c933b73ce0cb23d35212a0980ca88a95f71c08261289924
+AdditionalInputB.10 = 23a3915160a4c8c22adb26a86e296f2363601244fbc8cfed0757f931e495a6b9
+Output.10 = 65ba2a31911a0098330ad914e79c714bb1b9a0061551f981f3de6a8808747372bed7b5ccb45381ab98b1c55659b023422b753983b2d3545598f311fd2acddb32
+Entropy.11 = f13da454a1a1685188ce402afc5f1ab8c23240b22c570fe8
+Nonce.11 = 654d75d103fbf3589a6664247f6f32d7
+AdditionalInputA.11 = 0f725842cc606197d3c3a37260fd24237198b7e486801d32a8e155ca22f81eac
+AdditionalInputB.11 = 788ee6cd543e8b1f69c698b4f9ccc33f76f66399e8bdf89ee2b629540ff75850
+Output.11 = ccf12479177bbecaf45850f230768c970191b71b98f4685f4798496c5c877bc7a5dae408862726aca4bbaff35c200896586a4ead493a4b4eb8afb01dedf6eacb
+Entropy.12 = ff6997355e8380c6f10ff052b18534be0d7e344d11ce6a37
+Nonce.12 = ae30f99ee7db3fb0a6be605f14a4a0f5
+AdditionalInputA.12 = d3aa9a02e50931cdb657e5ac565722eac769b17eca63ffe916928b526c586587
+AdditionalInputB.12 = 067940bcb6553af8db6e21fa49c9f9ba2227216422ae20ddf73b65a665cd81c4
+Output.12 = 0076b4664e83fbe693d51e312d92f41a29a79216c14dfa28f6c2ded9d0e69c6f512980c25d7238cfbe6a3923d30e2af3cbab7134c6537fe19991105e3dac894b
+Entropy.13 = f700bb6a92ecc9ee07d5c596bd667862455651b5e09cc716
+Nonce.13 = 41192c65d66ba5f09c032491a2c53ede
+AdditionalInputA.13 = 9e74825ca0c3f9ceb272150aa51f9f92e199f3133d919d4fa216119a1330e88d
+AdditionalInputB.13 = c59403870aa5b148ec6f99ff8b806569e99fa836750171787bcc8c8931aa82ac
+Output.13 = 32217ff9371a6cbf796c138f9ce3be658fba03df9c10cd3de09e82d1d9cec43a966ab864aaca56024e8b36463a312456b421b257663fa5d42adbfa4a54107965
+Entropy.14 = 1531b56bff3f34449674c5f9b310138a51721a40a463e5be
+Nonce.14 = eb7809f3f3ba6eb57775f1284fc29f54
+AdditionalInputA.14 = 85e6aa859f431daaafc9299ea61fcdcfde712fc2d01d94fe70cd0bc6dab7f3e9
+AdditionalInputB.14 = cb7fb3633f42659201026c634894ecc719c0003259a692837609ab90782ae23a
+Output.14 = 7445b812a7f5d3b8ba79f77a801afcdab823140e5eb4a66e50f8583d90dbaddee8697d37c0fd6247ec6a3bf7664018a58c042bc3b3be912e88c2be96b9c69e85
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 50134a638092b09e78708050dc4044e63c7abd2277be3d71
+Nonce.0 = da8807009d400482c6da8e4e9a4ee33c
+PersonalisationString.0 = 8e0153aabfd2ca2374bdd1e97ff23ee2e7dbff7e836fa5adb65764f7078df1b8
+Output.0 = 50273aa20febe82685d49a013e75a84bccc7c20128bd098a228c771d08bb5303e715fc30823dae085780d6d28d1071a26508130f3525b3bfd505f07575add874
+Entropy.1 = 9b6c7b1c729cebcaf4c4afb9a351d2f6d1b38affc35fdc2b
+Nonce.1 = d046715fee956fa5e1a9d1aaca6ed67e
+PersonalisationString.1 = 376b8873ca51209c93fbfb158996412bc6cd1f41e9a2093d9ed6fb91ca3ba2c7
+Output.1 = 05927feb60855127b4d6632f1217ef3072a03c03740fdc141e56360efcbbd55c5ef516e3913bb20dc4da9e7998b8b593e3a0215dc032241214a35e5e4dddf1a0
+Entropy.2 = 32f79c64904f65169277cf0eaad8cee6a613f92f0863b662
+Nonce.2 = f41907ab3dd3fc0c337581dbf3cf6a61
+PersonalisationString.2 = fe9baf7043f15c4ebe9330432dacdac1306d4237e765d5b826360aad3684a235
+Output.2 = a2ce0afe7fdbeb4ad195c4610cae406883b69cbc8548a82d122c4613a62eb36e986cafce10fc3200aef297a3dff01be3a5df6c8258c0a601d89188d5c065ce1e
+Entropy.3 = b7367a69f91c68c675648370285b0e486a3a970d12c581ac
+Nonce.3 = bd49967a92a0f3ca1731125d335f86d3
+PersonalisationString.3 = 5e7d45326c6e53f1902e0b5a314e59a04474781a1a4cd3dcf13be178ce737070
+Output.3 = 596f86a78c76d693a66bc07ed1f0d9fd3ba306fda4fb456e7dc6812996e2f7bae45795a90d9a92ab4e060d5b02e1507ac68149ebd6f237d3df2e40a9baf8918c
+Entropy.4 = b614aaf79922f83f67a4d49df5c2405fb5a97126fd792d80
+Nonce.4 = ccc186760d3633568a5e9f38c2db4ca0
+PersonalisationString.4 = 65347e04d7688d1b0b69a3b181613e6abc7803c64882bf62d410389530062e53
+Output.4 = 9d574ac67cc384a88b5aa15e656fe94bc80bb00bfee7fc79aa2fa7d98e6d8745c0381eab01063b1890edac7ef30e34b5dedfe9b1c7f21d484b2f470cbe7bac9d
+Entropy.5 = a4cfbfc89417d3559886fdaf388d60b78227aead26cd472f
+Nonce.5 = e18cd379480ef268552f748e9cc0f133
+PersonalisationString.5 = e6c492784242bc71c582e4bd79ccad4cf6b1124901ea7a4a601e91006786411a
+Output.5 = 05bd505020c3b16dffc511d625bdb36d46ca8a6aa1fae90154469a1c1a2cac50598accb994d0894026e4b383f0f31188a7989f98e9a732953c82a2ff32bf54ed
+Entropy.6 = fa72ab81a63ba4906776848ad1fbc672aec0983c9f09be1f
+Nonce.6 = 9d5f58709fd23fc230dbd833ac342d3f
+PersonalisationString.6 = a6ce15e6b2ce260f8fb5d3d6b92aa267e1a3236e0910be3a9a06c7ec86de5a58
+Output.6 = bd9b6f17c2a06a7fa742092f2da81f8249899d13f05b9bc63e3700f81689b1113e1d324e3b3412dcf2f85b469cbce44d259e7153339a4757f87031bf59003047
+Entropy.7 = 6f8bd57f523a9a7d1bff9e6e21d934b65e1c00f2b06917eb
+Nonce.7 = 74410e8f55fd7d8c6e58c281c9748add
+PersonalisationString.7 = 4b1663ae4b5758bd5703c9aeedd7c9740ce257f006bc7b68f90f71f63719f78a
+Output.7 = dc84d5ef8194fa6c897535880bf48476f1e53124b7ad7299cc1ff5e8567ed4d5041ba62a29b6324e4a6940ab8fbaf358e9aa2db45f1c2669b757eb3ee9b9ce70
+Entropy.8 = 18a2350350dc88058d9718335526a3925973d3692cec6c2d
+Nonce.8 = 8b0c043b89717aca319f96721e45f0eb
+PersonalisationString.8 = 385f0ddbe8a3d5ba480abb7ad54d2aaea12953df7be1d348fb388386be6651fa
+Output.8 = bf2745cc69c8e376fe2d60635cd2b7f1324b5829b3d23149eda916d1926161b2988b6d01434889126a5fbecac4bbf39ab352042fa0781a3b0b9d046cb9adbe9f
+Entropy.9 = cf2e38dd52041de7b448632bbc11a99479887d44f3ccfcaf
+Nonce.9 = 19c4296480caa9e1602e1c5e8f2136b2
+PersonalisationString.9 = 64d38be36626e85fda026a2add7f981b2e81449ebaf45bfbb580ab076265b161
+Output.9 = 687758f95c73928677235d46994e902313d4246101695359cd81bd035fdad3e8d8dc91d907630eeefcfa44445b00d1407149a1606edd7284afcab5c869d762fb
+Entropy.10 = 75b3f14996b08a9cb21111c10564f1242fbc7ec2c11456dd
+Nonce.10 = 87ac274bad1f347e053f5f242e5b2a49
+PersonalisationString.10 = 1d4b88abffd480bedf4e4fcbd86e2cd38c183c93f2efe6218e949763eafba981
+Output.10 = 8958443263f94b019634e37f7e5dec3b9fa7ce24d0bff61c5b8ee54d0f2991fd2af72ef93b822c55bdd2d20ed3a78905a8c601b4add98e6659b2174c458c2587
+Entropy.11 = 820ccc71e2472711e63d4458cc0b8466ba0a79c2439a8b9b
+Nonce.11 = 98ed21c67c7c8d19bc21837058306bc9
+PersonalisationString.11 = a3dff1630c7fee3d696a35fcb6754b63bdf16c0a849a540559eaf350a8a03a80
+Output.11 = 6701d42fd9be4a6ef9750a5ed6817fd16c06e3791f4e7ed6bf7e0784239eb55bbd5bf8bf757f739a53d9e2cecc85db1c35727ef098d19c09000a7fb63a836c68
+Entropy.12 = 2ab22f44ac4193b1111552d295e241edf37d6f4c28bbb3fc
+Nonce.12 = 83b2dda79e88acb5b9bff1bbf66f3878
+PersonalisationString.12 = a6b0a73204bc0dcc83fa2f480db371eb5b183daf5996edeaaeb09b821a516620
+Output.12 = 690e7f00c557f71429bc36425ed7d6215d0fc18129cc0f935ffb2bc4fb2c2b883d6d95ddcc071fff5ad1996609680a7cdcf5099c88371b6ac06508d352cb9105
+Entropy.13 = e5995b25b47412c2cb2ecd2a32b406124d90ba5e26e65b87
+Nonce.13 = 12643ea9fd5740a7386f5f6a01e6fe44
+PersonalisationString.13 = 3cef845315cd98322e2a28a44468cc14ab680503a6fa89ad4f876b0e2c4f3ca7
+Output.13 = 6129eda9ef3b9eb9f38fd8e9ca93e7319b6fded363ee155c979919c34b98ce399b0b4f99f2836f98ea84d52603f5790da52029a4e7cf8717db4a6222500d7d2a
+Entropy.14 = f81b4752d9b34fea628278beff929d179d0444a81b0e1b75
+Nonce.14 = ebe6e2743f5fd9c5b1bceb12f3f79c2b
+PersonalisationString.14 = d86a1d628bb83d738614a93c44c08d3717f803a27bee61be24b8edf52efcd368
+Output.14 = acd301c292bb6b801401ff9e3b6556fa1ca8061b99b8bd545b163318bb880228eeb4ee3ad56b2134337792862da251c5ac43c2a2a5d8cb38c18436839fbab4dc
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f3583f3c8b147a7ee992d5ca611e4785b772cb575a53a573
+Nonce.0 = eb1bcef5541aba8129cdaa8b233b60f0
+PersonalisationString.0 = 08c18b3c8f79eda3ba18fcd2711c86fd1d6a2842ea95f1d8961724012c0a6121
+AdditionalInputA.0 = 657d1df780a9b674b90cce0d49e2d5c0c01ed2d2d799f504348d86374576c404
+AdditionalInputB.0 = 94234f2b6c9f327cd823e753ec9c4de4119737af914dea5e57e0a50e3376135f
+Output.0 = 3c2e80e7211e6a19a27a53b4957165ed87d1edb662426fee9273ae0d85402ce2507cda18126c07fb201171f176b069d2d2a126af5fb31ce1d199978e3d11d771
+Entropy.1 = 4e008dc872a74a6a9d4c71c14a2d9b1aa7c05a03402ca181
+Nonce.1 = 33c50fa95f0d9d03bcc1de530e04440d
+PersonalisationString.1 = 578757749b8ebe442d93b62cb942278de5aa8909f914120a9058b2c341e886c8
+AdditionalInputA.1 = ea627cb9fe1a499e3bc1ae731aa3732b539397178898ba2dc40c04ae68504886
+AdditionalInputB.1 = 770acb690fd0ba83097193303d684405ddb3dd4f6770f0141d58046260e3f273
+Output.1 = b0e13af542c0777961cbec4c61c9b225a1210116cbc74eed6ea8b73e968c118fe60e360798a1779f07e00b3fd124f278b27f70046612021db8b8ad3292894064
+Entropy.2 = 0965a0ca7c1e684626a409d8cbed26730e8618bf7c2c7031
+Nonce.2 = 19c42055f5cd94df0fe3037af981550b
+PersonalisationString.2 = c9088b4b23a1bd96963e43e1e7742870b6b0ad58ace3326f1c7e675aff6e5397
+AdditionalInputA.2 = cf58273945a0c5262bb17e32d2dc7afa5ff919eeafeef7322ca02ca50553f491
+AdditionalInputB.2 = 9d64c2ef27dedae099a1016c1093715bd13687faa17242fea8bf2548a6dd7dfd
+Output.2 = 03a758952ac17a400ae97428baa641d7b9e3cddb163c1f381969b2095b5e0076c353c8f55460f162ae8523a52b46a01d5d2643ac81529e7fc773acdaf674ed37
+Entropy.3 = 0b74a0d14e2794d88b66170c90c4f921afa6e678d48a386a
+Nonce.3 = 2c380cbabd98443d6456eacf25ffdcfc
+PersonalisationString.3 = 110bf5b176d87a0a4e6c48282972854c3edebdd208c9a6a3ef520f93a21e1bbf
+AdditionalInputA.3 = 0eeeec359c4c7b155cd49171136514dea71ab8e435a122606ccc5040d4ce825b
+AdditionalInputB.3 = 9de0ef320288823b06ce81895e5723f13239d5269d507ccab6bcd96b3b9b3fbf
+Output.3 = 3fe112ccd44d50d5d54e33bdd6f112f1ef4caac069586dd4d89c64e69314e2efc3cb77aa5fe2086159abfe219efdf52b86704114755857d74c459af52285a44a
+Entropy.4 = fe01d064d298a16aa138bf10fe692ad6aaae53f519e6ad13
+Nonce.4 = 1432c24e78a24540dcb5914ee8510cfa
+PersonalisationString.4 = 769912bdd59bcd145c527e9c132c5eca56b2878f122c0e53fa3453140a2b4b01
+AdditionalInputA.4 = 300b9187402619f775ca2c5352a33a034ad80068cfef0fb1eaa7b576a0c910bd
+AdditionalInputB.4 = b6b176d06ce4fe189d8773f413f2592610637969ab9a1dde51960fcd4275fc80
+Output.4 = 98905c12c0e5c2e07b32617fac64343421fe697b18886a3344a4e62867732e90e2857504f753c11183fdb4dbe46e78fb74e5be32a672b8e5c699c345a84a6dcc
+Entropy.5 = 253836b5b8e1da4a96f201ecdccebc2f9aedb9f220ed2661
+Nonce.5 = 1e91b87468f3284a4e5508402a327425
+PersonalisationString.5 = 25e84e5921cd548c3895acb01dcdffc9a4792256f31d1adf30e089b6a40cd029
+AdditionalInputA.5 = 0b8b88d3c378736b6069490cc8f81b70b1c42dc7b630b5e8b5d257fa73da77cf
+AdditionalInputB.5 = e7925dbd1b6ec362f2b3941c34ad6cc9f09b7ee1e6c9ffd512054bdd403de0e1
+Output.5 = a43361dfe361979abff557f65006c52e7764a28f7d13697c94098552af400597893b9f02713f96d394bb17838f3c7bc8dcb7aa0332b7ef6b51deec7a2f381607
+Entropy.6 = 0ba8c30d69752395d3a6dd5c3d2eb17c984b40b40382ac84
+Nonce.6 = 607940f25e5db89a7b2da5d4ee79b846
+PersonalisationString.6 = 8774ab97c6fa938e49373e9483c1a18c8bf43d3e38f9b95e23ab0412245b8fb5
+AdditionalInputA.6 = 946ce7d8daf645bb0a218785c02461dbf4973af9f9b1b7709489e1b4e2f91bad
+AdditionalInputB.6 = 73def1104386d83ef8bc717e522b148ccaacd43a279b73c373a6d5a662f026a3
+Output.6 = 54be8daff4b65b032bfa523492061c46b5ce36b2646084474303d2622b006112dd186dce10c306856c2e88c1cedc404269b8924f92d8439730d647da55d60e9b
+Entropy.7 = 61910737799fa468a3f66dadaf56f4e3b8f798ca65ce0391
+Nonce.7 = 723399ac935869ce205d85509cc27842
+PersonalisationString.7 = 29e3ea51805c78fe849115c4b77361d75b1b9246e56c464166ac7e8d1ca8e3ab
+AdditionalInputA.7 = ab8aa035c71501c1f49dea7c678e02d69e2f843af74479367a386f684cc360db
+AdditionalInputB.7 = 22dcd9f03138f372b15f15ac6dc31d1357102ed4e803b6d384298e4cdeb2e901
+Output.7 = 01862e1d6fa11173609a182d6a5a73310c76dfa88d1ebff25ef45d5796bdf47a2bb6b9cf8817e6d76b70bf0b9e83d8b4a128bee06b6b0ee37b6021ad4722c4e7
+Entropy.8 = 6df209570ed20e3d9f13e96c29d2b014bca9b9fbeb5a32cf
+Nonce.8 = 531a31c87ec92ba06ef8a6db623cf3c0
+PersonalisationString.8 = f255703dc8cd5cebba0229e4315aeee86bee45aeb75279c0e120e44e46935b15
+AdditionalInputA.8 = 7e16032a6155c37c2469b73a2a50baa89653e9c1e7b25bdbf0675ca684ec8a05
+AdditionalInputB.8 = 956081c808ea4b9fd3c9880140cdbe41cb0aa039f0ffad1efcb94b41317ab321
+Output.8 = 5e8d8b4b79eb53422f926836ef78051f533b9318f61a625529b0adcc070d71d2efd33f6114db13cf26b6621fe856b708af48a67f3cb2ed8b9a92e0b73bfbce57
+Entropy.9 = 732ada297f8e2f254e5c3cd32758a700a4aa63ea353178f1
+Nonce.9 = 191f07c49993f6b4b249f6ad0d702d7f
+PersonalisationString.9 = 9a310d970daaff8ab0b26a0edd2aa2e5c40f833cd154218dd712b11c52934ab2
+AdditionalInputA.9 = a38c3e35c73f78b3816ee90b7d1316c424719047e104e30973f69610cb41408a
+AdditionalInputB.9 = 14aef44a84b7c021d4fcf38258cbfb95b107bff751b5405bf21e9d088fd72dab
+Output.9 = 8a840c6878671d31ac4384aa7e113b09744f6d89a09b0e5cb7cd1480fd894ea69e568d6ee831a9ef4b90db5277f6ee48ac66bbc37865687ced77f956a2cacf90
+Entropy.10 = 61d38395166174276138d643683b3e63d5909e5d15d7314a
+Nonce.10 = 21141ce419c9541d49bcffccf016d593
+PersonalisationString.10 = 63b3ac798991376923c1117108dd09627457b04f20eb063cacb4e0c56aeede43
+AdditionalInputA.10 = 1507f2570ac347e2593a77873ec2ab5086d9b3659fba3ca2bae60414219bd734
+AdditionalInputB.10 = c62c6791ec08e64be2fa59d2fa9e1749c186408554a055144e3ee92d7bf130bf
+Output.10 = ff3df533eeab7697ef668d301e9d6920b155d6781e4abdadb0efce4575a649d13297e0b2986940608c6557fe196d65b9aa4f642196ca836fd757e0c3c3cc5d1b
+Entropy.11 = a132a53244a784078800474cfee3d772cc00da9efb5aabce
+Nonce.11 = 6a299b43e7d671dfb2db27b79202f336
+PersonalisationString.11 = f3f6e2ffc0240688faa12bfc60cb28719b8c4ffc420fe91329cf0fa792e32eda
+AdditionalInputA.11 = 137e39e2d8b65cac5a654b00a9fce38252162edb4eecc7920755bffc96a5d641
+AdditionalInputB.11 = 98b6e417616f3cfe409000872865f4d08fb0322bdda45ef1cb7000fa45266b20
+Output.11 = 9a1bad8d87777f45f9cb8bde14c7eaaacd9374b974264e14d1ba31ec59983a3590741ddf6c85e993ffb7b85035202d24f10683a53e87ac9202f55d8b991891c9
+Entropy.12 = 44402cfdbab2134dfe825606d2a8e1a492c76084f1245431
+Nonce.12 = 312985427cf3c3e4e1498f596630d0e6
+PersonalisationString.12 = f333e29a3a03e7011c0585bd95bfd819b84032a8e0549cdbd0e11af16bcb693e
+AdditionalInputA.12 = 9b3c033e3743732c9ece7df941d1ae4bce7e66310c3175824e6ec6e82c02c6a1
+AdditionalInputB.12 = 9cd39cdd2d43740f3034736359e89b7a78d25bd18ace9a14df1c36ce7dde505c
+Output.12 = e584a046494b5076757643ba84c7a7e08c0045fca4325c3f9c58f66624526cd43a128d1054f81b3c4b6f5735f3fb6f33d2825062ec27053f4d0de241ccf74ac8
+Entropy.13 = 33bab5bb7c0137ed68bbb98b2e165dc92477e24ccad60c3c
+Nonce.13 = 72006a08653c6b837fe202438baa4389
+PersonalisationString.13 = 098f896620ff0e4143797c1c6be81c625ed37f79bc05a2d3018459097fd140b4
+AdditionalInputA.13 = c2a289d218dcd280e6a882e30e182da6a13fd0963685b3a9afcaae8ae3acad69
+AdditionalInputB.13 = 361acb27f5014080a9e521e0420dfd58e9209111df3b1bc77bef235515818872
+Output.13 = b007aeb87b4785815cf0b546ff25dcf5bf96b3faa88df8e45a12b788c47400ceab79d961c9d65bc475b56abff9ba1d0e3a5ff5fe56fbda06cdbd7102a2725aaa
+Entropy.14 = c6e80e41a52487d626a44eebc435a1a415da625368fffaab
+Nonce.14 = 8eb60935a59e8d55fe8266b43419d105
+PersonalisationString.14 = cc8042c0be1c212773c7d6e5d86182dee81cde58703e9b1d6ed08b664e04779c
+AdditionalInputA.14 = 2112e9f216eefdaee0c37f6b5ccdd00cdc8091a28d094e567b697109a7110b7e
+AdditionalInputB.14 = 4c32954a5ca0450378f5907b6ea0be770e40797080a057b1a14b4536e389de98
+Output.14 = a51d5f661bb1d50f2aaeb0b8b7af406142a1135778462b802016c5e32ba5563add2744d62c82c1df91e6a91dbaa95328763d2320ac6c20b424aa729d2b1c1a44
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 4d5be91999c1dc6ae2e5f6deb563b125bc8439e85f2576fc
+Nonce.0 = 11e1c2d4d4f73b9c457fcaa06f4af22e
+Output.0 = 53c2c0237edf9425842ab91c63723616e98bb6c12d16bf8087772d0a080d289f8b4f35dfdaef5b11cd588814c6bc01dc7e23b9bdd39c0aee7407f71054a7c9aa
+Entropy.1 = 24d8c60f62908b4474b6a01ec88c995b357f82e20d21c8f5
+Nonce.1 = 45cb534e0ea5c1b1a75e6a66d990c715
+Output.1 = 86a1deb9a32863f713c3e6aea81504c7ec766d0b7e5aa800ef0b449cc33408c7f87e712cfd58842c905f8a262a4e2af745fa584b370b17e2af89fcb73d399cf3
+Entropy.2 = 3354a953f8e6cc3b64a89fa74bcb45971f14c4d1f79cf94a
+Nonce.2 = d2a8307d9659fd46a073eb33f3481ab7
+Output.2 = f6423332c2b0d7b6edbd09e590207bfbeca62b4e8d80e819d6773411b361ac63c58d587d6ebbae5e0a211d1ff8de7f901df1533738256e44edaa2bb7c1a14e0e
+Entropy.3 = 931837f96b3be2587ce637e332a7c4441737f9bf9b4a5a33
+Nonce.3 = dbab3e4eecb453a16cea08d6fafc2f36
+Output.3 = a8464a65fd942c2beea20295cd25560121080fb69cdcb4559aded0c670c82838f6ba46b00f5d5935cc77a14a8c4eda02ae198ea87c9c98204d38a66a8c686f67
+Entropy.4 = 550182725f545e7cd4fd7b977f587451117cc731925ba27c
+Nonce.4 = de0fc3bf40b61edcc31e0ce6f2011cda
+Output.4 = ea0dfb57cf5019c73f58618fc0003140a36ed687ac1451a5bde09050aa1b2f6fd1cd337db438ca795984ca6a2b935617d9846699d99b6978fe878c12c3c8f9c9
+Entropy.5 = 39c7cd1d9862133a1ad4d45592116c0e09896fa668adc78a
+Nonce.5 = d087829252bf38393cd00f87f74df4ca
+Output.5 = f49021cd8570718583ed21ec55468b4c45f87a7b8ff6dd5172d937d6e9d9b4086a759aad927ef9e8b7c2659b0f06c2a4f8e35ed8b671470d9dc61b031d7d1782
+Entropy.6 = 88fa538aebf8349074eeb45d9567a900c1c97643b79a2c16
+Nonce.6 = bb416691b86362fc9677e3fe50d157a9
+Output.6 = 9ef31cf931f21d89868eaa245ff048146059684e2fa5619a440f1d8a195500355fe394afe3d3f9ec45d206b37fd8fb475bdb1ac8800ce54f04c99403eb76edee
+Entropy.7 = 81a8b2192d59a25d5480465e508c11931a1ae5a427f6d117
+Nonce.7 = 1b610df5af73b70e85d97c159a13bc71
+Output.7 = cb0bab82b91a727ca3e104b9eacae08605e06d18eea0ee2c71ebabde5c98ccca7edb4793836a65f2838b8283cf4adf49fa1f38368776e5ba4ef7c51437888fdf
+Entropy.8 = a49585ca40ea9800208abef703a4c20bd3c4ca596525682a
+Nonce.8 = 11f7e4630dc96e2e4a356f8effe8eef6
+Output.8 = 633a6728bf6216ea303f3b27e4faa52d2da4768e6e7ced7dcd33d4df25ad03e91f5ae9e9e1f19c4dad74e3a1ede15284afccf5148f188b95a0567670e206eca8
+Entropy.9 = bde53ca3e0b0116b611915a3bea801418014734088639cdd
+Nonce.9 = 71b4993cafd868ac209db722cb757fbc
+Output.9 = 6cf1dc5214af97c1c6d43c31ace40cedbf3c32bc7f8d6928bcb613b6a9b37011d40a16e8739b2fbafdfe7747c8d5163dc4223ce3303532c719abb169e69d3db9
+Entropy.10 = 1240c07f0c42da183ebf8f4413ab316a88246166aa7bb759
+Nonce.10 = 6e529d4e92477579d07fb9d2de054d8b
+Output.10 = dcdfa1a5733e5bec22a24c01b6d46ae10209351240dbb42686bca8117daaa2287326942021f198ec6bd2fd634fe8ccd24a562c48297630f9f718623bca0a64d7
+Entropy.11 = 72ed4b06e75b59c6fbd17bc726c2e92a220162bc6c1ffeb5
+Nonce.11 = 466eeb265fa147ea1f773f98087fbb83
+Output.11 = 46c356174b28ae3a903071643abced784b3168bb20a78a082abc3c8d76ab53673cec2181d40a4294cffcc8a2fa43b89bcb962f5ef3300e7df500fb0c96be858a
+Entropy.12 = c447b5eec41e14a9ce9bbd8593e8a7c0f5559f4b0e117688
+Nonce.12 = 4655d3c78caa1c1cfe6d6e1166468b28
+Output.12 = 68d41fe28bdb7de4a761cb6004ecedfa310946075092111e806beed634ff540c38987f16a89be52d35e30759030cbca240bbe9a5dbbff19d150be3a2296b8ceb
+Entropy.13 = 2404f9870945bd404fe184b119a8a30371aefa8015d455cc
+Nonce.13 = e5fd16641728b4d46e3f0a43ae348440
+Output.13 = ea4bc0dec0f1a61cf2ac890d0c7d8db4293291486d65f3ed8b5f758eeee9d5deed2a1d0506febe20bfd18b680c5a8d777c6b3bbb8ca1bffa0f105ee7c1507359
+Entropy.14 = 4570ff9ab92e5b694b8aceb3d765f4872f2ea6ad7707c510
+Nonce.14 = a3461bc17d5db692f8cdd8cf791862b5
+Output.14 = b7761d9300a2218b283b55ce29b43c4e7a63fcc9b1d0c1686efd8d5f0e4031c2dc745f58a50b35be81fcd5e97d70f896b17d3a642a30ba56725d0adef142efd6
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 52694c7cf70fd3d207d2e7ef192a049df320e7f9191b93c4
+Nonce.0 = ffc0c8e16841ec384c08b3ccd8160331
+AdditionalInputA.0 = 287bba8bc6dfbd836a21cb3dda678d3d7ba41c5dfe08bdb356d93072528285e4
+AdditionalInputB.0 = 1eea341ff81f90583affaa27659e2b06e3e062068ca4f1b40859a92299a6b490
+Output.0 = b3175692eca9d7fe5ebab6dc5d12c3d1105e46737ce6fec89b2663effdb41a8f85f983151ae4dbf70020853f484fd1e96d743d5f6cc415685890a0e3f25e3b69
+Entropy.1 = 0ff3d4275ede36d4e29c42b17ed1df14de2e77949af55eb7
+Nonce.1 = ac33ac970a2475b91f0a3bdef178bfd4
+AdditionalInputA.1 = d39fde814ea3a67e3b33e325ab5e0553aa9a0f3014a74fed1b030219542fb045
+AdditionalInputB.1 = 1a1fc9242e3ec8712567e780df058306001e6e10d5b6e4c21c6c1793149034d3
+Output.1 = d212926f2763527466ff7511dc56cf1178eb4150c5f647bf2c9c1505c018f271af3a1bae45619f1307c181bedfc362af3461c60367af08a322f367b32b0e0c1d
+Entropy.2 = 713263cb43597766c7a925381c3ece46c126a4733b0bb5d9
+Nonce.2 = 58fa565573a9e9c72e22e5ebb2beb818
+AdditionalInputA.2 = 6673260a5878b3da0bc697b672d98c363e80e255588efe7960030cdfb5874c81
+AdditionalInputB.2 = b42d33c103eacbe8a2dc67cb5f48576e9bc896daf091a8339b0f044c20c72c8a
+Output.2 = 6dfb113e16aaeb3919135827317fbdc283e06680dd4c838109d3734b35fd442d7fb73e1983d74b1e3b4da8e59ea021e92961c704b6627f15e8beb5a3224b3618
+Entropy.3 = 260808c88f5f6be111b683f6f2974fb5bbb49e3d90383b7f
+Nonce.3 = c5a8b87066116d0bd8ae393025db35cc
+AdditionalInputA.3 = 06b626abc966d963067f0fd93a84ed71016239e79f636fe909672ae84ff36fa0
+AdditionalInputB.3 = 3e32726ba55df915e0fb032df029dc96d429cb5f458b08e5be0b1c283392bbe1
+Output.3 = b8febbd2887ba69e3fcb078aaeffbd9b7908618024e603527cbe74c0f99d6f40a0e86518acd9f9f7c34b3f11783a7278fec3c3b6d407e15a8984584323113de1
+Entropy.4 = d581d9cafb39adbd2bca4afa483acc399d4eb47bc760d843
+Nonce.4 = 36432c597e6cd8fb70da84b25d8dccc9
+AdditionalInputA.4 = 9c27f4750a9b55320d4515f2e3528148fc02d48f848224123ad6e967ff6a4350
+AdditionalInputB.4 = c7bfef3c24552cd466f2a5923c134e56e9d17255b49c8b0f2c815f01fd72c4e0
+Output.4 = fc9980b65006c649349f77b469e40fb0b803b2a7e0c14adcd40a4ae651bbd1e18df6b8a1c1a028ceb43c26278b43b90de61758374f2c60ba663ef04eddc31748
+Entropy.5 = 41ed09a74fe775bb0824a7820883337ae493b9aaa71b41aa
+Nonce.5 = 9b3fa2de238c611bfc348f0794b9f865
+AdditionalInputA.5 = 276cd3d2787745c9f893e7d097c4552f3a0f29977c33e6587ad132594089b6c0
+AdditionalInputB.5 = f913367e39cd59b7f43d8a7940578f8a6519dbe6e07ac2ccb118453ed0284332
+Output.5 = eb9027bb00a4796112282d147b6ddeafb4673b83810068df53b0bc8dda0a0bb7651d2a38d6d19293a0e0170efe4ef8825db8c7da6b48554cdf68104dfe31c846
+Entropy.6 = d8e927d938bfca29761cd63a09c2e609a9e5035591c21baa
+Nonce.6 = 1957db127181d051fcee6fb87f7c8689
+AdditionalInputA.6 = fa05832a2d881470c9a66602c9ef0a9f3c9aebff5c9233d07ea4ee4659a5dff4
+AdditionalInputB.6 = f6b235fc524a46d6fa71ebcca27c3f0c0f3666216fdf89d25c45b27b99a7ac63
+Output.6 = bb51e9bb1985394b447653d14461296f804b01fd79429b83564e97908a3db0f54c5af1a543c7138e478ca4d795b08cd12c772600ab0f78c50cf27c05f51e0afb
+Entropy.7 = 6a5881e09d36d466a1667f6259eae927e18157d3310ba1b6
+Nonce.7 = fd9a1c82d4ed4cd7cc4a52ebd1616f90
+AdditionalInputA.7 = 8297d7026e8761466ef88e2823b29ff8ad1bf74cbe6a553432d359fce920ccb9
+AdditionalInputB.7 = 3d4b7b9938d7717feaa30c7d4907f38ac282702cb5292d96e72332800a408679
+Output.7 = 97e5b0dab9742caaf5170e1723d5c39fc7118c72e1cb48e5974659f49954efb76f6b9662b8b4ccfbf6e94a792ad145a605b0c6c343026cba79f5cd10bdc86648
+Entropy.8 = 2cc479700f909e7ba2677f3e9012819dbda2bfa96bbf0e71
+Nonce.8 = 362bb10b3e7f8c3fb3e4296b2371d450
+AdditionalInputA.8 = 9dd46ba214565be1d6ec71d5faa92b458b70e8998a2e60abf428fb1796c59651
+AdditionalInputB.8 = f40e36ed1005e8c4468d9f934fbcf46b342e5745309fa4004c150bd4fb2b1e71
+Output.8 = cb69c36935620c7a2340d672b559be58ccaa82ed451a3f8ea4fc06a99c589b9617671dbf265ab9bfb9c557dc6f6a701ba0cbc5030e085af16bc9738678cc31b4
+Entropy.9 = cd60f9aa04b832b6a76ac43c52760925fa8e9d99592bddef
+Nonce.9 = 1294997f49248adc70540c18e8ede470
+AdditionalInputA.9 = af6ce37c50c92759373d5206628f747c169153eabf804d2540c1c17764ae538e
+AdditionalInputB.9 = fa2e5a762dd56096230ba83443fd16c8bf6da0f5aa07be0e522d85b7fec88e96
+Output.9 = cb38aa9a8b893eefb8819b4173471b983e64dd7ff62092d40c2202a12e07013672840804d8f49a174ab073b293c663d0182fe0035f80e1d882198b4e49fe7010
+Entropy.10 = 6931cd18a6c772ce1ad6b1ff80461110b314c9c1b27d6e5d
+Nonce.10 = 4f3c93d404b1a20b835e5012e12a654f
+AdditionalInputA.10 = 3c48211e1f5962d1ad49bb7636ab182e8b8495e2ffd317fd085269509508c461
+AdditionalInputB.10 = aa0a70031af5fedc2c00605e5b6e4b9259fd1421446352034a4a4c8016e3e016
+Output.10 = a449f3781a4884349210c9d3f694f1a63871605fb07ad302a2c2cd16d7c644ea7eb5fcbc27b12ad6a4b75c84e2badd4f0a06622164bce3edc4be8a35ba6c197b
+Entropy.11 = 5929c6c6c563dc6b854cd71c3a2e9c8f36886bdf2446b11f
+Nonce.11 = 366e9cc6900744a7fd31ed92f5785d2b
+AdditionalInputA.11 = dcc1532d3d9348807c1917a45139d7345d15a8d9c7a6a18c826945e82b0b8a5e
+AdditionalInputB.11 = 4022bc66f18160eb8a872376ba998bbc400031b7b905031a3847d4ec0df957cf
+Output.11 = 362ff3df4d563fcab2730bb1932f2791991e50e246821a7468a2eb1acf55d330cd13ba999c5852e81d58c3c8e63848bfa6b2433de453a0da6c7997a6000c9fc3
+Entropy.12 = 61ae1d520054096842c17ab70c60a278480aaed299575e59
+Nonce.12 = 9abcbdbe260a6419c78770615da54c03
+AdditionalInputA.12 = 0e5b2a49f3445199cbbeca363b023f4a2954c3e567cbfc33f1b29fbc7420b189
+AdditionalInputB.12 = a2ffe563dd1750bb3e07f2c498ef18a6c4f22453d9abc99355509c42ed011960
+Output.12 = 7bec6daa15ef65817249044d375fbd98573acdacb2114678d411589e44b71cccdfa7bd50695add947b0ebb58b738386537b63440ee84b77f37e0c45877430c70
+Entropy.13 = b6735d760d4dcaa57daefc5bdbf0b5a94f2e6bc4a360804b
+Nonce.13 = d0a8bcefaa6d9f4b6afd4c8ad4276ef0
+AdditionalInputA.13 = 75619ee0b4f2601d5f1cb0833f325e3a7b5921481752e122c8786ddc33a38a27
+AdditionalInputB.13 = 1360b2000780376f0aed1aeffa3c26e6c29d30b0740de14bbfe931e5f1aaa968
+Output.13 = ae3bb82bfbd1f48c33e1eb0b96ca850c3505a75bf3fb07bbade7a2c17bd1b04d8af5ed1a5c71566ca2c05135c4128a0e6e8e9a27b37a76c9f708db027f94801c
+Entropy.14 = bb90e53c1240d658406d7c85c0ff23d7474a676a5920b0e1
+Nonce.14 = 4802e02adcc5a1504d6dde82b6f20a67
+AdditionalInputA.14 = fb2b976d694df3fc2b32a33f7c989683f50c4cfce6168ad1ab9d1a79d5f59d3c
+AdditionalInputB.14 = 6c78610daf6ea426641be56280cd623e8b11dd967ac6154f04a6d4a6c749c957
+Output.14 = 97e3560157ab4342e762480727d5505a72293e13531c62ea7072b2acf8f72ea8ced09cbf9ecb9e9d6da616fb8ca0613809388ee915aacb59cb3627e3f0c389df
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = a79943342377ca018559d0886d43dfe018d630590db1023b
+Nonce.0 = 1b96f22bd66179f593809db90fdfa614
+PersonalisationString.0 = 5bedfc44b372884452367229f1f67e93bc447f8fbee044c31e10967ef0120c6d
+Output.0 = 49ebb36afd563e0772ed7dc8ecbbeeba47ccbabfd0beebb5c99c9771e2df9a33e19c4bb716449eb5e9b66739bdca2ee8ca217ecc1c4ff6c034cdfcadb8f1c7da
+Entropy.1 = c37bcfc799b1a751ca6fc1fdec292ae8cd3a59b615828c89
+Nonce.1 = 26eb7bb685e4e912e474115b19fab4a2
+PersonalisationString.1 = 027ca35a2ad52c9eb87307ac2b4dd0459ab5fef874cd25342752888c1dba6321
+Output.1 = 0db0ad15bee89b26ff32ad9b3e5eea25b3026a0e76e85d576a17400e00e38b82883dd01d43038ce6b5645de58f3d08a238b858978de40906a88908925a91820d
+Entropy.2 = 5fd9fde95f759685da08af67d9d84aa0d332235a0d3245e7
+Nonce.2 = 1d30eb84edd4487ca3be0f08f81c8afc
+PersonalisationString.2 = 2ae91ad3bbae3f5f80e180b7e94ae501901c015fb12f50d8ac8f2ac2150aa2b6
+Output.2 = 2aa5b7ef58745946eccfaf9ce1e28c036ad4e99ed5051b51c57466eab0ad0831cfa014426c2c3d4be70f0ec77e0243409dacb87ed340af0b8e39456120640eb9
+Entropy.3 = b06bb14cce0db3f41af3e77910361e7785427c8302ddbdf4
+Nonce.3 = f39d39c305d1727f7dcb6294cafc3045
+PersonalisationString.3 = 0676b68f21a6c2895211ce127a5748a0050eebec08044ee2fe2693be05e223e8
+Output.3 = bde9735f36b8d8afe8ac76a971ec9466065d22e1885e75db61ca116628106beb15dde7e5e1c486e4cc66056ee1570cd5349b6c628094c9506752de9f3da95f8a
+Entropy.4 = c2109a5344628ffa5c43460e9e385f4ea4c07aa401ec981e
+Nonce.4 = d242bbb3ba282b9bb0d3648aee33f699
+PersonalisationString.4 = 00333cfe95af5ecb99f9ab6986762ad2d2f7702aa5ec5cefc43177eeb3b33ddb
+Output.4 = f8c4ed2c6d7f323828c5e9e50c8631e135d1ca04173eaf15036af8250ef09bdd595d03a776ae066da462c631fc6a66eab375fb0e2ede9a3b5083980f4ff810c9
+Entropy.5 = b7a90d58f3650814ad99d308b23c79d93657c73d2ded5412
+Nonce.5 = 8ae96938dffcccefc8d5f934753fd670
+PersonalisationString.5 = e319f45111cea35290b077302bd3b5d45b0f7c5e9e1d9729dd2fccc758855c3a
+Output.5 = 7bb131479e6064c7767e17af46d528e4b659c7fabf906c0a7679dd8afdd4aaf104f8e7caab9153652a30e38f80dae10e67caf302bf117104949649c7b20f5d38
+Entropy.6 = 7618e5546a5981cb4c72a517f29a5fe8886d4d3e9ad9fcb0
+Nonce.6 = d475704c10c4a1866bcaa412e6bfbe7d
+PersonalisationString.6 = ae8c3cde39ed90da31b7320cf35969fde8f82894e222ec2e8aa15d67b55efd89
+Output.6 = 753048b2879abd1a0cf2426f1e1b041fcb6ba3f0710ee8ec410d792fb32bd66b1bac95af81a30901f7bdd42e5f8fe6cd28623fdee9c589bc47de1c6a290bec62
+Entropy.7 = 1d38d2430e12932da3c38f44930c1a2ff4a62eafaf8c856f
+Nonce.7 = 1885f3bd339f2c96595c3b6d998e5083
+PersonalisationString.7 = 430c7871901e1656e08fb35eb4ec43984937a75af596c94586a8f02af12b7fc3
+Output.7 = 9ec5998142379d14896451024fec60853418a3ef59d3a6bd3ff1592826b11372f321a98c54d1bf8225bb64ec2f2f4f46ed642aeaf28eb20bc993e6d684fa33de
+Entropy.8 = abb6b76806813c2273aa8ed476af0074a7a473ea548cc1ef
+Nonce.8 = d99177343ea3837f92d9c7367a70433e
+PersonalisationString.8 = ef6b87661f2a678ad2d4dc85ba0845ec8eeafa2b82b8aeda4fc61938a8dd6077
+Output.8 = 811ac88d4c9615b535b0f72a9f49107baca239a13f26b97ba733e4af3a24db8a658275ee2416c02f5968c22d13aa6255deb098145105226f4aa80ae3df8c1bfd
+Entropy.9 = defc7c59d78e50c41232f7bebfc5e9408cea266fc1e3c5c8
+Nonce.9 = 9ffa0df69793bb6d9e7d78ebaf46f6a7
+PersonalisationString.9 = 98b3fab2ffe547ec1a418ed98ae7ac669c0701178be655a6faf9962d80aee951
+Output.9 = a9e6820bf83a8b294146fce2d194019a9959cc584729d67dc71742391060ec6b24d685e545807b1ca9d8a28b68e76af256d435f6f831636c332a7f13807b1f35
+Entropy.10 = 6cfaafb31b1d6a6b9bed1de9a993b70fa14dc61fa17ab1d0
+Nonce.10 = add461048ff69753f887ab87b74c25ed
+PersonalisationString.10 = e2dedfe6b70fd426348b9838b63f01d5211820bfba78a219a88b9b67adbfa452
+Output.10 = c60fcf4d362c923bbb70da806c92651b239e32752bf437669a39fa5e24d8a304668bac92ba128a8b7e02df00ba178f76de44b656f3451f21250de778e0405f14
+Entropy.11 = 9009148dfc32c4cd2e6709c54a93f57aa75a930a395bf201
+Nonce.11 = b28dfc3c6b339eb8bbaf29e5f8198b4e
+PersonalisationString.11 = ebb2e330a05d1eaafc5116e9376220732ccf091e1b0e4017faa94346a83945c6
+Output.11 = 43c31ac49de9f8e774dfc8e437e40a87e42529e625bdbd10bf77bc0a8174fb9dd08f6edd308c6eeba3175bd3496da11436de612a6d47f5d9e26339ebecda649d
+Entropy.12 = f3f4e1abac5587f2a8409b1a227f9c92416f6567049501db
+Nonce.12 = c1979637e6b4d04bc970d37e11cdebb5
+PersonalisationString.12 = 3d491631d74d3d908ac58cc47481b5e0964bb21922061cfebd833820e912a00b
+Output.12 = 90eddd439eed53799ea574c9238473fff030381e1a48545bc07bb2cc9bb2d0eaf23a23f009881d1c2464e6b39f02305b3214d89932f8c237964982c9a7adcbfb
+Entropy.13 = dc2465257d558989a340263faa86ef3f98e8a9fb539804a9
+Nonce.13 = 1ca1608ef5f26bdfbbb1b506fd772426
+PersonalisationString.13 = db9ba18286429465f73b35739e6c987e07c0397dd603e036853c546e4993fe89
+Output.13 = fd35ffc43051435712374ad903a4655b36d3754d78551c3f48d70494744ee2f336bd19b780c8cb6e5de4a667117d1fb6b81f03d3620bb5be1802152842c6973e
+Entropy.14 = 1bebd5d876e0949d1d8deb410d3a779ced95e70c0b4ad531
+Nonce.14 = 4c1db08871719623eab2a24fcb8fca1c
+PersonalisationString.14 = f73f41c6146f2c3d6ade95462a70f123b9604bea02fdca6b1154c1f86b899b48
+Output.14 = 4a0e35cf6a1e199e56fc6b5f3784b28c1ac70e91fd74d8a7ef45a168b3aad28f324411ee886bb739bb814d5ba1dd794a0d372eed5f4a971a0c5542b947c4e977
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 05e734b2b1287f827394228f8140dac050adb821bd37c4e2
+Nonce.0 = c541ecbe12d300c14a7c9fe90e38b1ab
+PersonalisationString.0 = 018b8e3d285b9f7b928cc819c576fa21692c52ff7166dae7b8af7854cd3f8ef4
+AdditionalInputA.0 = 1fd8d37b2ea6b20d7474d95cac5881a69a1266badc49c0da8be295f3df6afb5e
+AdditionalInputB.0 = 9726732432e1567e5d9e53554bcb886f129c8007da9e68b325bf16ab740f540e
+Output.0 = 3cc1ec092923a2ba7fca0dbf543cceb9b761c61cadd02335df361bc42534c9b01373c8e513b069ef77dd0ff8e4623ecfd12f290a2845b8e7a1f2eb97547a16cc
+Entropy.1 = 0a07b4893adc1d05f2e6f461a717c3b4ed12f9dc6ab1eec0
+Nonce.1 = 900adaadf90ef5856784ea86057b5714
+PersonalisationString.1 = 121e2ead8da5b5cbc840856c136e9458e65b536a5131015e8ef4eb167aa1f964
+AdditionalInputA.1 = 4b797858377329b19a694a320deca09269bcee49611f7ed6f40eb94599f420b6
+AdditionalInputB.1 = fb4eb21d67cbbe06b996cf80cab0cbbd61e9cf358048778ebc50520e5fb01bb2
+Output.1 = fcf3aa35d14d2bf7fcc6b46460b50d6bc9eeb7b117aeeff455022da6eb32aa3b3e9bf7db05d244a8a6bdbbee4a73a96e9b3ac8f19aa60ab119f00bcacf61dd13
+Entropy.2 = 819828bbcbc1d95b729ea4bde27c4a787f49e1670ff7a5a2
+Nonce.2 = f88a9ce08c1086a65e4995801862acb5
+PersonalisationString.2 = 7c6319e488820fb9e0497b0b2df4dd7d8e1bfb4c21ead3af74471c4dba63f597
+AdditionalInputA.2 = 664d25832d57302fe875e6adebacfa825ffef394f60856bc21f762074d34917d
+AdditionalInputB.2 = 2a6cfa710ec9202b30e276e18db6999e245b7689d3ff9afe1a796272ce86fe4c
+Output.2 = 58534c9caaaef547cc5b6e602c09a52b048c96d1eb03c1a17d3d8de2ca86edf40facd99a06cf8d2254d3a05cb8071bf85d541408280194650e5c77643bbcf8ea
+Entropy.3 = 0a481ed8c99e58d33461e03600a7d65e36eafaa345ca07a8
+Nonce.3 = 108b1904648fae516f4a1b60feae9e8f
+PersonalisationString.3 = bff99fddca34d08d7708440030f9f4e7555e5aeb616015cfc8e6b8599dac9164
+AdditionalInputA.3 = 9f8c9195e52ab051eb948f02e5972c5bbdb1a9384a2782e0c83a45d20c6a8cf7
+AdditionalInputB.3 = 886160ff534f3a4ed97f43386793dec5aab86ae77b30d1373b556e8bf92772ff
+Output.3 = 41aa8a43480ee97c72e3e01435d4d341f231cdc519e8825e0f98fb63d7e9f71bc42c90fc203fcc875ab9e11dbb40a3aa9eaa6e1b01cff5ed7265708a21082942
+Entropy.4 = e41f2de0aac40dd3ae6517fef3c19c2048b431b7704c6076
+Nonce.4 = 14dc27f46cc0aa6c35f0a660850b1fef
+PersonalisationString.4 = de24a9d56b0c0bc4b3a91c624324fc98b6f660c30ad9c204a7b02feef6bff03e
+AdditionalInputA.4 = a244cb28a130ca5331fb2411634b809d32408ed745b2e38c4b901a955e1e24c3
+AdditionalInputB.4 = ebf7f187ad03a39133175ff9096a04b72efb0ffb099dbf16c53dfb6f6182e3bb
+Output.4 = a0e7adcc6a7e3665612117cfc15620e569add31c029c1dc1a79f072123fcc542b397a2e7044a983dafe362805985ffc164ff83c56821a92ecda331551aa7f7b9
+Entropy.5 = 4b55f7fbed3bab6e29ebbbc576853eac83c93e02acd6442d
+Nonce.5 = 5e4ca3e9f80a16f578ab7d63301a528a
+PersonalisationString.5 = f4d411070a57e60a17a663bd78ec2725b780cca28147612951988c152f2e279f
+AdditionalInputA.5 = 9499e3504d863804280e32720893b8e5e73e3962591ec6d834b497423890bec6
+AdditionalInputB.5 = 2488bf773c153d854c2b72a02191579264f784c29a509e0c4ec19746ca9848a0
+Output.5 = 7d1aa330dfcfac157af91e6752129c3ec8029bf8ad5437c4c014406248102c0ce095b6b27f252ae312f49f11985e673d9cc7b2ac181a3044dc0fb5e6ad7a1d6a
+Entropy.6 = d5ac195a47314d9f105b29187d283c6d24c44c705400641d
+Nonce.6 = ea92b73efc5431add6ca2ae87d9baa31
+PersonalisationString.6 = 6e2b8589c490e048413f0d88c551047e3de7ffc7cf43dc9d35db9327b35ab970
+AdditionalInputA.6 = 51ed74bdd75585c2145cc2384862f34ed0b40c3044ac60487ee10befafd5b16b
+AdditionalInputB.6 = 894aa50d05a40e5bff4814e75686e342004a660e2e4dc7363ed72888b792c0c5
+Output.6 = cc3ce394cb025bcff436e6a6c2f803767ea8edff8905a23be4239e64c2826e54bee2eab1b14fe44a682d1513c4053b2e4699b18ad1c3c25ef1a5e422730acafd
+Entropy.7 = 8b5dd1e89fa97c9d084f277e2ec583bb305c6b4d0737d7cf
+Nonce.7 = 15ab99d15ea11281d0fdcfd744f964d0
+PersonalisationString.7 = c2bf9e13b3b71094ea1a84a436a0ce25e532c2a5d9e62312f967f4fd06204d13
+AdditionalInputA.7 = fe60ba406bf63784a0f8019c8f62e525f2b84447b97d8587dacd67b690b3d8a8
+AdditionalInputB.7 = 498dec11e7cd556a1207dc379c03138ef680ba5699e46866a397f1f4b910b2e2
+Output.7 = cad4224e7177afe9f68496b7de52376d8e71807b2b3af4e97e8185f5be912f85d33dda07ee48993f223e4bd94d1a45eaa274448ea73959860163169439a25aa6
+Entropy.8 = 78d2e921656db1698dcfd2bb94e948acb759ffd2c4fba728
+Nonce.8 = 31e20dc0f861427e78e0c4a3065964cf
+PersonalisationString.8 = 70a5be6eb4d2debd0bce7f027c08a61e665a0cfde3e1b9a86db85a923047cfb5
+AdditionalInputA.8 = 0a204322f44c4e832337f740a7ccbabcefda2ffa21c511112ad5230c41109f67
+AdditionalInputB.8 = 3302b3315f176427e9122a08c982d6a9335ce96f0d2426bce382017df2fb9e9f
+Output.8 = ef96c75699d68ec05ede3ac62054d8aec3fab44c064ad63383737a83e9c6d8af3d61f2b8d081f2f82f23bf3a8297609061816598c5bf55013ab4d226360a7c2b
+Entropy.9 = a560037e96bb5b76bcc81ee6fd127e25bac89ddca71dd941
+Nonce.9 = 6a1ae20702a1f29db658e5f2b2476efc
+PersonalisationString.9 = dbc93a3b72aa9890c056760867a9d256cd13ee44dd768447d06839d7c2fdf594
+AdditionalInputA.9 = 51d1f7aa0d551079db5c942fb9199b11ddc159737fdcf82629e0e82bc1ed28e6
+AdditionalInputB.9 = 733886bfed59cfac5623e41a8189780a3b248efd7bd4e14494ec7d793db06285
+Output.9 = 0db295418535a4be1a057efb85dc48d29c73b79f113e9e4c624f4216a92d8df7b22cf38da8156346fb5c0153711656ba08208a33399c9a2d45e76c09500d59e9
+Entropy.10 = 9d573ec9205c1765d00483ffa36dea87389288e554f8435b
+Nonce.10 = 73a175b5aba2b365d454e0e891b54c48
+PersonalisationString.10 = 35dca149a79b6e45e3f1dd16b5c555e89f1b1ce35d50cf3f9fc006265d464ac2
+AdditionalInputA.10 = f6cd2e997050158711267dbf2fd3dd4de337c4ce1a130141c94c02a8a61a29c5
+AdditionalInputB.10 = 4541d19c8e93034e61cf4265ab80f41f954523ef589cd015455d4e69919ba0fd
+Output.10 = cc14029cac4f4179d20561a89deff994b132f763212f28da1c4bbcac3868bde0a766acd100b0eadd7f4c47e42a4d682bf1ceecf621b4bd5aaab68e046ca5d74b
+Entropy.11 = b81ac161f04197733bd1bbaf9eda79ee51a861f80bd8c12d
+Nonce.11 = 5c9e5fcf062de114523f554b64c935eb
+PersonalisationString.11 = 6fb5f75a563193084e96ed394e696181885bb2bc7b63562266dc4b97999d25d8
+AdditionalInputA.11 = fd53b923444f97586bec1550a74f366ca928bfb7abf6d1cfe244c25b3ad95fb7
+AdditionalInputB.11 = af46c26db846bf6e9e82b0e8682d0b4ee8728c76b52648e3fcca0da88222e5e7
+Output.11 = c6620e780d723db454eac825d121814baa55f21a9ae8ae597cd027c5cb13dc4072aaecbcb478ddca6122186dd47f9043d2828b5af85d011bcfb99d588b0c7bcd
+Entropy.12 = 39df4218bff31dd01085969ab9f48188b0112eef759ebc4e
+Nonce.12 = 3e3441c29666a5bd3137a30c6d05053e
+PersonalisationString.12 = d382b3d65773a9d638fa8377d9c095a67ab336c55dfdb85d457031058571c572
+AdditionalInputA.12 = bdcda7ac590a56c150ca858055299c638612fe0457c18fbd5a92045f32587195
+AdditionalInputB.12 = f47051f2c29abcf57af923f1e08c22858806da9cfe142757215020ba67638095
+Output.12 = 1aa41b4b3142d611ec62276242e72a840f82f55e22a7c9d3a340a93b43648da75dd73cae3dc6a60c9d596c723ff8d2f8ac6e6e231832fd297b54f3d8d589fee8
+Entropy.13 = 7d8c648ef96fbec0f8179acecc55569d3bf456ce3bb2cf73
+Nonce.13 = 781893f4f3f36b0d92d3b1ace6d505a3
+PersonalisationString.13 = 800fef9cacf3f91c04396a52c7d3ee6c647891160e35010a4fd502e51d6dd62c
+AdditionalInputA.13 = 0f609774dbb0bb5057122738d8f76656b1b705c4e447b00b7df84ca29ff815e2
+AdditionalInputB.13 = 9e7d9ced550e427990c3e236b748b9d8b190aae41070015eb236974b534f0e25
+Output.13 = 3bd03c79f03687999b147f39c879fc7c0d34d004445d75c71598ffd55e3fc55c0e17331826ac7dee4a8e6ba7986f1d5c848c3636628f4dbf9e67bea57237d886
+Entropy.14 = 5745b230148454da9c4dd12ce1dedb5b148f5bbe445680c7
+Nonce.14 = 738ab96e37ad971b7f5a3870383fc172
+PersonalisationString.14 = 4dd3593e0fa494bfda365b5fc4e5482801e5c399a65fc6986249bfd94be7b5a6
+AdditionalInputA.14 = 80c1e2bb60d22c8ce44a2abb7a19dd60ed6a38098f2b098459716aeef2474ead
+AdditionalInputB.14 = c96cf996b2e9ceb9a57823800f890c8ccfeafac79c9695ca21f0bb6f6fcf97a7
+Output.14 = 8a7a6d383f344ad717da7c044d9477e81433e04d3b9ae4334ece15e10d7dfaa1cac79ded517ab3e24cf1d31d340590745fea2eef9153204c12094375bb3c4efa
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ab8543818545573ca217ce4b844b9c3966703620784f1eec
+Nonce.0 = 4d1ab71f1824560af0deb865ba4b6620
+Output.0 = cdd9abe9526bc9180cf64ba2679d4c101a5a8b5244f9322aff8a92ed1d48a77ce20e39d1915e9a5275e8a1fe7a5aa8a28b0642daae9a70dc9ee4ea76ac038274
+Entropy.1 = 20b01e9604d26326b86c4bb22b6c8b974e2a42f5cb9204ef
+Nonce.1 = 9f9d96d1250107694565f50ef05ee2d9
+Output.1 = 8c50e736583894891032e5c3a4f509854463687cd1a4d10b77760bbbeac83bc7d9b600aa2fd3b1c24210ba25e216ec4019aa7f75b74d506ba0913faaabd011bb
+Entropy.2 = d3ed0d0bb500f735ba0896c51f7234d57f3298ab7271fb8c
+Nonce.2 = 336dcd6bfb58ea093b923eebc844ec64
+Output.2 = e7d9c798115ec42e0af03e91d89d663231dfb8db1187e43717899e1f809f86fc0d5985709821edb8f60545bf922a828e8ac9c5ba3623c2cf81671ec33677bfdd
+Entropy.3 = fbf3c267264f54e456cc56d1e0ae7fd2e5847499716e1580
+Nonce.3 = bf60b71cb13ffbf28d20f968230c1711
+Output.3 = ec04ec06aae20e31101e8f3e8057813b15e048c6bf05332c1082024bde43bc69a3f9444f4ae98efbabf3d986327af0c93b17f5d4e13af7a7e219bc93b6d259c4
+Entropy.4 = 3e191ff892644d77031b24bf3dd6dd704a9740d2558cb9be
+Nonce.4 = 88891fb25e11b86aba15c24608fc0ecf
+Output.4 = 967123e13a69b8dab52f087bf4a21e438120d1cf0e8efc7c1220732599ff6785e02e0df6df95c50fb7cf6cf57f13adae64c2f8ac00f538eb4a7d24025e0501cb
+Entropy.5 = f3d7d01a2cb2731bb1d6e99a16745f319a617ef95dcb550f
+Nonce.5 = 8a4d890e3230ff9a1eea9a66479e926f
+Output.5 = 3ceef60f8b23e50e7d49a30ac2c4fd4dcce3a16f94330ae7fff7f27f3d569f25300d59fe87ff7d75ce90cd99e94ba4f4ca30d70c759793bbcf7bce44c21dd842
+Entropy.6 = d7690e2ace3c174e9d1c8cdc1c9cda65831526611105198b
+Nonce.6 = b0a11cfb2744ae7b0d675ed0bf2634a9
+Output.6 = d3ea3dc6296e3640f22e75ee27e9f7f3c7ff06f1794d915e4fe9a471431317d09d80171b1e7fd8fc57d8b8d1d1fa61162bbfc56743835742b4d526666cf5cc03
+Entropy.7 = 8251bb488097e7d07f41a768c1f37c421180c98ef59b730b
+Nonce.7 = b72bc52b358c7933a316b17cbf07cc02
+Output.7 = 31f357abf5a2a021ee7e0efbad1fcb58118e1bebe42ef65ac8cc93d6d0e54f5af7c4022f343ad63efc94d950354b838a378cc77f20f759705bce43d8734e717b
+Entropy.8 = abdb2ed2e09aa00d4c394f80fc0d5bf213b4283b768b5812
+Nonce.8 = 89e19db42a962a1d35d49cb8c643b713
+Output.8 = 067ae3ea2304917147cff976864d9b894fb38b1c8b0e571256474a8e3c6020996d169c0415454664976adf9505c53b5e946b4d0e65066750cf0de141e8460b0b
+Entropy.9 = 4a44101f7a1f22b17e7ccc91e9789fcc6f1b4dc30972567b
+Nonce.9 = cb9fc3d452f6cbe5c9831e6537027d94
+Output.9 = d93b8586d61091e3bbef187e5fed6a2b1700e93410866d10bc02d3a622a0a8b38d8b083361ad53197bc1811768206e541115bf96121965c16d32e1c1780e4f24
+Entropy.10 = f5a4662d9f5156d3bc282a4bf82e5d97731d36c00179adab
+Nonce.10 = 3e5e203862bc328e9987a721897d47cd
+Output.10 = 5e08ab01b0a4ca992da996f164341be4e201ef0d1cd049eff660595a70cef1723179cc588ca52de7efde206a15ed7ab414ea7cfcf671a05ce953437639a58c1d
+Entropy.11 = 10b6e2733ba85603dfd5d5aa5a206752a0f607f9d4d3d73c
+Nonce.11 = c0c280ae014df200d02ccd5b79fd81b0
+Output.11 = 9af46dc01aa860d9f1ea68d3ef573317503e54656363b570ae263b3760dc174943e1815f972cabbb42e600901929553f76739e2d29f77c5dd113138cdf97113e
+Entropy.12 = 55fb21939ebd06d2932b6bce9e023e623555f27d73fad83a
+Nonce.12 = 43659f6bbb52f416ae9417908beb7b2c
+Output.12 = 41e80b17f852dbf0e31ebe5127f8c528d067449ae6aa03c6825bb4c5dcc6ad5a728412133077c68cba1e4033d719856bbb30d04b82d840fb5a91057c43da8da7
+Entropy.13 = 93bf67eda37bf74ba84b435749e5c3124b989b6ac6ad7261
+Nonce.13 = 294cb26c39586e4895ba8ae779105dd2
+Output.13 = c4601178924d243fee92557ea30b9d48b816259642da4cbe4d868a948ca7bdbd41e6cd5eb800bf44ed606d2ddccb34dfcf3baca706061f12621c799f551f448e
+Entropy.14 = c8036e05b5c97e1f170ddd6c958cfe188d4474b11d678262
+Nonce.14 = a1829e135031eef00a27a6fe02248c1b
+Output.14 = 15be79f77f5c184310416e92d7a47fc32567e0c4858540bc540c819504b39bd82bcb961eaf50e38db90c59309051717c7674fa3e75a4f5ec33669c736ec43a19
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 174db4eea556569bc045efc35f8015717566502288a1e7d0
+Nonce.0 = 3887890edb105c1541db3ad5955e1262
+AdditionalInputA.0 = 5495183ba088d73cff04c620a0dc1155d3f2825bb1fcb94915f1c1a5087aeb2c
+AdditionalInputB.0 = d30bdbfb41a1b476c0056b180f2434d3d8352278af477f50079475c1bdbe6210
+Output.0 = 24d32b58e59d0000ff574fd47e6702ffd1a9b8dbcdb4f164abf173145cb6d2d923656b55c4e885ca34d18c1562f17bb54d10d46b1a53ae146eae077ddf93ed53
+Entropy.1 = 0217327c7e3a61b0459bb492b10a73dd9986d2605addb664
+Nonce.1 = 37eb5d6692883cc6a6a43c80df83f6e2
+AdditionalInputA.1 = a9d22284c50325d796c794bad28dfef92d1317c93e200ba220e00bf4f3acecc6
+AdditionalInputB.1 = bc0fb70af92dfff5d5034f90bdbb05295625d1da45707f7fe17150bfb988ada2
+Output.1 = 5859c8539a37961f7461e8b3552485ce37f0c19646f784e6823a8dd60641931331213a2211b32cf57a1a26b5a3b6e6eebdc5abbce0d43ddb967a6de57c97a8f6
+Entropy.2 = 9e2f8ed0861fcc64779f01ae37b76154402e09c2ac84ec24
+Nonce.2 = 6c1e779a17ff4ddc33252841da58c481
+AdditionalInputA.2 = 960d531c3a8e7c8c269ced9f7464fedec8d4f49e7396c60fbd89b2ea4af6fe40
+AdditionalInputB.2 = e329503392a8e7eb562ef130d0f9fd5e66d5f23f24879955e66052d2009facda
+Output.2 = 4a020e7ad33ba380a562ad132d5b73eead1e89d9207a6e4adb12e08d62f4886a27c218b03641f7b6cf3a90e4460b3639e0aa9e70abc9ae6bdcca60827a3a0753
+Entropy.3 = 12f06bc8ea0c9e95b3f5b8d9be8d4b94fb80883393d44414
+Nonce.3 = 49dfee7311725f1f46c1d500100541d1
+AdditionalInputA.3 = f7ecc352dac28062f1dab51785b6b0e31b81db6ec76ee053c32bbca87c7e3b9c
+AdditionalInputB.3 = ef29f689ef40b3a4f186a3fd57bd483ff28b5ea6293e1733a39ca3dd3312fff4
+Output.3 = 173a295bdd79ad148b15c26d8d13133a0c3d52c5eeb6474a73abb76cbbbd2f740ab8b657cbcf7b5fcc86271408b19fd935e4b74a0df9dd7ff5099ae0849f4ea0
+Entropy.4 = 3f4dab4bd45679101e4e9e1d0538ef4d763230a0af43fae8
+Nonce.4 = 8bb68ed2940f71b60b7c7d8f60c15ca6
+AdditionalInputA.4 = cedfb565d554249acdf9e61ce996eefef0cf7eb7ca0eccda77b7e6715f38b77c
+AdditionalInputB.4 = baa640a13506f753668eca790a8d3fc4c53f16eaa93d088d69f1e58815d42b3e
+Output.4 = ce36ad853b12d5d5093ba35fdecfeb25f1b1330ceb37e58e2e58a940f05f9002e0fe6b8d36b5146c188ab1e33ba84e954d17a52033cc081aa8b2507be8d51613
+Entropy.5 = 1aa5d23613dd1f71714a01e75ecc29a6d1481c76157a8177
+Nonce.5 = 2ce6ba4c82e7cc2e598cda4b3e6ac8a7
+AdditionalInputA.5 = 026c224912b49ea7b2a1a7ccd50418090c1383c64f2852341c28c1f6562f9bf7
+AdditionalInputB.5 = d9810d1a33921f062061d7f667506b0279de3e143e55f572284693609cb73785
+Output.5 = 4775cbe9f4a74b72facf4a2cf8e9581aa02532626037fa3b63efefc3c7c1c2db0eb5903ea1a9cc9e40b2b9e628acfd9d74e66572a8656c75db6a5fbf5ac0ad1e
+Entropy.6 = 326f6e9122703e58316e7e0e2e5878610423f0f5597309a1
+Nonce.6 = 426e56f13e11269ea6bbafa0098611f5
+AdditionalInputA.6 = 8ae88cdd320e96e921d06de23c92a71b5c370ecb4dba9887f60344e20856a904
+AdditionalInputB.6 = c5bed34cd60850640440d0c70db4de17859a25c2bdceeefe5ae0cf8fc780362d
+Output.6 = f462280c4eb39c83a2085f8d62a4bcec7c276212020bed35e898a554d6afb98e7733d5712eaff884058ca88ab3e43f3e7f58d98ea2bb97ef8a5dac6363566670
+Entropy.7 = 00712f30c7f32e21debf402678a7e2f7201e96e7c2551796
+Nonce.7 = 9723772e04710d54a3765107aad914f5
+AdditionalInputA.7 = 1777d99dbf76e0265ff6853b83518f341b32788171db4f17ca6504d788c2f137
+AdditionalInputB.7 = 79f3a3695e2cfaa7f0878729e9310bb479d300cdc15ca37e368e3a45e7f1ea26
+Output.7 = e7bd545d185305a0e443516501e7fa9abfa842274d342ae3aeb29583c150ea550bc6fba952a49e30f84c2934299c1fd2d558191eb7ad80d828e63aa9ff223107
+Entropy.8 = 0e1e1a4304bfe237e9bde54ccb876bdb0e833bfaa3609ee1
+Nonce.8 = 4ab3d52740b7b9de6ed39a013215d14a
+AdditionalInputA.8 = 02998f33f6be3bf8955b9445017569716726866be7d6da4799e4f0720af53593
+AdditionalInputB.8 = 1d96d9e0ff54792f4fcce920bf790cf72d58fc865fe8f446fb03cbc2eb21ea2f
+Output.8 = adb0e93e74791997ddccf96f56bb297893ee40f5289bc992b67870af19c985aa9d911b1417560172ca70a9f6076556f96b4957cc574c0989fadf1ceda9df9bc2
+Entropy.9 = 16654b44fd38c0b2448967829be7bfc462786f088b1eb457
+Nonce.9 = fefa7fcc14fde25b6f4ee9a2231414f0
+AdditionalInputA.9 = 1460fe868784ae02b239427a0a44872094267138a26cc402e72aab1476df216a
+AdditionalInputB.9 = 2a2f4d85d1fc7918e8154053d84302b5496cba91c36e477ff02c75489ee770bf
+Output.9 = 9ea5e40768aa35ec4a709b8a7d6c2761e7a77dce06cb253763ebd70a9f69ed625ccc752c3e7e809769fe99dd3ab805645e96c602ff9b4f78122ef2e809c39e60
+Entropy.10 = eefa26217ecfe8e052d0d4c0893920837bbd4b3f966a348b
+Nonce.10 = e92a5cdea072a2cbb98a5d1ab41d7ccd
+AdditionalInputA.10 = 48f1ccfbb59d7ae728fb22729812366cf66a7df635d33ed1857f9b88013b1f21
+AdditionalInputB.10 = b24706d1de83e2470c37ee214cbd7271c32bb1650596ed122af4239350bcef9e
+Output.10 = 650a98b365576e2fe85bf736cf216b45192beb9125bb1ae48912ec06f39d94e2da02eab970b9d9cbc77e30278e46a7982d7a2f7b75ca6c7d538390f95407382f
+Entropy.11 = e76532774d4ef45deb39bfb52a40461d3125e362d24a56b8
+Nonce.11 = aa470555ee449f9f06ba2812970ce68e
+AdditionalInputA.11 = b2ece717a61119e9fd32458081d00fbdd7c1b53422a53aa32ff09237e5028687
+AdditionalInputB.11 = 6b9e894499b1e478ce1f439150b480ef8b8014993ea931d8aebefc8b76a96272
+Output.11 = f98fdc5d33eab1a456fc68080d593b83bf6cf0c7cdb9834082de3686919d0752365a5ca64f322437671f0543ff74ee6490a0e870634fed4b5ec98482ef09a2f2
+Entropy.12 = 4bcccce35feafde5da22d95640d28b232ca7c6ec67f46e05
+Nonce.12 = 0df8f3cca0128ac39c11c038f8dfe0ae
+AdditionalInputA.12 = b3e19b4afc446629f45cea68e76b8643c72c926ea0f0bd473aff44c8437ca2a8
+AdditionalInputB.12 = af06e0f1bdb11c07d696d59c0561896b762583253970a95ccdbb1690b5d3a211
+Output.12 = 11266869e6a09fb1c363ca25f8f32845ea6850807872de594cefa55fb5d84bc689cc518b4eb83bb483c15c62accf474cc6afeca56ffa84c3c01beef6aea5e23a
+Entropy.13 = 48a4799fbb49bfc9dd0977ae3b1c890d2fa69f577554c3d3
+Nonce.13 = 6bfb2d6bb92bb2ed8817992ad93cc6a9
+AdditionalInputA.13 = 2cbee2fb8ba49965c85a9f660368cf1d0181b6afe63b348221482280c905812d
+AdditionalInputB.13 = bbd3e24c95d8fb5c60d71544b6696b562a2d05ce2eef658e213f67aa2c1fe5d2
+Output.13 = 8d78f3b722d4fda0d81837a61f33103b36f772a20b03f9fa80d2e7fe0c845edf326165d71685527931a89d7b1deb01240aeb1f8f5fef8dab57e14384580b693f
+Entropy.14 = fce85e48ded7337ff3d3eae391e2b2a39542be0505f2930c
+Nonce.14 = e5905ce653b9275f14b0e6a10623bd87
+AdditionalInputA.14 = beea3564ab77adf63a2fb514297fe93fc833231c22db9857a39d6e2970858465
+AdditionalInputB.14 = 624f46ac56c687fc336dd4c7d7db44a56291eb7f66d1884276066b38550ffc17
+Output.14 = 698b1ebd2391c2f14cc8b20d964f39d5eafb56d613daa8d38a45cc6fd9cc98ca4eacc4794bc9c317aaab1410b8d565484367e3d930671d001713c329e65d28d9
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 2a9b56c35d17a5ebfc5b62ae44e929ac3a0747907c15efa6
+Nonce.0 = 8df8ca01196719e526ff2ffee201ef45
+PersonalisationString.0 = a4f5fabed064693913880e33f5aec5ed132f429fdfeb226b0e834e72d3ffb449
+Output.0 = 51e19a13b11815b1ecb065d54bbfa45e31d94adeca33856254f43481944513de8fa6cf23c4fb24b332346d00464b06e9ae80d98da9c6fd3839cf0ca7531ccb89
+Entropy.1 = 8608bdf7d33d89c09324b498954110b8c0eccb520cf86068
+Nonce.1 = 572e5816ca90e029102d5d682189d856
+PersonalisationString.1 = c4ef4c15721337209ab0c103dbeedb46329358afc4af0ab74a27820088cebb5b
+Output.1 = c393ebef36f86f0faa9e4092ea0aad0d8b81920d762966f31f1ffdc90fd21306f9047422a9de67eb2c51ecfb27cbd068648596c586d9c94f31e9e82047cdaafd
+Entropy.2 = 41c69833968ced2e0d2685e068ea7d59f6e673af2b7d3599
+Nonce.2 = c630e48ee0d5353fc7ed4d607def8131
+PersonalisationString.2 = 49cc8310e0e89846b64f58fbe8e2bbf68cf999126f4434df3e5326f6196efd41
+Output.2 = f7f4bd0db984a238dfa9dde2b519ddfd0eb99a54fb0abb73873b3c1f5084dc6412be353f580be01cba58dc1d90a58bc963bdb77d2170159987259b60c66b8610
+Entropy.3 = c1c7216785a91e2816c8d4d141772d122ac3a108d6ea0344
+Nonce.3 = 8e228b8fd6e4671609a246082caa3f2b
+PersonalisationString.3 = d40f2072a27354dce5d4b190c03c79c70441f1b9ac0e61345b7671dd577ff4ab
+Output.3 = 55d462eb21083b55fa5ba9b606fbf6669190235cf112123a40a4a2cbf24aadb61814fe50358eaa1377fc829312d9834dc6a3735d936ab30557532b69cd7b268e
+Entropy.4 = b3474330a26361abaf69511f920180692a10b829e60f9e27
+Nonce.4 = be420ff26f33ae5c1135057e379ce8f7
+PersonalisationString.4 = 2b21b848b8aea51b4324f9bdd62752f548fcdc5ab320cb33db1f23f9383b5765
+Output.4 = 314015588ba18c375febd64ee95423d42a7679da10e7e117d7b97089bdd20027010d7e602d6e79b8ec41a7e2bf6ac46a41ea661601bbf666aaf99fb5467f221e
+Entropy.5 = a95c12ce08f587fdecc69e8f41e7b71790094d46dd5ba7d9
+Nonce.5 = be3eca668b3eb25ddc3336ac70e34a56
+PersonalisationString.5 = 01bfca956d0370b8509ebd4083487228ea9572eb52c64e83462c090772088760
+Output.5 = a994a0b97c21cc3551cdc64602da0b1f675d7229f450403e303d1a7cb9376e9b5f88992c4386ab75864c24c5bae2fce8b00e9ba6a62f176209894565044c9421
+Entropy.6 = fdbf44186451e19c0e0e71984955d301434614679ca05310
+Nonce.6 = c446f2c50f8148b4435fa7f03901ad16
+PersonalisationString.6 = 0c4015317c922fbce0934bc296ec4d0c5e87940cc35b535ebb3253c5d10cb50d
+Output.6 = 0d20843219433b903e8a8e70e455cf574bb315308cf9f2d837b7b235a95f2ac989661cb865e8f4b77494a3dca3148015abde0a73c656a7a36aae91f02dce30bd
+Entropy.7 = 3ef94fda2d12a076ee5abfd7ef39e6c7d75a7fb9281b4b55
+Nonce.7 = d81072c46efbd91e9c6bda13ccc87c7e
+PersonalisationString.7 = 5711a9705d800fa1a21bd7752e3f1d3da90a1f3369fea403a9cb6581244c7de9
+Output.7 = 7d70722a76825264b37019b4da286c7347890f59f0a498728e6359bd9d04ed96a7588166c6ef391da07994d63db8a2fb2cdce3187b56aee9a2d5cc0f852b2ed9
+Entropy.8 = f3519e7da5797017efa1a1a015f9a61447fa20d0f2fa4d51
+Nonce.8 = fd2d1eaee6d8455a03e83a0f80e15b17
+PersonalisationString.8 = 1ab108ec099270049326d1dedeee526b29d17773f766571866f4e9383c25ccfa
+Output.8 = d2e76643e8f9ec5a09f86655fc65738dd0d20a525f1497b32729afcee873c8099f6b61c4d9324e02a2d89e50f37584c2cd2776342210da42058f07df3f85f8ac
+Entropy.9 = 41072a1c20920ce5c52c9eb68b87f97a658a6697d4e967db
+Nonce.9 = cb03efaeca21534c59a9bb12f146ee21
+PersonalisationString.9 = 9a09ae50f76149a9a1f55a37ec30aa08cb573057d4f5b5fa7713ef7a1c089baa
+Output.9 = 527442041c230ad49682d7892c8516f658ed0b1638d1ed01b279147a6b4a815e4166679099fc2ea1fc44b4e5e4b6106f6691505dd062ea3b3dd67332ec482ef3
+Entropy.10 = fb67de62271adaff78dd3c06fab6b9bd01a8496fc9beb6a1
+Nonce.10 = 1c5f50e7372f8f8d4044674c1ff19898
+PersonalisationString.10 = 8e4f33ea52a9944383ebe90a3042aafe1303c32829340437957f83356c837e2a
+Output.10 = f3269b27ab4f7eb1ff070eb2bb8794b4f22b0eec45c2ad1bbf2c5c0b7cd32d4de068f3e8282c3dcc35c9f469ef0a9d31756aedce00cfaeb309594b816491ccad
+Entropy.11 = a22d4fac1266ce8f7cbaff6b9d47424a10f269e16b8c5278
+Nonce.11 = 7a04d4044533e983926023c5a8c0b10b
+PersonalisationString.11 = a375cb70ba8006c74ccd06a9c8e41eadc445331e14b8e195f4a3fab0c1df6c96
+Output.11 = b3f9a39385616f6851beb7c37709ac1f30667df11c9d047dfcd5c7803e930bf384070e350f1d0b8faa39f29c98d9df59d35ffb520c8bc90be22fc77d4d67f134
+Entropy.12 = 48c4fcab285f5bb3edaa348c4506d236bb9fbb297dd4f328
+Nonce.12 = 8ada0b516dc49ac8c344f3b728274018
+PersonalisationString.12 = 528eed743085d3d416bd06984de244161bdee0bfb598a747f29c37fa9412976f
+Output.12 = 2b473e1c19693b308def41f0cd99cdbf331c7d7d215cd5028e3619ad91c8e7d5e024804829f4b2905a33544996196d5cafabd2270d3cdd6689dd12462468ad50
+Entropy.13 = 607ff99facb269d5e85baf03dd93de5ea543168e6939d972
+Nonce.13 = f849a0fa95d04b741e46d18f0612eeb7
+PersonalisationString.13 = 95fe53eb4db09aa85b9406530c9e994c695b86c9f04ee53f7f492c4d758202ad
+Output.13 = cae04ed642fa6dd8756a97b6a32494d6b95d5a5265412d27a0da9a70ad914ed31a674c6ed900be9afa493f8e141a08aba8dab75cba573c46637a9faf4c6a7161
+Entropy.14 = 99e2df3bd55008e9cea0d0ea58c3022eff1d1e489cd6f8ee
+Nonce.14 = b3907b8820c9f22979b663292f7ac788
+PersonalisationString.14 = 28beb66118cbce5eed825bdca9c8b65b6c6a498db6226e72e1fc01e71fd22c82
+Output.14 = 43eb721f3669f918fd841d79e2a23648f88c9869260b624b8a3381bdc1d2b1296b6ba1e075cd4d3ee06a8b4f986c00bb2b9c5a1eb23b82ce081f51913e46a4dc
+
+RAND = CTR-DRBG
+Cipher = AES-192-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 43f247a2ee1cb5943f0a4a6942355b1633ab82d0cf60d433
+Nonce.0 = 8181ab27f93f662325f8cdf77bd46399
+PersonalisationString.0 = d393508a6da049a646aac8c9cf8ff53a70f6645a67ec466d6ea6241e0facfad9
+AdditionalInputA.0 = dc3e8d4c2bd4aee278de3f998ca603ec502332b6a1cb6c8285b84c84ba54d732
+AdditionalInputB.0 = 1d0d64b5a50de03ee2654fa59000fbff87b4b8b32e90a4dee90c9a7612eaa575
+Output.0 = d6d7c64dd922f9c7f3f538c4cbc791da2dd13f278135225cd7ce36738ce272f35155d4c2696e7e10a8f48c7360a1b31a30037f6604ffb7bc7b29ef0ef5aca84a
+Entropy.1 = b4e8fbf6335138a24efb120ee9ff7f99e194a17e644962e0
+Nonce.1 = 8e4dad78741952b34a27bb85ce2bebd7
+PersonalisationString.1 = 4408dc6f19ad7cab0760560c217532ab7dd5658120a94a603fe3b62f8fc55838
+AdditionalInputA.1 = 2f18e42c7a50801bf5135a0d8fce0a9b802bea0bef4c7f35e4d8948211547221
+AdditionalInputB.1 = de9e72fe4130fb75c8caed415e14bd0b922b9bef8be144f436defada1096f981
+Output.1 = 857a931d68e2f1f41d9e92a74f578bcc86082604032f3bca152e70cbb4c0fadadc26bd2667194a6c727e32ecc1b2fc634b5bdd2d9006e6faaffc233453da4725
+Entropy.2 = d3d90c953e60cce29d4913b6ba6766f9d85f1fa054f2359c
+Nonce.2 = 9023ad28e8c5f2e4be8fb2d86f622505
+PersonalisationString.2 = d49db664dca3c40e69127b04f8ec7fb00773b8ddddb91ae2e1e3c84c68ff9855
+AdditionalInputA.2 = ee10a8067841b5b4a3a6f3496704e97478a44cdcc857e4f29680f669ec5a83d1
+AdditionalInputB.2 = efbb9a696efc90a774ee87b7ed434503792c1a29beece9342e0b5724c3f5bcc6
+Output.2 = 284fecb833a6e418e9e516c171fce852e702a4488674771c913e85169f195bb799f019ac1b55a7e3937fa770330722a801511384d856fb199b76e264caa06b6d
+Entropy.3 = 907bc8c3a8c6946469c488bf18a8e67f7cc045ff4ed69d5f
+Nonce.3 = c2e0cbb26a48232dd32310b1ceb32e9b
+PersonalisationString.3 = ab67f1fd53e12c364722d6b5475d5555a17951eb10d20055ca3e4086bbded2db
+AdditionalInputA.3 = ac7729462a01241436c3be8e854018733a84254f1e0a2343ca69058c54716f1b
+AdditionalInputB.3 = 85d43647b36e294abddb0136b6550df3cb314c8892fe279b965f4e8931edf2bf
+Output.3 = ad8a6fd4c3c85c4df187f035433250b650ec96ad962c365a8b14425c4d37b0c4fd58d00f1094ea7627acaf67b237344683b513e8f524eec496ea907b0cb81c27
+Entropy.4 = 9ec04e7c20f77663d330a43ef193f3a3baeec89ec0860b7c
+Nonce.4 = 3267aacc67602d44b40663f3e79d99a1
+PersonalisationString.4 = adc105b41039e058635b676bf7c07d0045f75ebf642391f5684999a5c2f3a4fd
+AdditionalInputA.4 = a5b374ce0a749ed120b7b3adcc5ee93dccb2b05455c626df03d186c965bb6bbc
+AdditionalInputB.4 = 1eb592133f72ec56c3dab6a53789720bd2ebc1bd1f746f7a05499ddb7d9c35a9
+Output.4 = 699f32e3066ac7e1f93c8e0b41ddea898df42289f8632b976f5e64eaa823ff28dfd9d4e124449a7ffe1a603e0407b13f7b44b4a501025e1224d84bd2e780a644
+Entropy.5 = 9da256b4e15b21d48a9f5925c11d275c8b458aef750ea2b5
+Nonce.5 = 95a9bf02b8b9a98f7120a86676410354
+PersonalisationString.5 = f6e8c36b41d3d0d747133198a0303c8a9a9de2aa784639af122bac75d6eb8535
+AdditionalInputA.5 = 62da4aa2144426d1ee3581a8c0f91b84e17ace43f566b257d85cf9f9b1db021d
+AdditionalInputB.5 = d71ffa97fd0a7a80b919c21dd7affc577700aca7dca6311d3b9064f50208435b
+Output.5 = 120992a82ad8fed5ad49db7b756b94185e15b1fb53aaa64e6c7b9ac14487307d0fbb5f519527e468fd978291381f9592ccf53df587586ca0fdce0c81310dbbb3
+Entropy.6 = a813ae3d138bb9768759e2590addea6390266405b8f59b68
+Nonce.6 = 5249ee76a7e792e6a1ce5cade789b846
+PersonalisationString.6 = 7b4b71747d17902f3fbbeb3a60005c2a30e902f696a8d2d8ff6828d7551d8749
+AdditionalInputA.6 = 6ddb9255508d29af7a998e146d8206beaf82c1bb7d423d92605e69a6a03180e4
+AdditionalInputB.6 = 8485f257d44a82bf920013cc8b8321a357d1933b64395c125540908da9ea9e99
+Output.6 = 52fb0400f8dfcf694f0daada7ba781e09af5e48fcfcbe718052b46a389df713ab3af71699c41d41e6542b87cd9bec4ce0fd292ae52ead78cf52e0cac5ccd4f01
+Entropy.7 = 67e44471bc656eecee7805380e9849f9e3f4f2f4acba5205
+Nonce.7 = 6018f7e1f943fdcf7fc9595ed0a08107
+PersonalisationString.7 = ff0f82bd94fa8c6554e05c6957973bb8c4f3bd3e8857abfcbcde87c584f75611
+AdditionalInputA.7 = f09dfadcbda71908da9dd7bb7a9e16a3c25e302050235eafd9432a8a7878c10d
+AdditionalInputB.7 = 1fc8b60fc030f7c4177a5147071513fc2f174659b012889a0c583bed7c3818b7
+Output.7 = 35b2bc5f592428d61bb7e062bf96303102118ac5b166508ad5cd2281f59b3806be118e97887c5732fd96c7b1714317597aaf20a1a6ddf7578efb7436980f9938
+Entropy.8 = 94323227088d2d5ddf36a1c42435e205b9e7ef19b6aff092
+Nonce.8 = 9f9664c87d7a43142ce3799d1791c0c6
+PersonalisationString.8 = a5f83a66277cb6c94b20860da08874f33c2a3534cfc7aa53f40beb4fdeff870b
+AdditionalInputA.8 = 4136bacf19b6eda75f699271e5b382f0f58dd8b59e0eaac6e43799525f7e3b76
+AdditionalInputB.8 = 2cec57e8ecb9346380b380bf9ee77d1b077d8b79204d73e0e446ef38e1a9f26e
+Output.8 = 53112d084e0160a762fd908e0540d53b07cbe6484be9cdbda8f3a1c14f79f2d2e0693962f17e10edd07c66d42b40afb4f02d695e49846f376dcd2b5cd21c9cb6
+Entropy.9 = e1ce5b2c05f45a8946f5b79492517e332baeda4d56c2abf2
+Nonce.9 = cd2d68475bbf8ad875dd309ad428d644
+PersonalisationString.9 = 74c6b170791c53aa1cd52e382eee21848227567af40c5581f98748f4efc605bd
+AdditionalInputA.9 = 49d5a1770f851394b6e1491980bfff7621bc5610b5777e71e9cda30dac1eeaeb
+AdditionalInputB.9 = 4c5b1582c5f7df4fdf91125330f8dadc366877ad8fead651c7fbeed8ee4e4178
+Output.9 = 3c37e1ec6c180b32a963bc0440221ac5c1c33d89272b9f697c75737dd9cd2c749c25f3c84553dfaef86af46113e06fe1f6c891c6a390590e1668ceb75c95d3c9
+Entropy.10 = 7b9b3aafb3da4fb6935de0a71ac9fb4095c61735072c28db
+Nonce.10 = 28be54c196be072fff92bc6caa8ccc02
+PersonalisationString.10 = 88ea40aca2a8aae480858074bb140369516675bdffb7fab4318cc508357b7bec
+AdditionalInputA.10 = c0e3e9d7008d64fa3069aab3805c0c817c9a0971446a8b53d00fcab02a4ccb59
+AdditionalInputB.10 = dbac681fbc3eb3c5739452a5e150f595657c04f07a52062052ed1b19ae53aed8
+Output.10 = 4c4d6b058fb13344c4175f023959a7701152ae356e40093f7019d47ae51ee51967e4fabb209b67b20a95a337ee8d4fe5f666cd08fdde3a74dc9fce0a5ae0f931
+Entropy.11 = 4c59c6c67c4844175e5f1a34ad9e08434c205151b7447a01
+Nonce.11 = 828dea3bc07abd45df797ce7dc8edd77
+PersonalisationString.11 = fb12992f394b213b087b328fb274a28f0a2d5ded770fb8d6fd7bf3821d86ee39
+AdditionalInputA.11 = 5ae8e93056821c7fb07b48c5c6aad9fcf33434ec1c93942930ec06f0311cd09e
+AdditionalInputB.11 = 09222875e69e811b92ba62c485a3d810a8ca89f0be468c7c1361412e193b3c32
+Output.11 = f71b7f6ccf4dc0bc0b898bd38ab8102476d0bb7e9a1add22568216b0d5c52c4b1719a6f2223bc24a5248c915f65d5e183fb9fcfaead65f1ae04beeff1bf42596
+Entropy.12 = 81f4ab514e4ef1c89f186172553990af49a3e074729bbaec
+Nonce.12 = 35d5bb6eff10d27035e7888fd6c0c570
+PersonalisationString.12 = ff5aa8cb9489f7fad882522c96a3c8cae83a9b7113d0c1e49da681598ae2fa56
+AdditionalInputA.12 = 2941785509148b16813f88f1eb430b2862e303fd716b7172b141b999423fa30e
+AdditionalInputB.12 = 3beb13e41b29c3f9e7c04bd8b93ac2c8fbfed06ed33b8ea9317fa4ca3c253101
+Output.12 = 3c33d778b1d61c12ce1f71180e8ddaf4f3098b0927ad9e863d8f74fe871efca1d672b2d07ca57a89118062bb354994c1c5aea5ab1be2f92571c0720197435e73
+Entropy.13 = 6ccecfbe10eab1caa8fda938402ddc3a3293ed7aed4d87a9
+Nonce.13 = 0e4e20a35f77bddc04b8d172f78bbdee
+PersonalisationString.13 = 2a1e1d1f1310ae69aa806b2b14ed2b1ba3088cd39a4c4d8f27b48b9e627de68e
+AdditionalInputA.13 = d409752d8887b347e7784472c028abd9f045f9641db4638d6704a82d776716e9
+AdditionalInputB.13 = eda7996915482c0609a432e725fef58fefd915f78afb80d0664e9968bef65a91
+Output.13 = 579953124f7796da17a383c359c5cbae151e18b15f61b1e405ed2ccdabae43e4490d269272326d1388e4590140f4e58dfc6eca21f63603df0a626bb76a2851d4
+Entropy.14 = 3d174d98eca80ae39c75d27f97b99e9b0f742b32e37b94e8
+Nonce.14 = bcfc4613175b6e353408e23b8581e705
+PersonalisationString.14 = 3d0e9fa5616fa25a0d58ddbdc4a6a8e55bef051db6fedc8be8d4c752f1d2c94a
+AdditionalInputA.14 = 8718b15a550f978939f58279ecdaafe7980a1bbfe6b9de85b9fe107c72a8fe20
+AdditionalInputB.14 = 078899f5a1edd1ba8e10eb8efa2c98ba174c1bd35a74414cff8623633ac1c25b
+Output.14 = 74e155a5707eb19b79cf7efce1c4237bac69e3f9311411c92dacfd8ac92ea11a8787a47bc44f1c2944445b2b0527e16aec6c01165482d7e3b64437093b87bfbc
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 36401940fa8b1fba91a1661f211d78a0b9389a74e5bccfece8d766af1a6d3b14
+Nonce.0 = 496f25b0f1301b4f501be30380a137eb
+Output.0 = 5862eb38bd558dd978a696e6df164782ddd887e7e9a6c9f3f1fbafb78941b535a64912dfd224c6dc7454e5250b3d97165e16260c2faf1cc7735cb75fb4f07e1d
+Entropy.1 = 13199090a47fbd1984eb5fa9589345154699ef73f00cd62b07c34167c0327e53
+Nonce.1 = 5f968f93b659d8a5750a95345a8ae20c
+Output.1 = d16878c5b06d7b6ced8e8aeb3a48d95ec8dd655733eec6ef473a8078dfdea600c0cc02168b4d6d744ee828ba5031941f8e3d96586407af79eba60d14af47d53a
+Entropy.2 = d6ccf8c8143abfe5fd70626afc17f8aef172027c68c38f94ce59f7aed5e96657
+Nonce.2 = 2ebc66d2fd66b4bf1ed24faf744ffbc9
+Output.2 = 6d474ba971a8339eca904a4c0dcf6265116fbc66cbe5dddfdc42104502eb210e3660e1b1b710b97d830c27212b33131d85d2f73f39760782f4b47d447ba6a68a
+Entropy.3 = 395d06b7549073c48252fb01f39542645600317220090029b2bac58a7a4c35df
+Nonce.3 = 5726b9911da8f166a84f82c06f53dc9e
+Output.3 = 0e1810b5044f28ef2cc7928bd632d7035bcdb9801e9d84f569a5b6d02d3cb5aac0a190bd58d6a08b6789529320c76817f27b7d331085346735ad371b5c9189cd
+Entropy.4 = e502718e54c8a79f31529aba42404808e652477f595ab35bc54eaac7afaa228a
+Nonce.4 = aee328ae82274d9dffdb2772315489b2
+Output.4 = 9d10baac91770e97be490db4d80d7007d6a20407813eee128acb161c6e36c225ebc42ca37b107f0430b69826add2e520c2f18fc07e32ec0a7b33463bcf48e576
+Entropy.5 = 63e60ff1739d4605f5c511fd0e3951dd3de657508a60d7c87ce95f39481a7553
+Nonce.5 = b1c17bb34baf2c7f3b03b76e6897316f
+Output.5 = 08195061ded1ab84be7d5dcd630e7b903854f1284389e5e77849bba10c89083bb6f32f6815cfac45b7cad0dfb55498a47e875d21ed1842f58779845f2f24c6e2
+Entropy.6 = 63ec70792a6c78540e40db15c1b873fcde9bea1d741d88b81bd1fd66139df70c
+Nonce.6 = fc5f902bdd0d7fe216b1423d4f41f12f
+Output.6 = e366ae2988f6f37854859602319e64385244115004386a21eb25e69456c778947ae11c9532e5794e620460877a5bcd77f370e8a90d4be38206ca393edceae3ac
+Entropy.7 = eadc5b6a6f8d10a0a7891703550ef40fc21ca500ee603a685ff3d1fb56ead70e
+Nonce.7 = 6c5a65d7e8fbc2a7cfd9fa7a5efbdcd7
+Output.7 = d428a298cbfdf20ef7bee8913a26c53eea49933a2dde421bca4b1c6b86506c6ca0ef0bfa13c030505748d5737b232480edc0bbc9e7b7f3ff8aefc292106a6254
+Entropy.8 = 0f9106588bc927eca285e05c8c170a68e9a103102a106781d8fb0a7688e491c2
+Nonce.8 = 2e58a859b7bdc816fb40b9ee5916a925
+Output.8 = e3decd0810e1db9b77490cbe78cad252c261f0f38051e5ba1e1ff9852d0a68a1fbdc798eb196f2ba132e6a451dfe6a9888833666bbc304c617c2d610bd5e489e
+Entropy.9 = 4162a42cb0d83d3384a1dcb9dadcc6d070ebd1683b3c0900f31d7cbe050e6aca
+Nonce.9 = 15f154ac7c825258de3d6689fb9ab46f
+Output.9 = 3eadb8acf7de3bd098297067366183a07990550adead0bbbe48fe87bfde21ca878e3cec77379bb884f28546c57c40e28e723f8cb8c9e04a850a46dc75fe90368
+Entropy.10 = 3652201d2ced056c83667157d7b0ed02dc4ba3f6d43799fda4a6d5204c4e3bb4
+Nonce.10 = 37f181837052d729a70b462f5c1fecc2
+Output.10 = b5bc59138df351490057cf9df97e991745e03b30ee9684e61812d8453dac5bcf54996d95ca1d71fbc5992d18de9bf224f2ba42d24e3f8d13e341182274cbcd32
+Entropy.11 = c1d3cba48d328ad2e41c75d21cb53b69ff16cafb51c241d36e1d752fa3de2dd3
+Nonce.11 = b1b6e9d1a50d4fa654ebd44663a8ec01
+Output.11 = 2b9ba1a9bc56c7f3e5b2d587aaf98d1e7da566cff5f2e7f91710d43f8cf7e485632ff451110af873e0b33f0dff468f09c5e3233d3807cd739982b5e5885434c9
+Entropy.12 = d6702ed5d03596d2d1daf9ffe9c0a19a479477f7e914654f7b114d18b63f507c
+Nonce.12 = 53b29d4b42d3c8798dc1e63df9f30bbf
+Output.12 = fb4e3f7b0c6efae148130f82d59cbc993812412e0f57b206ff0864f4dbb8e407eb7de2c68af8a5141610ed4765274935e6f37ef4eed37de273788576e7b89daa
+Entropy.13 = 7ee61faa3b3fd983ba3b350bee25bd075e2e6f172be964bbe4ff210fc92de651
+Nonce.13 = a0c4ebcc0aef848ed7b00d3b612972c9
+Output.13 = a2a190f0fdfaf66314d4e0071d4ec3d2914fa93f8964ef5608ec386bba034670ec0177350a780214bac579290918fba9b21ef9f4f1210034d0809fedc44d33b9
+Entropy.14 = 86e3ccf09382f46192d8937eba1dfc04ad8e12ef196d6d941970b16e15438bb2
+Nonce.14 = e2f9cc7eab26491e3eab3cfdfaadda90
+Output.14 = d8bc7e8220cbe079b4403d6b47e7976605735f953aabf93fd0039396ddb4088e436052722c4325f90eb868512ae7ce3927370940b200f3cc81da774779e90d7c
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8148d65d86513ce7d38923ec2f26b9e7c677dcc8997e325b7372619e753ed944
+Nonce.0 = 41c71a24d17d974190982bb7515ce7f5
+AdditionalInputA.0 = 55b446046c2d14bdd0cdba4b71873fd4762650695a11507949462da8d964ab6a
+AdditionalInputB.0 = 91468f1a097d99ee339462ca916cb4a10f63d53850a4f17f598eac490299b02e
+Output.0 = 54603d1a506132bbfa05b153a04f22a1d516cc46323cef15111af221f030f38d6841d4670518b4914a4631af682e7421dffaac986a38e94d92bfa758e2eb101f
+Entropy.1 = eb4a0add697097f1ce3a719d0d4ae69b1721dce3ec0e6c0e905d78ee212863b1
+Nonce.1 = 5f368e85c1f17b6463a278377f691f37
+AdditionalInputA.1 = f97801bce981b35081c25801400ec207433da4f17f3265a16e9e4e683722708b
+AdditionalInputB.1 = ae54b49a4112b3d978e966e2dda062e3652b58a14bef4ffe038520c9a675d353
+Output.1 = 6aee0b3a815c82f9bb0119f86af90793fc1f9996dd5b72bbc326ac4e6a5e874850b2fec1d7202c35580bd6727029609f2471e6c9b61629d174b894cd178adfd4
+Entropy.2 = 7fd6e262d821d5e5b660485755ea7961579631a4b964cfb4c2c35afde69ffea1
+Nonce.2 = ae8c54affdb76c5fd196fbd5a2c477ec
+AdditionalInputA.2 = ab81035cb3c017cbe51a2bc64751ce61f8ae02e80afef8378f42ac67060ffaf9
+AdditionalInputB.2 = 4f7db02d346bd41668fcf61bac93936003d22febd3b9f8c0234d151b492b16e7
+Output.2 = 930c26431a0fabb45abe418db9af10fe275580f499cdd717f7fcc94b59f952a04eef8f1d5aa0a4820ddbe413b5c3d7a08927346a90635ea2c51b0ab0e9cedb1d
+Entropy.3 = 7050790a8b22ffea19a505e4fbb3bc2a3b41fd947ce3dd50b4f738d8c22fbeb0
+Nonce.3 = 365628a7b6e7a71660fd3638351e6c12
+AdditionalInputA.3 = 1db1c19848580ee1f69a63814b41ad65ea1a54261e907d3edb80b5e9c558199d
+AdditionalInputB.3 = 061812906ed3314a9df0ef61b3b52b685ccc45601d69d9844cdbdb45627d4294
+Output.3 = 0e6fc5de18297e15b432a124a9d8877f9adbd23372406f263e2dd77c69bde75596eb9f8a7a25d0b45a403a4c5758771f224909d88408f174487fdb30554c1f3b
+Entropy.4 = 2968f857d583ab287410f455bf4462e8a717fb93bc200db43d12b1d133be003b
+Nonce.4 = dcdd146a6f2f9f0f86804f309216a7be
+AdditionalInputA.4 = 655eac56cbb124e17582a1fa7fa6199ebe3281101ec78bac749a4d1d287e1b82
+AdditionalInputB.4 = 26ba4b5401b9d124625a60d53f2d7b3f45db5bc43611d4cc59c83a1818169cac
+Output.4 = a7bf0e655020a2c9a50643ccde05fd95a64466da7a756bf1b9d195fbac0ee2059ba9d5f5e343fd8d6755a2e54c38803ccfc4e919124c1ecd4853715486be4f1a
+Entropy.5 = 8fd3b330fc138f421a66925f72648985e5a255e5997ff247e53362dff7a9a0f9
+Nonce.5 = 3c670e2467e3fb087c7ea6cc0af556ff
+AdditionalInputA.5 = a84efb4a464cc8aa75497f86c3515c6476cedc7b940f9d46ce401bd1d52349fd
+AdditionalInputB.5 = 78dc05307d0650a1a4c86491d5b31254f54850d57ee4ecfb69c9a4d268570ac4
+Output.5 = 3cb7702d62e76beec92f66c72c6313143c562b52ee9484c8200d331509cbe2d0f4cb4dba7dfcd41839f2e76749ab8015614a14affddcff0fdd4eb182f2bc484d
+Entropy.6 = 1828ce5341ed771c2c8e68ef5d5728a525a3f7655363c5ec01c3fcb30c0d1025
+Nonce.6 = fd4c5d43545e8856b61ca423e9580c7d
+AdditionalInputA.6 = 38c281995446e6c27363008008f9b28fcb5c00383a209587855c1d819d48bda0
+AdditionalInputB.6 = 9b1f6b84c4632a5b215fa3f84110c45b6bd53bccca792b4c4d2073ccc99ee363
+Output.6 = a3d79654cd4f5670a637ad40f47f7fd5ce21d4d18c6eab6dd02c791428b6a965d3f7eb0e6203ccb8ddc06f3e298ab313161294522f146d30844ca7742e02207e
+Entropy.7 = 7c15caae3d1d58acde9ff74d3516c8c2e960eca6daa1596f7b01d08e9176b1a3
+Nonce.7 = f0863c9d0f60aff6bd1abe2ea24ca95c
+AdditionalInputA.7 = 6e55d13bfc1662b7fefb1ec222e3866b4df1b0baedc355f4a523db434560233f
+AdditionalInputB.7 = 31a71c65dbabfd7c062cb2e1911777387bb997090b43e53dc9543465a0eea6b0
+Output.7 = c365b1daaa9cfd4ca168101d996f7b8982ecd0638581111c9bfda5289a30c419ea77c31326478b072faa0f00312385dc0a3bf26b6cd4fff0ce2efe4b0b557a5e
+Entropy.8 = 73c16ba19cfc3f8d3d4171a2a5ff0ebd8e1b1e5e152c1b459a588876d2db5fb6
+Nonce.8 = f29862b57a0896b5644493ed970e142c
+AdditionalInputA.8 = 7e481bda6e72207b6df74f30f59cfea699baafdfb8c504f874c98dd3f215787c
+AdditionalInputB.8 = 003e694185f02d9738a767b44a55f79554c1460a10c0676a7d227ee484c58d88
+Output.8 = bcf850fcd2ff56df24e491ea3369b65d6917c4aa34592829a777f95dd3d86a3b8e884d9da6e5320290d1fd8995f1b56ef47aec492dc720a211898dbc5f50754a
+Entropy.9 = ba821484740fcef6016528fc68b88096d103b24d1f08b9f9d9fd12ddcefc1a87
+Nonce.9 = ef53be20eb5aaa865449d74c48281815
+AdditionalInputA.9 = ee7a7d738c39091ceb31911b6149db26c057132aa7e40625ab4c2e24a1ae1ec1
+AdditionalInputB.9 = 71d4e37d8e0bbcae40813c33095581bffdb15d42c6bafd7581bbca26bea7badf
+Output.9 = fdb832ecb309ab8fd46d1a5bc64cb37a199a90684785d32d1339d75ceda5338ae6961ee41cd163633246d67fa603c4ffdad56abc3eecfd9e9397b629ecb965bd
+Entropy.10 = afd391b50a0f2e81fef3e044db9268d7859c2b61d53c7d1902a9af69f0414281
+Nonce.10 = f1bb5a1169445a2dd8c5a84527c10f7f
+AdditionalInputA.10 = b594b046a57960941e834a00a2cdc7d6f2430b93f5e26940b2d6941f424d4bac
+AdditionalInputB.10 = e7d767d3a81e39b6b0e98ff3ed0ce6ffbb43dd5b986b9cb8c2742bdfa02faed1
+Output.10 = 2836800d4e0a0180b279f0ee1ff6148b0b367709f9a9a3d10303d48ec8036a531792d3210d9d671746e203fc07cddb29f787777775ede3c98c50885df7ddfe6b
+Entropy.11 = 05925195f9735e38457acef4b726cbc58f83ca3740c5583176b1135c1584daed
+Nonce.11 = d5cbe95034eaad6e10e55a05155ae6b9
+AdditionalInputA.11 = ae5e511f357e362e3920ca3e7cdad2ae44912d64bc09629d2eeb9cc540b304f6
+AdditionalInputB.11 = 3fe1aaf5c791b83865e56bd19ed19a019d2590c0cd596eb72f4644c8c41490f4
+Output.11 = 3123c4e81a8d0671fee1d528328ead1ca4de8d07b3e570cd0c5aa1c666158b86c3b548fae600d00250f3a85655cae3f40999e43932ea75647a4df1c75a19fa80
+Entropy.12 = ae13a2d23734b2d657f67d6bab36e1121d5d2c1edb4e36f4ef2ffbc10b628cfb
+Nonce.12 = 6a1db353e3c5a6e6657c86caa72633d8
+AdditionalInputA.12 = cbfcce209fde4208efabb2417952b1c9fc22843ce2174608be04a45f1d9827c2
+AdditionalInputB.12 = a8d0ca788800852c5df5eabbeaf1f5fbd94beb746103b0436876bc8092da8bad
+Output.12 = d3868890e738bbf5602ca46e009dabafb16f5686fddb787c8cca32892360f61099f0d77cce39dc8f6e530540fc5fab3eb657114847d3a395faf40f8af64f4d2d
+Entropy.13 = fa9f4fd346555db35d3ee8f157957c8191e3e861844b4f5000dab48261f85f74
+Nonce.13 = 5e188b4ee078d57f91d7de219fc425ed
+AdditionalInputA.13 = 5eb248cd138b8fefa2b7e8fc752c0fbcb082be51d0f4e2a988bf5f87fc737447
+AdditionalInputB.13 = 7cf9606d302f53567e45b98c38d4daae232c925cb92e54c74bcf14104e32a113
+Output.13 = 8958d245d70235555a1eccf4faf2009d32762e332494efe5f48fa5d7ff30c7cbf07c9bcc3e70d62b94a4ed21db5e39cdd01a1e96688b3bb9b2c4ac0a7afeec24
+Entropy.14 = c764bccc19053d7f12df71011b35878dd0bb587deb887f8a05f040ec45e324bc
+Nonce.14 = a4b1a9ff049172476ab99f7ae0645e6c
+AdditionalInputA.14 = b6f2aa8a993aa04252d6c014eac8ad0b90cf0ed438888173e15eab280f73abe0
+AdditionalInputB.14 = c6384c9a2c9d8fc4c7422fe40e430e4f36e6ae9bd6b039d55abfdd8f05d6a20e
+Output.14 = 6300f28941dc173a9f6f5e4c11f1d1d7d4fd7fbbaf6fc3a97acdfc008a00109a670e487e5dce423a3eee4882347ef26449888c8dd73b9aaa73d194c171469af6
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5416e77b5e1d872d4ff91973b1be66bc07f4a99e30db7d0006da006fcfb082db
+Nonce.0 = 7a811ce62b9fd34af186b2b3e50eaf5d
+PersonalisationString.0 = 71ee0c7699ac0e805632f2058de38bf872b8340f89998f7a8a2ad4ac045ae6ef
+Output.0 = 68f5859cf76f94c445d9fcd34fc17ac224c3d7d7c2fc38faaf3c24be6cd3cd93b7f9d8a6146f5ac83ac1d7b1b2b7e7ecbc1a2e38760ef86a577d402d85990d9b
+Entropy.1 = 708eca2e3a9265a790607edbe05fe342663f84c6617eda14f25276a943901fda
+Nonce.1 = 75afb49a184b23506be14926cd4a03f0
+PersonalisationString.1 = cbb48ef84146c10e02240d8740d3487b6a4208405383c01a664ec7d3ada07e2d
+Output.1 = 26b0aa6e822c4cc912cf1dbae669c7dad0bdcff65f22813afd06225b7ff799f7803b3ad48bc88d2be0f5a357f620cc617f446fc6d212592ada69b7dc8ff4a222
+Entropy.2 = 44cc6b4433cec615c3c214e166c7dcff258f8cfe5748e642321cda2f7db426e3
+Nonce.2 = 6a2526954b5df989d61e1faf93dda2ae
+PersonalisationString.2 = 88226313c7f1ec03cde377970c8ea7d741a9f21a8f54b6b97043bc3e8da40b1e
+Output.2 = c1956c4195adfc3ee71582ab2c63edc0a78af49ecc23a3ddbcf2dfaf80c761fd6343af6d14310e719d8cd3c6bbb491c8690a7dd8a168cd8a480217e5dd2088af
+Entropy.3 = 54ccb1e5f044447dce52a470f47fe2682717dd296d64491ee2acc99e9ad6566f
+Nonce.3 = ff4cd3185611cbe06784e32580b2f23c
+PersonalisationString.3 = 132ef542f907b84c443d1973b3909b6d9a0d9124d38bd1e7c8833f48aecfc08d
+Output.3 = 0f2f56ea8b911cbe59a7b8fab1c710a7ebb6ec9a09555ca49ccddd9afd38ed61b855cf3f33f2c5bc616df6cb1726968483c69c1849e0f1b46ba029aa6f5debdb
+Entropy.4 = 3d3fdd9d90acbcee07002f17370045feb5eaa334fd74594e112114d3928dd5d9
+Nonce.4 = f85095294ebc5fddf44941be5ffaf10c
+PersonalisationString.4 = 59e2ffa164733ff11b5a95eb99a78366906de4fac64e512400081116acce5390
+Output.4 = 1244e532799f1ea4ed321894dac51b3c78d2fa5f0e1c922ffd2ff608275400834d03454942d31a2014ccfe07c2354112363c60f48dd12b29a3734128a59bca21
+Entropy.5 = 2536d7ea906d1eeea83e1c9da08cf76d095b7d4f55b433bbd5225aa870cc3f50
+Nonce.5 = 17704a7c50f937acf626e854e0b95f80
+PersonalisationString.5 = b61fccd40d9cebc4b927ba773b932957c299f779c4266a83f169b6de507d3127
+Output.5 = 8c3b0b71d6432e1022976c9c8ebb1406b1da995e2937221d18d751816825fca064534e2169cc63b5070529ff02b5ee5b7081a08ebdd87862595ea37a95c1e4a7
+Entropy.6 = fee982d87df4c32057cb499df6ea21dd6916dd38850a872abe34360f2914b56c
+Nonce.6 = 5a1ff0692d9adc5edb1af77461fd0531
+PersonalisationString.6 = 1c0d185fa4bededb781b8b73616def7440822172d01a619a2066b79eface685f
+Output.6 = d7c228e7002bc2a1a23a16e489ba8f0a61627ab4b2444f00f23ed3717b87944feebb169ee4e979089c35e83f243079e4771918862e15036ec6a9c9eee4bb00b5
+Entropy.7 = 25327b05f86e5079ab552e987ec7e2816259510933bc0c7a05c35e163b47b4ce
+Nonce.7 = 7ef8d6308ee6b5061cbcb850485a15a7
+PersonalisationString.7 = 9a39ed86b2e8290f74ca886b320d8e23d8a1d4953c2762f81f071d842ce951e3
+Output.7 = 211971632f8e6c6082f11076bb707ec9c65e3434c2727e59a5d13e543562a1da4d7bc2e483035d4668536ad1d69f6119045999524d92c48c4aede622ee53638d
+Entropy.8 = 7b163dc11e156b1bb170c22dcdd121eaea301d6172e3c0b4bbc4f377be040940
+Nonce.8 = 3233f156372869d937f3694c50ea9832
+PersonalisationString.8 = 7d61daf237bdea1ba3b0301f02cbe61ceaa188eef85b95842432470c65a13367
+Output.8 = 8b9e1b2aa950d016aee55c3abf0c7f1d3c1c0d8a62ce5d59e84b72a1322f1746efaf0e46e67b176643c7b57e3dbffbdf32ce7afffd6ff7f23081ae4c4f973eb0
+Entropy.9 = 96cb5f531e02ac254445673de5e1dcad51761026e778a03321b49c597745731b
+Nonce.9 = 139198de0ca982c49b8a88e5ab886cb8
+PersonalisationString.9 = 006f172e5186fb479f3cd8e3425a752b8f8d56a3f176c6faba6ca4a4ddeae637
+Output.9 = 388e5c98c054393084a94415e1a9ba32044c874562c185399b969994b6406f9ef86319102fd89df670903567f86de8676b0f72298aa00191151262e7e0898791
+Entropy.10 = 585af27f7f524ab4c5a7fca43b70b464cd71d7c5bfb4455e6dbd102d89335e89
+Nonce.10 = 0ac9cb4d14bf522616c613068698b16b
+PersonalisationString.10 = 0ca0ed3027d3b47f783feef18a40340cc5851b342f39f2b7d908910b96792e3a
+Output.10 = f4c2b3b86471b2fb446992791942156d85fac3c937a8e50e79aca792c6695092d67f807eb7ac0daee31d68f66a8348c33c315e4be1ef586dbd408e63db1d8ab0
+Entropy.11 = 4e7b5b7b30b8b90b1bdc043c788054584fd3945f45ca54709f89c19b75566dc3
+Nonce.11 = 85a400116eb9030c9249ceaee8dec9c7
+PersonalisationString.11 = 091f590f584230696163b6b53a11f52c2e9259aa0982d9897e7dc594199d48cb
+Output.11 = c89bc08d62335d3c28464ee2762285ceb0eefc9577195a8f89d63e05520201823af887305cff9b2d7fd17f60b5117fdcd0ed3ef18bac7e5f15080802a8ab139e
+Entropy.12 = ac2dd682a96ee0e818829db562fbc30a7c00e0193147c533e2a51b374a467958
+Nonce.12 = b8e6396449d884e9c6ee7ced8c7ad92e
+PersonalisationString.12 = 1087ed01b4a853efd8b9d3adc5893936499dd29745cdc6d3d893adc81d5a1bcd
+Output.12 = e1154b376b8c7c26151b7f68a5db274d73101803c1e7c2f6d10f374e4b883b10305a5d587676020d52c6c4a7e553bb96a953b6e9f2e4a7dd60ed4f94d123e4a3
+Entropy.13 = 4044299a1a97126a524597c8df580c9f54adb4143a8282336496d9ed41881357
+Nonce.13 = 787da4f01598b6f09e3a7b6865f90987
+PersonalisationString.13 = c778254d48628e48f4dcac3c96dfb2cf8410f9cdb6c00d625b411a0147bfe16d
+Output.13 = 1bfab93a54b7a0bbc6a77d63d8132a5d6c191c84e09a8591d2b7d88f339cad29d43cc8d0bf01d6ea9ffe27fa1ff7699c871a8411332ab0bcebce017aded3efb6
+Entropy.14 = 56e5dd70782fca50493b5d222b83b6dd7bdf1022d304f4f292db385f3acd8ab0
+Nonce.14 = f0ec46de4a9aab3f9e7fd47f60d20450
+PersonalisationString.14 = cc542e50fc0abb15b7dde7b0dfe841c79f748244a0d1d0a02e9f908ab99c61c2
+Output.14 = 7427c7018c51f3b060cbd8fe253a8b62b672a31fb848f55831be1b045f6085c91364853c7e353be0a52dcadb30928e94e1772bedbf27101a2a8ff8713d9c9f4c
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 87b56e964eba227154724bb9484b812d3e2c0c43b3d17f6098d9526e16e6d0ef
+Nonce.0 = 9bea6a7ff2358df142e6c23e2157fb83
+PersonalisationString.0 = 9860b432edd58d1ccbfeecbce99ffaee7d935a614860d4e965bd67041403096b
+AdditionalInputA.0 = 99a5cc87924e8ea65a596f81fd17d63f5b4542fe6e8e1511b5d35c835dfadb0b
+AdditionalInputB.0 = 9a8dec54734a34582a2332f3452e82313524c3e0dfb485faeac6ca5fc0ff504d
+Output.0 = dbc6a2330b19b5cddd8cd6392ec1fb508678c805e87d1aca07ac265007632503044a00610c79d98375afa7ab4cca1a90989cbfe7c674af5d823ced11c47e9af6
+Entropy.1 = b36032f5d777250826d831566ec585452d70b920654355acf8f691941643ee95
+Nonce.1 = dacf747e85faa6a3eb016df929c90e8b
+PersonalisationString.1 = f03265b2f2174cea938ff23c7e60a75dcba1e4e412bbad4b5d3b3e23685e80d8
+AdditionalInputA.1 = d4772380de774bbbb6100d9339590eff033ff548b826685553a2e857800a07e2
+AdditionalInputB.1 = 05011d3dd4ddcf19076fae656973aac9a11641b210963cec81d1ea58db7bb7e0
+Output.1 = 3d3531057977401072ce44e2e66317a808d47c44aad4f98c08d88eac7b598c40714ad12417b61699d1126ea4c642b09fe9f5ded36f2e37ed2cce972e0dfcc7ce
+Entropy.2 = 3242a1b97c11e5ea8a1b96ccdcc25628e79ec5d14b041558d312ea72a3dd0dd0
+Nonce.2 = d9f1a8dd83b0f11317a92d2051e07e97
+PersonalisationString.2 = 930b0c3b96263c3ec7edf25890cc5d7ea41d6564a81f17899fc7b49c5c40b091
+AdditionalInputA.2 = a905dab4ade75ee5e68a0709d1d0699a87f5d4f8e49c8c95d9590d7c1238d0f9
+AdditionalInputB.2 = 4d8e2d92299765b9cef039d947d4427d4b9c14f42c81e12bc91b4e297233fce1
+Output.2 = fa3adb6a35e0508534803eda5f39d9fd62227474d9e1435ed0e5e6da01e2e4d83a3da9395a3c96efecdfe92b89e15e8caf25e81724b3973551972a8ff5b5cd0f
+Entropy.3 = bb2c5c0de9dd276942ca0a54faf9a4f725e27b196a6f16e9dd34595379e5b869
+Nonce.3 = 7630fbb71d49ba0ba36dd88d2d491d61
+PersonalisationString.3 = a0264b5005dbfc57194bac89089c16a785222af008310b20a6085ee741892ced
+AdditionalInputA.3 = 634fd7cad000b786fe362c914857b5d9ed2669cd5c777c52075cff3840bb58ab
+AdditionalInputB.3 = fdfe161f0ca0e6ecd6356adb646ef62935d8cfc7522244a6041cb3d7cc6e6839
+Output.3 = e3c78a24d5a34b2a70264d13707ca635c95426f422db78c18c91e3c40fb7392c02b0a9ed2e1d5a9c73ef456c37afe6ae0cc1867263b4630abd7384ab68290342
+Entropy.4 = 7374b723d41ac87cd1ee53880c0d76bd958b50a8714ffd070f453bd8498622c8
+Nonce.4 = 86e123cd4f074c7f073163fb189af9fd
+PersonalisationString.4 = 16b62675e9f924c6fcaa133c0c75c41b5ede75bdfd4a70110ea74afb73d25697
+AdditionalInputA.4 = fc060440872ba7ee4b26b0cab6707cd388c69d85acb57d6579c8d8bc4af1adfe
+AdditionalInputB.4 = cdd150f8d70d5aad8784ea74c5098605f83cb07f69dbade193893bc0184dab39
+Output.4 = cb7e38fcfad91f1eb82dacd2ce9911b79bfdb07edbab2edf24190a2d9da171c18c62bd10e3b7d7ff019b666ebff42677d79b401ae64a4137287636d49caddcdc
+Entropy.5 = 0db75d22f0d16902c7a1813b0adab2ebc675f4305738469b142b7f9a39d5eaf7
+Nonce.5 = 1ace393a30cb36dabfcd85483491b948
+PersonalisationString.5 = 1f9f7abfca5d5365c644f7d9d33d1288cb62b27e873a4d52aad0e7cc1c895388
+AdditionalInputA.5 = b0210179bb14598ad30c4fe1f2bf43c781ea9d8b51a26b8855a812b55a1cf894
+AdditionalInputB.5 = 73a28b72cda9f831e21b776bc92e3404132abe5d7c2fe1c26ad4ca6ca6e4ea47
+Output.5 = f7b6398260d30e5b240dfd5ba0136ba2da98b8bf253f7a7c1bad9132625404e89988d271baf0a26e19786106bac920b9433cc8b4f5b9853e247c0506d1b11488
+Entropy.6 = 6bd081c58637e555105e141dcaca4b95b5becf399673db6cc0e96c66e16092cd
+Nonce.6 = cea71de8819b599937dba48477ae9fba
+PersonalisationString.6 = eb045c2985ab91690758c2b56c7dbad256db16efc414344a4bbae254be4170fa
+AdditionalInputA.6 = f132bb2e731cd1ccfa373b4d1e8a527ed08b429447f32b23b96d312e5babdd23
+AdditionalInputB.6 = 0a554ded57c1efecc4d4a01a82ff1799c6e936f9f93402bce462102c2d25910a
+Output.6 = 7de60b0a40fb8359da9292c68f261631d184b03e904733b5c963966a74d4875a8f365087dee9c2cb8d05778b0e0b46e526bca13c4c50be490625ef050a794528
+Entropy.7 = b71bd14e1587f6334b7f94642616a36a55ffe4a75eeade864ea7051e646bad52
+Nonce.7 = a43dc97f411be97cd18dbecfce562f23
+PersonalisationString.7 = ebbdb81ec03a13a15a03db5698f34aa8c02938bf8785f13fde75cbcd823e61f7
+AdditionalInputA.7 = 5817e39393e88f0939d5a8d70383083fc66d9c533baee628282df78046fcd8fa
+AdditionalInputB.7 = f967a6d79c657d0bffd3346fb28046911b1f8c3031cc6e2204c2c9e888432f77
+Output.7 = e1ba47d45d73ba54da503015987d8e1214c34687a6ff786a880c98e5e2e5590eae69095a93216d1273504d94dea67c51f4a8a5d97d0242890c394bf73ef52d63
+Entropy.8 = 0d970ea0a1e89d36fb66a73ae7a7bb4760ca9b0e2296e2d241629b99249ac9f3
+Nonce.8 = c03031dc1cd9cf62c4d03e2e3720391b
+PersonalisationString.8 = 91682be81934afd81dcb638ba8883a88913e3265da1b92c8d9b34a2b906624cd
+AdditionalInputA.8 = c3b33dc2f98dc8dedc2254b382654c75381a4df071334ce22860e92c6164f8cc
+AdditionalInputB.8 = 53b2ae27f964fc862b39f4a16d73a9980e81946cce5c2ae4a5ef6a25b92a08aa
+Output.8 = e3471abee1167a57667132dd31590e95125f61957ecd621ddba49ebfa53a8f5afeaa30aca1adf11ca20de2cb08f0dd4329d950d053920926931f672827931f8c
+Entropy.9 = bed960ee26eb33fdf4a62cdffde84e6d1832c69148a2ae5cbc9ba5036313c2d2
+Nonce.9 = 53e092e708e8b8a4a036ed6d0cd12870
+PersonalisationString.9 = 0803f28c79d53f057953db4a1ab5a3cab581f2c16d1e083f2948acd0fbf9beec
+AdditionalInputA.9 = 429a3310c1ae6731d468ef6f2b1c9949bbfc8d36eb66fbee0c862e42586aac3f
+AdditionalInputB.9 = d7a5d580048dba0ce676b5047a989eccf3e4052a6028efff29e7cb0a13ab64ce
+Output.9 = 2703845ca040ff0349b66c1bf8226ff89f278757baadb74d2774fdb54df01774f04bbe9acd6bc8e8a1f2d97aeb891303a5337bcd69ce4afd4c6b62426449dd63
+Entropy.10 = 8e7b6275c48fa60aae68bcd6aeded17fcecce712ba47a5da79dc8883a2b2b443
+Nonce.10 = c1aa1c237e69853dcf44c7558dca07d8
+PersonalisationString.10 = d5737e7b1f4e53dd924151fd71c51a77e655f5173ccdf0e97351241b570ea4f0
+AdditionalInputA.10 = bb70b8db19d3c1abfd6d2513653f2483be4330067ff66b8fb62fc8e672df9628
+AdditionalInputB.10 = 0005e31b9334242beb2f3ca988603f5dcba685576eb760781d9f47252ba5e29f
+Output.10 = e030085f667937f866e13ad0854f245b8f392e07015e0371d5ec72b9271ff9f0946a6d4469c7701c485fa49ad79ef5dbd0b1010d58d6b17dd4054c1308150065
+Entropy.11 = 80db28c5457f9b557239db5951ce1a29a5b8e4856c7f89d02858946a278cb705
+Nonce.11 = 9414cfc5452afbe4d93afaf162604b0e
+PersonalisationString.11 = 78816ba6d7b63dc201b59c74b11d2918b058e7105828cfff5dcc1781cf1dfbe5
+AdditionalInputA.11 = 6356db39f59e61f88da615a79e6217113f79a17c17a912343412efd0568ec233
+AdditionalInputB.11 = 448c62e972abf9c40bf9185d42b345aa6fba9b98eee2353a5fd01597387b6096
+Output.11 = e660e4e2b2425871318c453a6b311d0bbb01852bde280b0e38d6c3d07f4b8a9b3a4fd1a26d263bb757447aca1530a041c127a77ee2e5ed83259f6462e1dbef6d
+Entropy.12 = acedba215c390babcf0f1d46193c189e15c580c1bf490965bdee963d38fe9713
+Nonce.12 = bba7799f7241e126786d533416863a33
+PersonalisationString.12 = 7b1e057ee52ca0d4153c1ce64828c8705230d19f900d7a771aa77182fcc78807
+AdditionalInputA.12 = 6cd1684988d70d569b0af5585fb9b8ba698b599dc4a0bd7b219c2e92014a1ef4
+AdditionalInputB.12 = 857a8b64a820a21bc49a163f72175fda94a2878287866cde8636d46fbad9de33
+Output.12 = a321e42eab684150fe55db9e1f4efc9ab6bc94adfd78b87a8d58ebd11d20ab3cae9b0e1bdb31f1ec1c1d85c1f071ace639c053a0682a077147314506c07bdaad
+Entropy.13 = 5dced2afdf72d22d2b4280e181186eb3fcd55cbec0d4a026936262bd0f7df636
+Nonce.13 = 076cde762ac39b18e448826edcea429c
+PersonalisationString.13 = ef7db5dd64028a6745bfe0e57c8305c45ec24438d9a65371b7d98c93ab7320cc
+AdditionalInputA.13 = 643be9512fb8235a12db981111079b5c453699d48f0b1bc00d643ce0e017dd04
+AdditionalInputB.13 = b853e79ddb46b2591589fee43d3dd7ad9ea169332f83d44644c30b0cf5c9792d
+Output.13 = 487878dc78a9e86f5faa7f779976f3f0c207f8e9cfd31bea54bf121c41227c86d72564c0a1b585e6f284aa732b5dbeac78ab5ce172b286f6dd2d7b9763e76725
+Entropy.14 = 4d6d0d6c03552880c0d0c567f143e297f77d9a5ecb547c28abcff1715b061084
+Nonce.14 = 1b477661132834abcd713be227978820
+PersonalisationString.14 = 1c584491acb3f1a62ecf84120e4c6adb676c233a1684f2d1b8cd542a629f6c84
+AdditionalInputA.14 = f24b8467ae57669e4ad67588a41f9512fd48976642db1737122064a1c1234448
+AdditionalInputB.14 = 7a6f1a191117c2dcd5c9c175c827d8da04e3802ae835b25182fa83bf91dc6871
+Output.14 = 1dcee0afbffb8a0cf4002cfc262c4fe058d13e35c74c70b010476c7153313d7145df889c2f991f8f978f0d73c95e867c4d2da4f3f4d932d0b9a23c78e0f112a5
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8b0bcb3f932170416739ea42e7dcdc6fa960645bc018820134f714b3c6912b56
+Nonce.0 = bac0fdc0c417aa269bbdea77e928f9f8
+Output.0 = d9c4fd81f6621a8cf06d612e9a84b80fa13d098dceaf2c083dc81cd80caedd105c7f2789963a167d72f76e81178001fd93de4623c260fe9eebced89f7b4b047a
+Entropy.1 = 67b6e84d5a560af4d92745853da83c4e8dcff469869eca69981055ba4c6f84c3
+Nonce.1 = aabc8d3ab593dbea35fab1ff6cdc26fb
+Output.1 = e74ad622a71298983aa21066d788fdcd6afdc9aaf7fc8a55534ec0917d6840d15c1ba2f0a703f04b148bd7bc4983b279a414e3937c17a8181e644ea0662dbebc
+Entropy.2 = be57cf16b26481aab3164b8060c29f17982711b451188deacdc9805ef7e016be
+Nonce.2 = 85484daa20b8602507b3d76850939e59
+Output.2 = 4b95469216037de3afb2790dd1523473cb8dbdf7230b0f8543f738c6baa0a1a46d13366fe3164f245676dfe1af0214c5581e82790fde30b0203e4554804b9826
+Entropy.3 = 3cbbdc1bbb6f005897d65384ed7979df6d7108559c3e7619d6dfc8dad8e6549f
+Nonce.3 = 7c9f78b7d15ea73244123ffdb4489f0d
+Output.3 = c21af26518c97d6763b753939ab0df09cd2d59fa1090933e2641c9439f79fb3b9022fa6e07c9950ce9eadc3327dc49f91dc8006c7da52b021e5ae83582f30475
+Entropy.4 = 06311cc81e75b12269bc67ed0e1313480f324b752a1fd783ce09770d1d4000fb
+Nonce.4 = ae2cc517b215855b1e91d1f7942d931e
+Output.4 = 5ed914438a62cc4d463367b17c89604290e9723522ef801ead515ca352e099d6fa1362ded32a3fa36b2453422f114f8cf246c18c8cdd786aa243801caef2b2ed
+Entropy.5 = 5927ad80b12b86269eb31e85c3b122a7b82d8ed5782276344be3f52edf6280db
+Nonce.5 = e6740d3713da617baa5a5cd5b4d6bed8
+Output.5 = 52f310ec9adcf491de58dc52595ddbb1fee966e69e60ba0e65bed7fbf8dc3d58148538a1b456aece1b41479dea06e1015b7b10deb66c9774029f0b52ceb1f58a
+Entropy.6 = 6ec135792f27026772739e893ac5085220351f590575feb9a3d3792ac913d8a4
+Nonce.6 = a0969cdb40591436cb637fe093156f16
+Output.6 = 08d2735718f9c882322fdef7b121339d5a7f59b074d3c6f8b8fc517a072d356bb702d90dbcec40e01c4ddb6281387e731b2bd0e72a6164ef4a721dad01023b2a
+Entropy.7 = e9c48be6d65c8dd3bb372231dfa8a7078df501a9238d631161cee3f0afa97889
+Nonce.7 = 1d32b5a37be3ad6096e80c7fabf8a79b
+Output.7 = 024fa95b3cef85dd9a227c93a8223b1d02d57fd506ed42a103f7ee0d9205cad9fc51bcbdb7c401d15fcb06e4a5eda17536fe9e93812eb99a879b9106ca0b6d8d
+Entropy.8 = 6f37bb62e2b301de8ff6c5a80ad8634ac718731ba789b247c3507216f64bae42
+Nonce.8 = 41e514980d2c79572584d0e60f202c67
+Output.8 = c1ad074fb5748f09a34b8f8b8b15789d26a6aff4714095c54f62611d88ee2a45a4ac1110a3e4ec9d59ba85ec1d80daacddae3ea58f9539219afaf57fe953536e
+Entropy.9 = 54902f1ce788fddb8d815a80e5b02da36ae09fe2cecb6cad766b757238a09546
+Nonce.9 = 52fc08265f84bb3b2f5dab01eb8ade3c
+Output.9 = 0d114d27d1c4ae86186c313e4f1bfb002de3f2a827b7153941f90f994b56c8c266816cc69e1072a2b3be19c29f80ab3d039ed5722fedcc016fa82b3961782858
+Entropy.10 = fe55e2f96b16d2dd915ca11e2504d720f1aa1918631c472cb0b4499b7d886b56
+Nonce.10 = 8530fc3eba5a01b763089e8043dfdf79
+Output.10 = be3e72b3aa0b07d0756645a5f5a74aa6a015b7cea68581fc8ed762660d9e54a7810e712d81988ea706ad2b938e33651a3e8a6755d592f5217ff2c9ea8f41a5c4
+Entropy.11 = f5fc14971b966a4f95bb13d55a682bfdc7da7f26c943db401a179f23f47ec3be
+Nonce.11 = f051eebabce3599021c364811b11f28b
+Output.11 = 9e184c66834d73b4610e5362cdf908a5f84939ecf01a58ebe6c2dc50ca0c24bed994a82eec998e18afb95727c42786f5e94d60c606576af83f3b335279a1014d
+Entropy.12 = 26e6f44b112f5240f0e2249c2aa4d5df3df09431296feead01cf659c62de5007
+Nonce.12 = 8caa8a24c28a17cfb68613e2fb3bf37e
+Output.12 = 91a3ad60da8a72d70405a1ba819ecb147f338868a41668db59fffb0311a8344ae0ea58d97b6d3c316490b5c623653e816cc1b91d5fcd9b4d70e7717d6ee2b702
+Entropy.13 = f291d7e5c2961313184f8023277b8fac09a543a268ee506a53417067a8cc12b6
+Nonce.13 = 55243cc5460e24bf0c2f92c0cfb23eb6
+Output.13 = 809d31a2a26c940b3f045f16b859f2708fd9196a3983514104d80f1f68166af0e48b98271b76a267ea1e05250a3f7f2581c1d6356708c293f208944b3da0a425
+Entropy.14 = 8b0878d733c8a48a79fa674dfa889b34fd0522016d2f68fddd3dd05f1af78506
+Nonce.14 = f772496334fd93b46647297ac444629c
+Output.14 = 9191c5970a37fdd5715a7c6a09a7dddbfbee8d37ee45a035b33823c6e86fe0e2e2e57ff7d08e0a4f39d81c18b9b5fd487e84ca95df372d36dcbfac682e044b34
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d67439abf1e162e5b25941605a8aeba7d686dec133257f6c220e1c595e954a07
+Nonce.0 = 69ff3310141dbf3ece409ade58745113
+AdditionalInputA.0 = 03e795be8379c481cb32534011ca6bf524dc754978ee5ebee475129ad39eca98
+AdditionalInputB.0 = 5685c7330f33004515f8c0ab27f2a1cbe0c8a4a6806d6c8486e0217b43e859f2
+Output.0 = a6d22a4370251c51978fedc7e7753c78179ed1943d2ff1b5a374860106041a304b124d47cfa304c909f7d417843846d52dcc7ebcf5c93afef885c893b40c81ed
+Entropy.1 = 8f7c8cd0bcdfcce6614cc6511d5195ade6dad5f61fef59886f2402122e430a8d
+Nonce.1 = 17d1412b8344599a39b960761c6ac39f
+AdditionalInputA.1 = e539593cfcc79ebd0a5e7be3243e51a77bf3817690b2ffc80ce5dc35f2b2d4b8
+AdditionalInputB.1 = e6a24e9f7624afb3a55d9974f8cb1addc4432fdfeac7c35a616111581cd19b2f
+Output.1 = 5fc20736da9cf5a810364b6aca24edf758bd20ebd33173db874b641b8470ab9a8a633d1238ba990103956c0f5e2b284f3b473c28d0055d7e9bec0b839088917a
+Entropy.2 = d3005b86846d8b459ed9105218a1787c1d80012053caa38ade196bff8273c893
+Nonce.2 = 3a689f930cd4c53862c68191b5adbf14
+AdditionalInputA.2 = 70c4bbeb4f7f527df7e0ad69851b66408b2154e7a26fa542d92f0e5b1a969575
+AdditionalInputB.2 = 860572f881d5a97cd7c9c8ee39e4fefb67b9147d37fea5a64f58cd2e7ab68384
+Output.2 = 4d8b578e27ad27de264c63c3d2f8713d58022c541499335110a280990bb0b3d38a13943cfabb7a6bfdc2db2c0509098989e131c89a7622235b769ecc2c509dd4
+Entropy.3 = 0b9925bff68f29843c8a05c695de378b370e8dc9a6dde33fe86152fa587af1f1
+Nonce.3 = b4385b66096b2d2d0dac689d043c6091
+AdditionalInputA.3 = b80bd934cc3e73ea85ac4a7fb5190d1fa2988d29afb3a308c92205c0b745b070
+AdditionalInputB.3 = 4dafcb7528232034d261706361cc87671875ee67ace96cad099b1266a75cb728
+Output.3 = 5b561f9fa2602b553bc3d4c9001f8b4d98591c8d813366a79206eb3d7e92b41c34aef32380d79d4f7df6735696f147ce5690c3c5676dfdd20aee3b4fc9559e17
+Entropy.4 = b7c322f812cdd3c186dc9dd589f87d469f64e5ed80a04e414418e264008648c1
+Nonce.4 = 8b669fc0e3acb7949041005a27fc1445
+AdditionalInputA.4 = de101fcaf1c3bf368e7040d39d57665c835c40927ca863d70f74341c1a113b68
+AdditionalInputB.4 = 7feddb0e87864d35879466dac232eb86fac0c4fd745851261a6355d36e018005
+Output.4 = f79166bc53f73bdf873d76ba81e1eb62970327c8e6fac10dc23667b9da74ec5830f55025d952eaac65dd3b52c1517c79b0559a39c54d30c97cce832c1bdde4f2
+Entropy.5 = daba89b62a4475e8c2214052d204c1ffd248e0c3008a0bd123830db5023e53c2
+Nonce.5 = 77fc741014e514243058d3a2cf036374
+AdditionalInputA.5 = aa932a71bbbd86b3f3a702fa384d49061f31c25e809dd9a03034ac3cdf6b2ef2
+AdditionalInputB.5 = 9262caafb3383faf78d9b0440f0c5be28e260f3db77728d7fca679984cc38ddf
+Output.5 = 784c8d5881349a13bc1a38edac6e8fe7dc3a3b662b40b740ebe8c89d144ccab319b4cd90820dd3f5ecc3100c9f72878d5eeb21f46234f4094b71b8b34285c550
+Entropy.6 = 8f7c640ca15c75840446d442f413bbfeafb4c2b8875f7f1bfd16122b81e1ac1f
+Nonce.6 = 696013a4c7e7c724a40723b5557b0056
+AdditionalInputA.6 = b7d25770e0b2bd1b6a8220f86b3d759d20d8508980cf591f443dde3acd3ef648
+AdditionalInputB.6 = bc08f84621afb6a7d331a01bfc5716a31bcccf05a78e696dc7689b985389e12b
+Output.6 = d486cbac794ec9c6b2acc6aadb93e32b30b27ea3721fb614e82347eff461649cb8d0f6b43a39b2e5f6f403ff4afefd90adba5e96164ac73b27d8ae2098e632cb
+Entropy.7 = b8bed19521f6d2471b761437f10c9db9af2ac3032127dc5eb38e157182e2e25e
+Nonce.7 = e00b1b8712b219b78444a3fcabdd0f68
+AdditionalInputA.7 = ed744e7861759e337e0d8db5eda6f66cb14240d1ff7a86f90c96dfa2f4ce85f9
+AdditionalInputB.7 = 90f3b8920dbdbd8ff6c6601b57a5fc90aa13bba98843dc5143c0182ddc231dfb
+Output.7 = 3310be30088029e13524ea9e8d6bd9efaa72d1c58d4f9d7e9853508ba163b906c458020be3cb7c5f3a2fa88953f127e7e117c1f38947a6680b53d28d565a3ddf
+Entropy.8 = 014276ad54579788dfdaf12f2df188ffefabd35164f31cc873c6d391496e09ee
+Nonce.8 = 4662ec7d07bf4ff10bcd0c834106e179
+AdditionalInputA.8 = e66f960f9a893d39d11c0426bc9e7e1f6f0750557a6969e445cebb47d2f5d427
+AdditionalInputB.8 = 6b39f45bbb785ca9ec23303fbce7093a26fb879b13fadd927dc95019b8a25cb5
+Output.8 = dda5118ae234e6aeb5cf634e57a3a3ce7681bd803690f8d68886ba5226fb40182644a643a554cc586d9ccd148a75240142cd8f62ebe8747b4be6e75323582006
+Entropy.9 = cffcfbedb35ff5bf3c796d1ab94a8ae1b935addf6fdd8be000ae3099daea7bd4
+Nonce.9 = 1f7ec8658f17e64d1ed1b49815ef9bef
+AdditionalInputA.9 = 8d44eae3908e4ad53fc0fab41799bb0356b3ddd473fde429af21d7e04b426b80
+AdditionalInputB.9 = 9e3f828e8ddf07ceb58fe8f1697daec666b9e250fa5a836ffd18ee173650e72c
+Output.9 = 100162aa4180c5e5a18c51bf7d2b78ca944c70e62bdea554837a868135ccbe1b79bebdfae409221f438df72833b8dd9d17dcbe06ef8d1901012731c7be12fc53
+Entropy.10 = db31ef9dd1266c60eaafbeca542f52b4fd989b4b436935ea65ebc62554be962c
+Nonce.10 = d03a8ba034852b4f96250bdd89f36802
+AdditionalInputA.10 = 62ebe7715a7ddc820e44ab313767776f8785b181426fbf493e7cbcce1360fd23
+AdditionalInputB.10 = 0528b69041c4e5eadab618a929f176f77c345b6d89aee9aa955c5a8ca8fc8b92
+Output.10 = 017cf4ff686df4c06fbbc0be9789b828f15be54aafba7287b4391e9ec7b7d0025db012df4bb35c74061677207a7d7a061ef123893ea4d7c8220ecacad56848b1
+Entropy.11 = 06b26d4ffab4a8611414c8fde87e51692ffe5078834b5198193df7f98f1c5261
+Nonce.11 = de49f9fabaea3f8dd1ec581c71d5c1da
+AdditionalInputA.11 = 6bba85a3f393865a6a7b733916c28ae39ba403a0348a2d3b7a33fdf819571bf9
+AdditionalInputB.11 = c32fd284c43aa072eb72a7e47f408a877ae40e1209d112c99d457e7f9653cb86
+Output.11 = 1f0f5404f51d48c3f3623b938432f7dd4249649f61b6f103c2fd8b30dbf5b4ea957b5de096ac47cb107e522df0138076342d6c2ea08ecc2b481c3e73ef48a046
+Entropy.12 = 21be1442e68953af2656ec3adba3a65a7b459b7ab4e79c775ad2544ce9a4f8b5
+Nonce.12 = b6221e282e81f310a6a2efba73b0490b
+AdditionalInputA.12 = f276b8ae6ea4d99b27ee891935300f309a7e6f154f5ac6ee273883ca5357ba6f
+AdditionalInputB.12 = 93268a42426cc310ee18767d9663269f5e1c46b96c6b17b2f8bd6ecec3435e42
+Output.12 = 45e85ee0300a9462016c4b7d4b1619c76d4aa9422b5c45cfacadae24b934ba190f76a8a4551a23e8e14473ded8f79bdf91b4fe0ce163928af2c1eadfc96d301c
+Entropy.13 = dff8c14a6119281276e71c91d66d97e29a141e06537eaf6c2febd823493b7e3f
+Nonce.13 = 1e98174edb228d55cd4f580427acb37a
+AdditionalInputA.13 = f17f9ddc60c63fa80436041e5a21197e5e378ecf70c7ee392bd6f8929df1eeef
+AdditionalInputB.13 = 1390bb276929272a9942f294d5cb64d6322c1cdc9a6f87f1bd4e9ad7ba6d829c
+Output.13 = c1adc5145db9b5eb35920a94b7632e5030e7fa3810300117a936b887b8bbfb0c51169e70f26c0bf8798385bccdd7be4f7c53b3bbf97a65b16ccffcb1d52ebd14
+Entropy.14 = e8d1ca5dbaec674722369d3221a3dcf2681fb370061e488827a00790abbb4080
+Nonce.14 = e5e6144bda93752989c54a702081af08
+AdditionalInputA.14 = 9eba53d0abbcdfb98439cec32a14dc79244ac3616a71dafeb7175b71f982e214
+AdditionalInputB.14 = 76e4aefbb68896411bd793667e0e3bb3ded837d3a2bb370d944c20e5bf03e6d1
+Output.14 = 6f6bed605bc0419e367a42048585cb10540d3a035fc9905fa004729fefea4671ef17aac2cc2c964f35e740988e636d8d25117c953d0af6a199067ad39aa61663
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8782d516ab2e0720816d31e841c4976583f5f2356d4a6b75baa0c854d81e87df
+Nonce.0 = d3a0df6e410cba3af82b2e914e52b19a
+PersonalisationString.0 = 9460e6673c94ac44f812673c25b8905456c32fa7a88d019c9b9af0e9e6dfde32
+Output.0 = 73be5aca786c4d2001f026a48fc32e0d5b9c43f5581589809f103cf91fdc33aa000703c5b9a7391c4c75126ba00f9f9cf368b0f92a72905ec11f670244d02e33
+Entropy.1 = a3a058ec8f4963e3e4a5e7aeadead48e48a130f04ae6785c184d76ff8c78134e
+Nonce.1 = ca4ff0c8c05db6d766f356216c3b5fb4
+PersonalisationString.1 = cf95338ce69272324c751759566e99eb9a2a618cedeea977c360a35be7db807c
+Output.1 = f593fecdecfd70d9f7cc093b4cf0502f178c9997ce7f3b95cbafbaf6e575637d344e2c9b7ebcb9ed6048650639ea48d321c626086b28002d863cafede091e7e5
+Entropy.2 = 91f74d6c798f6e1842e36aa61019682e246a2eec04aac8f7c5e849dbd6fa677d
+Nonce.2 = 800723008b744351979ae85d92fd217f
+PersonalisationString.2 = c9b38f9b98b7a0043b13d1926c27265521f01316e8fe79d2efa8b817b23aafc5
+Output.2 = 5a63770230a4a048645ce1a75e50ea792c219634565f24ec52fae6046506c5b0529a798c6bb71619a24bbd71f90335e93c41de3fd0fd1f3ee3204b9c6064b735
+Entropy.3 = aa40fd98eea752b731545a6b9386b2ff356ef7d9ce88daa2219a5c5fe57109c8
+Nonce.3 = 110acdc86c06edcf8d612a4f2df6ea72
+PersonalisationString.3 = f17a8e0d460e758747c461782aee6dad4a2ea8cc26c33b34e797c9ae8f8fc632
+Output.3 = 3da63f9fee355441fac4084bb9766851cb6c60b7a94842d2c7623b807a4620ccae174810c21d92d5f2676f9e84a5c98b9a8a23adf72ddfe39fb788f289217187
+Entropy.4 = bd5daa18dff57e90762dffd35a05a4a739ce7ebf087f4293f2c7a031d17df9eb
+Nonce.4 = af62923ef214462418439ec8dc553c9b
+PersonalisationString.4 = fc9e138be9170c8312288191039b033bf41ef1d47f4e642357866b875c7f183e
+Output.4 = d40ecb4e47e55460c40047d60f852878b915268a4f13796cf5d9aa0d67f6da8809847468d7e04c039a9f9e3d9e5b4d53ce8f66fe7d88a4983c5111cef6037b33
+Entropy.5 = 5a57109bf7dee009922623cb8dd7c6029d14e6f3997e9a5405739bd85027d31e
+Nonce.5 = a4c9511f90665b44218d45c627d8be7d
+PersonalisationString.5 = 2a6be524c3f7a580150f699bcc6ba10b1e26cb85712621ce00da3f363c8b1c46
+Output.5 = aaf4c6e3ada51a1ae62c24381b21ad4aed83d8ae3945eb71938c1ce2d58627115e5efc3c58e8056e7f7190ae550a8f1b46d1b58ae3ea9af0b7b1081aa7fd3630
+Entropy.6 = f43d1631397bcfd6c6b385106fef8e72f97284502862d6464e610cede7b9d8ae
+Nonce.6 = 741ccd9aa487fd775378eaf31eb877d8
+PersonalisationString.6 = 9607f84f0b2237626da9250bcba646a06dd80049f9a28c4f0b2b631ffe730d5c
+Output.6 = 5097a9f27eb3ae423281b93b77208258150342ea4245db7f1c4e7347b6a380c81e27b0eb00610e842e2ab57ddc0345676719b52af6630d5290975e6575a017b3
+Entropy.7 = b9f8f6f67350b2b674a98ec3ccf9f94d5eb9ed74c674ec305dd98fc5d8c64d93
+Nonce.7 = ed55a0e682bac6ad5d6f86eb31f3b15e
+PersonalisationString.7 = 9c299b3dc0782f0746ee9aa19c24fceeb7b350dd3de9727a19708f41d99c86aa
+Output.7 = 2ce4af0ce1d65a8378d3b896ad2e16b9e8bd2a92d595c107159c386a59937054636b6425ec731c1d838c530153086468e752ea34d2ad64c068f0015341aea6a1
+Entropy.8 = c699205859904c44a7829c81a581d636a97c3f5721125769d8070b638fab07b1
+Nonce.8 = 4ddbba6a5a137e24ce4b283a8ff527e3
+PersonalisationString.8 = 22dc486c4fe19af1f82089bab3d01ef160b6f5e5948369c0acacd6a5f411f737
+Output.8 = ed8eab6c640e6e061725d718f767ca510849542137da84700bdcacadf1cae5dd03f6edbac0053f1b7fe2cfd5363a2fb8129e149ac74764470b8623474e8b204d
+Entropy.9 = 164af0b91ba367e7d949e0687a7cf1825919745a2ff41a28c06e9d647cea545a
+Nonce.9 = a610a3cfc51cd6ad869fa85086124aa7
+PersonalisationString.9 = 5d03586dcda1f022dea643a61fbc9e25c7f07fc15ba554d5adb8d4785ca76bc7
+Output.9 = a71aa159b481353e1ea8a2fb9f0fa6fbcaac1c24104717f9894535f087e29079b1c3168fb745e0503101eda84842980f9191727ea47ffb570cfbaaedff055d9c
+Entropy.10 = 6a591557df6afe71cad5acffbbf758f6829ea887559bc1c3ab6f1ddbef928b0f
+Nonce.10 = c872c4f0d9afef9be408e0ac48878bae
+PersonalisationString.10 = dfa1c2db43f6129b31fb4b3266b17d972bb467957261df3a67678794497601b6
+Output.10 = 44f4ad62710d87a109910908a4dd1a579151654b7c440686f903b213285ea886b72605d8e6af0c2cb9286f46b87d6cdfe1702481248a816e887d766858b221f4
+Entropy.11 = e2bc6e865abeb1bbf13ebed7e123ffa32687625c67ef561de9c2fc6f14efdd77
+Nonce.11 = 8e675bf0ac4b6b1fd43a5ba3d55eb5fe
+PersonalisationString.11 = 2ad79b01b477c2646be5761272330d98405edd775891f619c9666791dd2a9b68
+Output.11 = f481f0f81f46feef263410ac39ef51f1faaacf22541de8e4f91452b690bb5c6a211dc8751dcf8bdbf4dcd3554894bb6644fb7995b40c04ea4c3a979e97b5bcfb
+Entropy.12 = ffed524b1d1f1c5cee98762858387d1a403245ebfafec0c0a40ad815db9c83f2
+Nonce.12 = 95f9d8655211a0f80ef8e376abd8f171
+PersonalisationString.12 = 38b2ef1fcf66ab0ad6f14ef68b7db36a7311ff9964ff4bd501c447fd04167340
+Output.12 = 2ed810830b5c7bb287eea85cd32ede0fe070049a898e0bbd7a6949efe3bd3c19075acf87ff277144abc2e23ceb416b705b7a2be2fb0a0dc9164786f3527cfe14
+Entropy.13 = 2a92903d4d3aba0916cbc072f98a1705446a126d3e684d0d271b78a46ae85c6e
+Nonce.13 = 2c94361bdb040875a64e1f21b9ca8550
+PersonalisationString.13 = 353f18f9c331a1f77a1b0aa5f970762ebacbacb4273a941114a3c783b6e4088e
+Output.13 = f9e3f3317725f96b137baa2ee216d70cc4b45c380520f81d6fde1368ef701087a29098933a38ee757b9f70b182e7063e3630a43bdc1f21c30c4a47bf7fbb98e5
+Entropy.14 = c27529d8650a498fe1aacdf12d8a56c73ed1c4b566fcfc57b43eeb2f8c1790ad
+Nonce.14 = 0945153fe4789cd0a74510dfcda5de71
+PersonalisationString.14 = cd98bf629da5dec86d823bbd720e273fa09b75a304a2c3139c38386bb4468553
+Output.14 = ba34d46c29afc91ec34cad8485b5dd6e2fb580a217859f7049a6b23eb93e66e429ddff22cc647159ef1195bb67c40cb33883ebd8a6b9f71ab0acb89de774a593
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ed12df77815585fc9ae7396620eee4ae68cc82a82ec30a792901e2858a59705d
+Nonce.0 = 232a3db970b5cf1f31a5e09f02c0a97e
+PersonalisationString.0 = 2f9294db485305d48863b6f537c3faed903b9feb94bb848d00dc58e77d8f47c0
+AdditionalInputA.0 = c9969a563374480bc08f61d4b46e587afc55126d3809e603e20e44a07636c678
+AdditionalInputB.0 = 03cfbaa739b33c1bc60abb1c730e155fae07837054b08ee848c458c88569ffc1
+Output.0 = 78bd67eb4e660a4fe3474ec1e95b1fbdc1e4dc6867184ee4ea9e156814c5849c3c12d7ba06cced8c872712c2b96e7468536e11a20e93e53b8c778e9c0634c6cb
+Entropy.1 = 2c8c9162a1dd63c1f2894714d89158030a5f677aa014d78bcd558d8ffba2ab25
+Nonce.1 = 4206b6c3c1f543b1608fb9cdb62fc2c7
+PersonalisationString.1 = aadd7d9f9cee1f93f43aff3132837758e88955350f6deeb77bb4f85cc0410454
+AdditionalInputA.1 = e749fb5d67ae617704fffebbdeb998b2692db72af8ac217f7bc5416f93a77a8f
+AdditionalInputB.1 = 46a51349db45456db94ed12546ea6a621489acfb40b0fa316a3c8f5f480a0088
+Output.1 = ee1f95da9b2d79f0cbf8335efcc6912f163946e4456d3284b918579b50d6881db4cc086d3d212af2f342b4bf4657370b025cd4ad2c1eeff3cf6070dbdd507861
+Entropy.2 = 91973ea617f95b5cd94cbbc2bf02038151857363d850256bdf9f78bd22340b49
+Nonce.2 = 9ab41560f85452070052681a25d9f0f8
+PersonalisationString.2 = 69163fff9bab5297e09fc9351f96a5bee99730861fdef10adfd4ac38a0800b3e
+AdditionalInputA.2 = c42c503d417d87679f530f4ba05cbce3404874d461163f5c570a3cfad75abeed
+AdditionalInputB.2 = bac9d9a16d9f1ce7a4ebb7c3781243394e2280a52de6411db52ed8c309013ecf
+Output.2 = 23640cf3570c88f35c440f5a1d6195de06d086b9118dd6daf8974865d52e11766eaa8b1462c77b542d6a5391df6368ca682f6398af5156ee7cd8ce2450258fcb
+Entropy.3 = effad82104041786159be5a1ebc0be77688e6f1c075dc20a832e3ffafb11c54c
+Nonce.3 = e13badfde36a8c107e4f3cea693da36d
+PersonalisationString.3 = 01ea78e5be0bf948962d7c334ae237c560bb49e6635958035936c48d9082de39
+AdditionalInputA.3 = 726349a1e52be8b84b1575827eae96efc1c11551b35c68a04e89bd125589827a
+AdditionalInputB.3 = e943569bac0d0e6b4100ba89c6f32dd7ed64573357c57783f3d0e0f69eafdd1f
+Output.3 = ba58119f2747dde7fc000e22090ae3256aecd264cdcf77d3c51f32fa96b244feed3205fad90d98a42727b551cddcb3fa28870c08f02d865b4c39cd1e36818a23
+Entropy.4 = 852410083634047a3f9aa8c772517c6c912fa95bab1da09a3a7053c4bbaf7501
+Nonce.4 = 49cce5d87bc905e98bc5bd3f2f6baa0e
+PersonalisationString.4 = 79e71535ed28e080a2a024bef60204377419c13b0f573739b2e38ad2d94e9801
+AdditionalInputA.4 = 7c8dd0aac536114f88e6dba68c73da37b77006c5a44e786e5f62aea36558f945
+AdditionalInputB.4 = 05acd9921c8decd60bc9cd124925c8b51bac8a6329e4632dbf076532ebff9296
+Output.4 = 90b41b644ad053d36cff4ceb3d67c0f064ec438742d714cddd624fed5defce1ceacab325c140017316f29aeff232244c5d0a0204eed8cdd7da346db29de7aa8e
+Entropy.5 = bb568266318d9365092657ecfaf05ac70c8dfd797a47c7e85b51cb6126a0e693
+Nonce.5 = dcd35d6280f40bebc82125ea28be7a80
+PersonalisationString.5 = 7b254bba6774fc1f601c0f2f9f9002a290269cb6562d150d4b3a32115ce4313d
+AdditionalInputA.5 = 9714e5460fed9b43b303833a6001fe0b071a4394d10349b56ad1aa5c5114f926
+AdditionalInputB.5 = b13a4e4421ac553f5c166fd948b758794e57cc0cc0e73e760dff26bec8cf81e8
+Output.5 = 5db4685019620248ac08d023d2d60506e21d94d156b9a1c390903bf251d1b1ff3b46e013a2c6d92a9f70a2b18bbd7584a2f0a19d770ca016ee5a5f83faf178d7
+Entropy.6 = 340027773742a6e91553a7ba6544388e74e3ddfc1151fdb9b763a9d16cbe597a
+Nonce.6 = e604470169512808cd4a131bb182780b
+PersonalisationString.6 = 210f36c96b6b19f4b559161c60c48df296bffcccce0908599abaa400177a96e9
+AdditionalInputA.6 = d55d9816d5c4e2e2e181126bc08040a9f653ed95ea124c64e4059e2f48ffef10
+AdditionalInputB.6 = 6c30a64b1c73fbd08da5cebda18642f78a02bd3247ab1d78c1c03f8a6cffdd89
+Output.6 = 4fff81dbf1f42ef57bdbf6da194311dbc4b464d3a11a33c664c0d59834ec60a583b3908ade9cc6fbb89debb198d1143aba2bc5753983086b422098a23877cb2a
+Entropy.7 = b36a98e6c5b23698135eb35f28dc830ac6bc1717e5c3ee3ea13801f8a8c9365d
+Nonce.7 = 7f131997a92922413d837ca50e17d977
+PersonalisationString.7 = 1ed6b07cb525134ecee32200713601c18abd9c7920e7ad1dc0764cd92e3d56ff
+AdditionalInputA.7 = a4ef9575b96682d7552f9eb7ba269c43a50835f23fb2cf1f81838e9c01b1ea40
+AdditionalInputB.7 = 189bcd45fa13939838663ade2eaf1979b33c172f5ed741123f06a2e3ca25427f
+Output.7 = c8b6cc901c4236bd3914bc77987d9d639973d69c96e040197737b9a72bbf3b5e8998c54967bdae26146772716ed2ae0c6b208471bdf21a85b2774bf7e516b34f
+Entropy.8 = c00cdf7e0e786a0793783b6cedc37d6d0504d8c5ebff063014cf81092cf61d11
+Nonce.8 = 942143519f87b3835a0edca2d4cd2285
+PersonalisationString.8 = 3a953e041c7e5d30632d34a7e814f4facc858de6b8fb3c432973a4db4a5a78c2
+AdditionalInputA.8 = 1fab1806260c24259536e14574bbef9be50eda48936332d60bc3dbcf6b10f5f7
+AdditionalInputB.8 = 18cce308956e63505d43ddc28709eacc783a14931593d079d6bd74a695c3075a
+Output.8 = 9f4d77d394815148162d6ccaa8b73cbd61b54c5db104e7c047bf0a225ae05594332bb56c60d51d2986e57513f4c266df39d9beee9b69649891b6ccaef4b986bd
+Entropy.9 = fb5f6958203fa7bd066655ef7b5fde99a571947e1f74b8b8f53a854dbbbc352e
+Nonce.9 = 0290fb96ddaed0d8179a0795ee1cd529
+PersonalisationString.9 = c59d3d2fe30b85ed64db2c9ae863b9daad7bf96c331d66df945f5f3a1f8d2515
+AdditionalInputA.9 = c99d7fe2deb6af99a1782e8fc12a519636471fc3bfad0ac2a789a2f20f4df63f
+AdditionalInputB.9 = e479ac18b2fed6d9f2ee441a20bd50aadd2a90ba9625ace01a4449a6ce6efa92
+Output.9 = 0ab870c2516eac1ef1e6dd3f2de9dd0564a56363f0b8c42b4bae4b22e14c9912b4c1cba8f3158eb5881b86524c94cbb2c8169fc8cc2c13103a6478337f2bb00a
+Entropy.10 = a4c9750048b33554e24759a37627c40fa7d2bcc045b06bd22a8d90ae1a8ca279
+Nonce.10 = baa137ffcad72d2582c4c348b12b8158
+PersonalisationString.10 = a4f115885e0f45c4580d04cafcfba8ec09c5e081b65d648567c55a9d651e521c
+AdditionalInputA.10 = eb8e2aa182fbf785f25da7f57054b70171e5a26afc5a61aaa1f92fb4cb3ac50c
+AdditionalInputB.10 = a44aa0b5255ba339bc3cd1715ec6a8d55699e1b4996b9d737da83b8a357045b2
+Output.10 = 53f74fe7ab0ad31d5df0327e6dbcf5deeb3f0bd9d1ff50b7a9d522fd9c9c3f633e53ce1d3166aa7f2a25e32d0488ff0789a1b981886d4abdd2014de3259d4064
+Entropy.11 = 30b02827cacdcbd1d9971af688a45a6b311e49561429faec6aef87671bacc6f9
+Nonce.11 = 1b1746f76939eb07183286965ee648ab
+PersonalisationString.11 = 6b4f4b565693482693f696512104ec1ae12ac65a7ce0babbf193f1fdc4c231ed
+AdditionalInputA.11 = 1e3adf2b30f288b2a18d287c1b053afb7e513f6de90386abb9da60419415cd72
+AdditionalInputB.11 = e19254cf8bb5023fdf51269b83a961f5a347f54298a3196698d4c9fae3ca2ccb
+Output.11 = 473be398de0e2e5cdc50529e6ceb0222b4038e8e0776e96c277421edc10f2a841dec9f07c82f00e2f53062ab68e3f7d4ebdc18999e362ee904a0baf44229b59c
+Entropy.12 = 554c467dfd02c9639725183785aecd6c0f5a3280c61c822bab02f1d7413f4361
+Nonce.12 = 6ff6a4acc5a58c681de9a5441a9f756f
+PersonalisationString.12 = 6acec4a4c0be17218e7c3f4246640920aac48fb3800914db2f86dc53903b09af
+AdditionalInputA.12 = cd24875cdf70eb4fb71c0123e0eb738a71dd76f36ff54b9b7ec706cef0e035f5
+AdditionalInputB.12 = 99d671e8f8e72cf8e9a02e7630648ced53ac393f6fc0425e5f525eb413d375dd
+Output.12 = 35beae8558e9b5ecb30b1bf5abc52310219196b58123257043d2793c05c965e6258af783ecee80b33929a3fdd77a8b1adffb723bcfe7e65f7cac682862220f4e
+Entropy.13 = 93ee61dd850c0c972736aa98dc18bb3add529eb92583211a298fb08df17a7af7
+Nonce.13 = 0a4df317784751082b982c85717cdc2c
+PersonalisationString.13 = f4f10e095e9f5faacca24f5395a73cb1538565df679c8754b7ad94e836f69168
+AdditionalInputA.13 = 876e002f90f5063ddd5c578d9d9f4a2a9bde7ef28a41d9c277a489e85afb635b
+AdditionalInputB.13 = c2562ec2353e63e13e6c6f6f06e1ba220b0848be353e5bd4468921b9bf2649fa
+Output.13 = d4cf478c91ba1973a7cfae159b8e4c0525b296b544fd8544f4ff10e7a2c5aebbe8b5a10fef16f4a91c1993090be7628ce21f53e2b4e7d6c2f14be344188fa4e6
+Entropy.14 = ac38c38c498bf9b7cc724f792706a07b87e4bba1929a418b03b742e4b0cae39a
+Nonce.14 = 8085cb0ef7d546ee8d4f9bb183de56e4
+PersonalisationString.14 = 73f2d180a4d2c7364a64be7aa757be6df27d937ae8da406c61d0353dda319fd5
+AdditionalInputA.14 = d3ef42edc318fe3624e72f2718d274d7dbe2d89fd8e3c4cfc8a7a7a1b502216f
+AdditionalInputB.14 = 1fbbd73b62d4310a636fd56d283744f48591f96a0b65f24d8711ecf92b3ce3dc
+Output.14 = 75b429d2657e16c7325d0570005c42b221664e8e1b0c1e6954aac3062bbc84fdc69eb2a54affcc49b401a2221f68a91746312445b03df1b8f9e9f2e34a7a1f70
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 58a5f79da44b9f23a98a39352972ad16031fe13637bd18d6cb6c9f5269d8e240
+Nonce.0 = aaa46610681167ff8d4d2c51e77911d4
+Output.0 = c1714f89459ce746b151509e5066d4811a06ad06c1e9b13b50c0fc7cdd77ceedc233908ebe1ea8140ec2dc262a43201be667008e081e5476b19b27214111d325
+Entropy.1 = a943e809630413de6207746d0d0341913f466af0ae893cfb3406570b2fb791cf
+Nonce.1 = 907b9cf7f9edf04fcf3510315dd0c381
+Output.1 = c3b84888c5244cdcbb946299cc3848c379a9b780e21f029f0bb2fe815a2d039dd7aa8a2e808c2ac47b8a9cb6860b970440049a65d815e3369ed833c76124aac1
+Entropy.2 = 4d43ceb1ce9cacf56403a0c9905daa67a2acddd0e4be6a334b8c4434f4c60455
+Nonce.2 = 9772aaea3cd30ca776d674bcfb884e18
+Output.2 = 85c87c4715c16c4b7528d04023056398ff2828e0b649fbd10a297b74fc3dc0df4966bcfcd4f82fdb228faf102d52cca0d3ae8af7f0c5b30fff62d0c545d3de79
+Entropy.3 = d410cf13cae365faf3172fb0c2368401f443e789a62b3ce6bc40023249fe7dee
+Nonce.3 = 22c312b52a0692eb38763332b6cd4ae9
+Output.3 = a005f40fdefa1e1dce22f735bf3e87eafc8ec3584a6b2b8045be53bde0b1cdc46be380be860538ca0e976eeddae4add2204262350d5f6e19e34db0fc47dcd0ec
+Entropy.4 = f80972a5cd4e2e14b1f5214dd93c549dc51edb97c1447d52f3e91b30c15b748c
+Nonce.4 = e1dfe4aa777a0bebd1fe936635a5193d
+Output.4 = f389defd88ce73a6a5d81a32fedf26e005a5d42f7868fba40ddf20df6325fe34738da3cebb62b602217247fef77837fc73dbef33b813b26eb06be2ad05069882
+Entropy.5 = 92ae363fcbe35fd5f606d21d2094f95b90e6b11c21494fe0ea3f7e8d0ccb2bc3
+Nonce.5 = 88b31b931f49f86c430571af1a352a3c
+Output.5 = 4f4a1e0ea821bb8add74afe6e12659813338ede3d1d3535808342a0cb3d066ec13a8d52997336607297e56ff53ca5a50147590232d26f041f76ff9b5823f36f4
+Entropy.6 = 01ab1c4096c4ed6d241074c6e8b3e4abe7935235d6f48e913b780d219a71fe2d
+Nonce.6 = 472e39d4800ef0eece7bed9544d5af5a
+Output.6 = bf7acb20907e0ba141e46519aa31d46ad45da46e014b2420d48d309cb0d4703e82c6a78e835efabb1723b75b8dace5968042416075cb71b9c149806cc4214758
+Entropy.7 = f63021bc4922305c8267b2cef767e3bbdab72e119bc8317ad8fe2c27694f9e00
+Nonce.7 = e6ccef20f87519d5d67716e12e1bd760
+Output.7 = d7eec51c186f5990bc3f55db342a41a2ea155034af651c3c291310241d4655733cc9d781d6886138b3f9ac595b956f94daff64dfde94d3c8f2b81182b87eb832
+Entropy.8 = a8fdae7e1116122d2b42d154a6329aee99ae6f3bd65180a03828a3544b80f99b
+Nonce.8 = 10b14f568e42ff31cf73b1f3943aecb8
+Output.8 = 4abde8199c0776ace8afba196d2befc6d6888f3e9560108895689017ac654a555722c0f14c53b19f3cf671a88c10a915ea720e7dc9b9e5e031915e330ebb0e4c
+Entropy.9 = 9aefe43ac5490defc5baadb12e66838de9ddafc944cd686ecb059635403452af
+Nonce.9 = e9256f4902c7d7f6bbb1dcc156ddf9bd
+Output.9 = d96d90ac5acab54be18da19c7615b4ce471a22416ffe2043e782beb885269bbbace4c416050cb4fb90158fda6da58bf8660ef9160d1c15fdd4c067c5c98ccdb7
+Entropy.10 = 3618b56386b7ae61dfc184999cc4587cf07eda8be861f1c64a28ecb2875890d3
+Nonce.10 = deb03acd0ea6f0591580b8afbc2ff880
+Output.10 = f605305d87f209ac293ab9c8c1d3128418fcc9175aec2565265b1dac75e7aa8057953e0f6854800f37ce405eeb24927ab78e94fb694b668caaeba5271fc486f4
+Entropy.11 = c09cbd478e38c7520cd92432b5fce8c15758ef56c4e457fd4f2c97d52e8f4566
+Nonce.11 = 053ea292367476415df7fedbf25d6954
+Output.11 = 00a81e0b7db15698b89a75f56175f449dbc4211ba354b46f2474acb55dc170bf6c0ee181dceac3daf5fc81a57c63ddc281cd24cd6e7f25a1b40adb4d27c71319
+Entropy.12 = 59ef31ed6854016ab4ab7c4af72f5b16ad2d7b57a18f79f8f29de26ee4200961
+Nonce.12 = 8e8d6f8378634314f72ae057991a333e
+Output.12 = 1acf343fca1f42d47a1131e5d18906b5b73fff61461237882a58bc5add7527a5dd03d2b1967b70226d1119ae1435911515e3eaa67acf144214712ff3346490f2
+Entropy.13 = 04138e8fe8fef7feeab54ee3e5802e027b1f394487cac36d1bb0f052a7a1075c
+Nonce.13 = d6b6484dbb46389edfc1ac969e462214
+Output.13 = 09f2c686d9b01d49f12348f12ff832db4ea9105ea6a148fcaaea32490d2d843a282cdc30c011191f8ba77c224c297012e261c8a739d0777298eb591c99028ca5
+Entropy.14 = 11b1a307c266d407c3ab12be774ee31cdc918ae14cd98fcf02c3acc882ddb82c
+Nonce.14 = e4efdaf6f01eb5475d82c94e129a35e1
+Output.14 = 6a5263644a101e9f03a40260a68fa7271a399ba954fee230613a18bc18cd5c5403d679c7735cb1671b174e60ed828e707377f55178bb538bf4267453e5c85b97
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 001ec3b192ddc765553e15742dffeb21cc7d97a4bcf866e3664d8a5ecb4c2463
+Nonce.0 = 6ca848651d420fb02f9b66f06b377e59
+AdditionalInputA.0 = 99f139ab5ee4f7eed6148e82d79ad5f2b9fa638d574e5db79b650c0e682ca466
+AdditionalInputB.0 = 6e7bf0ae28a797ccbb47101f26bfe5a0b1e450c57aedf731272411fa7b6c4ed4
+Output.0 = 865b6dd4363c5940d6228cc90ba8f1a21efbaa99b0c7b37361f7fed7e969a97b68d550dd6ad4bbfaf6626779bfb43c66845c2923df9f55307c8bc9f0a3872fa7
+Entropy.1 = 53aa6668d06d2bdb4aca989d294d68b00036e1b466d1553186b9eda9de693a68
+Nonce.1 = b77d9b74574731dcd96aed383505276d
+AdditionalInputA.1 = 0e00589f5926ad32a0acb337efb61d0f8b6c4f2526ea6d1aaa2023d393b0f922
+AdditionalInputB.1 = 70404e729a596e11c5d14ab9e435d50e47afb735d558293a8d1197cbf85436fe
+Output.1 = b83778fb3fe16bfa43230ac101c9b3816827f5500c65060298d58bd4facb17a062ee03981e6d19eb2c9851fb00ae2b4bc517ee338ef59806e3c8b0b99fb67a31
+Entropy.2 = 3d38736b9f03dd306b10d5bb91c16b161eb4b6f054d2bc4d561a939850c040ea
+Nonce.2 = a0d0c188cb2f32a3127489b74b83ae78
+AdditionalInputA.2 = 37cfe2abe1906a589cdc671e01b50eca78b42702e84e088dbfd21c22e0432e46
+AdditionalInputB.2 = 2f1f523b305bbe799a920a657ab36ff4207188998f6c7cd39be4fc5d0693a070
+Output.2 = dc1a5b28e19ef89c869ea695f7d9a579f617d0923bd0641135a06a86e011751cbc2d9f2fa2612c3e6a2aff538c645380a618f1f18fbd987ae9f4ff1d704749f7
+Entropy.3 = 89f209a7d8ce9f9368f9471a33bf7b469ef80f994ca5bffaaa18f163a4503d97
+Nonce.3 = 37655604c045ca1f526941a050a2a78e
+AdditionalInputA.3 = 1d24e7e3bcb7709ab180734bd12f4554a2303a38a83551d9454fe045abea5425
+AdditionalInputB.3 = 15646b331b808dc971dd2bc9caf8030b57085f8dd62c4bfb28110c75977dd1d0
+Output.3 = 59ac0b9bbd2799b0808527a850b998ee3d6b7aecdba340f17b682209222b6783cf9a48ec45caf40446ae37e9539899410cb63f79b314d3b2b833b54c26a2cabc
+Entropy.4 = 0bee4937a071fd939f0007c3ce3abef43ffa3bd0e05efc0190ed5f2a2d644778
+Nonce.4 = c54f6cf10f6454c69b667b6416adcd6f
+AdditionalInputA.4 = 4d842e426b64e9422e7f77f6009c1157570832235be65d3369530f299fbfc82e
+AdditionalInputB.4 = 727e31e839a7875b654bcf1a5428d8af900e5aa40636aa80fd851c33787cabf3
+Output.4 = 5a63f662530bb2ec4162f752361530cc8d5c890587d226b20f142bae2a2dbd694780d2a55553b035cd3552bab0faf94e638953300ea95087a732c9489ea41eac
+Entropy.5 = 269de0a0019b685102953c21d4d4825ee00fdb774c7ca721f1f3cc1a2220cc98
+Nonce.5 = e10806c0d8b9175f22fc96c7d77dfdfc
+AdditionalInputA.5 = 185ea897e252360586b39b5a2e3e12bb30885b99ba068d10ac7dfdfc263ebcd5
+AdditionalInputB.5 = 259bac2e62da6389bf6a5ab344177ca16ba5afe7755b5a5bb4b94b3ecc6a8f7b
+Output.5 = 181c995f8592384dfb565aeb1149442b871be29aaa324047b12564622bc1ae7d382c06aab3b2aa6d3ce151aa1711f16d587a036623630fefbb69cc1538b4451a
+Entropy.6 = 92df433def81e1d72988d295a56a679d0e615b5508c96c75ad5d22d8caa525bb
+Nonce.6 = 71bdbd0b0bc5b1f03ebed30066768586
+AdditionalInputA.6 = 060830ecbb10c3fc18e78d0e8f12a65102d1ff8b37f899e5445b5a0363a1184f
+AdditionalInputB.6 = 628c96a7f562034d056a4fec0bfa2e9f0ccb6be9cd33c62241a507fdda007f81
+Output.6 = 09c450318957e29f09e15bd3b01c1d502bbe9096f40aa951733ab8f7c0363053ca45bf819a02f3e19e8fd80cc04709ce07a6b5809ba8f7486e14ab95ced2e087
+Entropy.7 = 393415a328e21093bb34ebb08197d21394e26e43d82c1d2abfbdd46a165c27a8
+Nonce.7 = aee49e3028d40758b3f42fd6b8e68bef
+AdditionalInputA.7 = d53dc5a612cd154ade83afc000933ad88aedb824a02e2fd97a8697be56da48b1
+AdditionalInputB.7 = bda392c579ac3d33d6c7b9455d6b8e7127849b5a186bf0060a3af1e8301eaf67
+Output.7 = 5c331cccbc93522fc83f4ce8c22fff781ee6e7d382141cce7f0efee56835f780265a4be53c5412f980832aed12ce887cf15d281aaa64933c5127e14420979036
+Entropy.8 = b7c3acfbfdff3442ef1c79f4ac90c9923c3f90d9bf1b02a3ca73b9b560a69e8c
+Nonce.8 = 9eafc973760147db5505745a704ba056
+AdditionalInputA.8 = b3afa763bdb6cf2ff790a5271ee69dd0d7b3554b6377526c468c50c15505ce7c
+AdditionalInputB.8 = 538109feb958e52d31e8fbb2c26a1037fb11ffb9c2b2559d18f841a837f8a69d
+Output.8 = e3d30219e1c4c9690497cedecff7abb42514e9fa0591b3669cf67004c0e20169129c09c7e604f9ac67cc2204e32931ca1914ae18b652bfde98f53eb4c1d406a3
+Entropy.9 = d3eabe6be4d17469dd74871817e17486e898c8e65f369ad6e38b41aa22a5bd27
+Nonce.9 = 067d6610717a8ffbf8dbf9405e7f15cf
+AdditionalInputA.9 = 911ab9c5753c5d7093af4316d7d5c03a2b971db8cf7b0c58cb7fd8d5b9d8e01b
+AdditionalInputB.9 = 49535fc0ba863daf3b29dd8e8d56f206508ae7b0c3437a41847aea77184b3e13
+Output.9 = ec4be9f3ab1967e5bf963fe3cac873c6cd87d91a8a9d20e6fd5f6418a3972bfc1b9fcda3ab359eb77b85852d78a2a48fca436e3adf1b450f27045eba6b2f1d6d
+Entropy.10 = f46b8c14804b703b9387476510d8a650c032dfe9837bc4acc3ac40fcabcd79c8
+Nonce.10 = 6a06152e4383b2128d4292cd24d6f2d6
+AdditionalInputA.10 = 7ece8c73b70b80cc28f4d7b5c17eddf8150c6233e6a3274729665786f35f4bab
+AdditionalInputB.10 = 9ecf341b59c1e02395daba3faae6f43660b98791d555aba1d8109615432a7b81
+Output.10 = d2f8976ddbe8c61fb72059ac6efa8f2bc9688b68e4be4640a202b5dfa11d7552d4f89ce7bc8134c98df53cd056f6334fcbace2dcc3d64bf3553ed905ffc428bc
+Entropy.11 = 027d701b531e618ce1b36491b25d967d6d3dcda0145e9e5649b3698a374a7b2e
+Nonce.11 = 44a509ef420866098c3e0f4abfe73f21
+AdditionalInputA.11 = 5052aeed2c37d76abbe93383167d256cd1b493a1b6b424da50407197e91219f5
+AdditionalInputB.11 = a7cb70c529fdf61aa304cbba1f397af4107a6e4139a36014e54c7a411d872d8f
+Output.11 = bd11620ade95569f4e1cef6da8d8645dd827481ea42ef982e211761be4fa9aaee92f30ded268aa7ac92707d0d648a2e2aec530a48494d2699b3a3fd739da209a
+Entropy.12 = 7342d694e08bd0bb7ba917118798339e36b9b30e1f1d0344e6f8532cd42d58a8
+Nonce.12 = eceabd4c874356b3b30afbaddce232ba
+AdditionalInputA.12 = 15831e1fc30ef52c79050267240b7464a77ffb90aa568138379a4e777081e2bb
+AdditionalInputB.12 = 477cd2cb4c80f3d16816ce2af1c3920f2017f2d4eb482ad2a5868ac40a0e31c2
+Output.12 = 566630a22c26f926f13f30bac8c2f953deeb2ad90facd3cdc88b3f44fcee53fb1ecf13f37804ad889a7052b5fd7ee928a2591f6fdbb986fa38f37cc8e02d4e9a
+Entropy.13 = e908e2a4a6444b8526fc41835f52f9446b72f5331b3286a406c8d5408326a860
+Nonce.13 = 71cf470f85a80e7b33c4133db77ee48b
+AdditionalInputA.13 = 929a61e3544c94218b1398c8d6904bde662d124a013a54e482c277d85e0dc2ae
+AdditionalInputB.13 = 5714c672c391a36a5b2f099aae8aaa1639281dc0f55b04c10186282341bb44fc
+Output.13 = d46af22dfd1bc555e42ac0ecc7ec28c852c8e335acc79c65e142faf4434153896483bdd1c64d5de2c83445797648371f59a316c4e0d837d6aa17546f8cda8287
+Entropy.14 = 6cf551903c86eb4ae6ffdef35f57d6d8a74617bd3d9790e64a2e76b9b0140555
+Nonce.14 = 342e5501862060e4974bc88e7c632c69
+AdditionalInputA.14 = 91ad3267626ae5c360fdd7baa5ff88178ae84ff78b694e2fbf90779bf4eb898b
+AdditionalInputB.14 = ccd97ec31b030e732edbfcdfb9848c2b3673bd3b1071502658daa460b262fb1c
+Output.14 = 3731cfe5ebbc5b05c112e88f1b4cb3deeee4bcc9ecd1635e9c85469257150661a5dbac2e634b8fb0de08b5cd5eee1265f82e9278dccd77b1fed2323c554445c3
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 47d570e3a0a20c0a2010673a6131dcc3202679eb06f3c1b82a710edf92d3774b
+Nonce.0 = 881fa7fdfb70d106b9b9eb0254b0eb6b
+PersonalisationString.0 = 0f66787ef9b90364517e3151b158becd9df4060cd92ec88da3a6dd7b3b18e54f
+Output.0 = e64e8dcac95e0e46f5e6c5571d077b574b1eabe4880bbc0bab8e08e2148051441165c305fc09d60765190346af27a0df815653e81f782ab7fee55dad23ec51d1
+Entropy.1 = 21cf7b1f014995ffe7fe84543f3e9a75cb3f99851cf21c4abbdc387330d5c7e9
+Nonce.1 = 49a6eea4263ee1f5d461907dc58b44fb
+PersonalisationString.1 = 14d53975f852bcc9a1c5ec9f4825a04721ecfd87f2adef099a5b88e27d777b03
+Output.1 = a26c9905c9ae138d948be73c4271e7e0daa23161bc6595154881ae6053599a21aa97e57f3ce34d30f69647e970e7827039932615d970b47575964ceb8f7a437d
+Entropy.2 = 179e22e2f495ba9ae352b93c836b6933e28a2a184f8982c04e25e7eee66f9f7c
+Nonce.2 = c184e842d2555e56888b7b75189e7775
+PersonalisationString.2 = 0fc74e50a0fda79bb31d5ebb308aa97ccd6e6f17dcec14976f4e6b15ca1be341
+Output.2 = 47497647111744c73dd2d05cf57d65ceae22e22cac44b098189c5a5c2f781b74669e6d669e38ea8e5b4660e04c0401c4a4e64c331d796d19b7350a6a3e4619fc
+Entropy.3 = 60bf6d9573ea9398074c3d6e04e0e822f0ee95b67dd255598812e5336acc2336
+Nonce.3 = ad27d7b274f3a2189d27bc547d6ac410
+PersonalisationString.3 = 58035bae9ba67b890b892e3a974e331d99d15c607593ed21a51dec71034d142c
+Output.3 = 518dfea250e179e2738283de6bc29a069cd9f6793ce11ec801ab2d323914e13455876c4db8328a5b9a78fd061cad66232d1057e5d6a385a297adca9cdca57caa
+Entropy.4 = d39fb356f66ceab81c4cdad89ee2e6657f8b36e845d6b8b7530a6188c4c26a8c
+Nonce.4 = b10922b4a3086e4a484b5039996a54b4
+PersonalisationString.4 = 04df5d29dc5c0793fe5b4ab3da3ef7d264c4cd675fb06bd21ac21d7c77a2ce73
+Output.4 = 0f2c2dbe5da66742e9aaaa48612a0e07dd6914942c52e87d3266150013aac313de1717088e01b93dd0d8c6abd0c5d63d56495140458c4a980ab4ff7d989e00e4
+Entropy.5 = 9a1a99f8f2bb88a745bb24cbcd4ac3aabcf9ad963705ddee887ca1792a1fa9f0
+Nonce.5 = a9100654abc3acd6fb0c344404edb974
+PersonalisationString.5 = 2faad0ea6eb2b5befe024119203bf79c13ed1fedacf5358810f4f870175e08c1
+Output.5 = 2798f2e4b66bca6212e1055d100ffa4bac733b05dca19a3602fcd5e684875a7c58c1e7a8941a7732124daf13f97c57cd7d14e4037abf2f8910281dbfdf9113bb
+Entropy.6 = 9f63a3282cd18a09a91a50086ce0e8d91be04261da623875b15f9bac5afe7c6d
+Nonce.6 = ef81c6f367ffbd5d97cddf819a99f996
+PersonalisationString.6 = f18fc500cc260beb53aa6a1d1ebd5baf6ec3ad79578a71cdb276c69d675011cc
+Output.6 = 478fb3112c99363b7c6e5d781ccfc2056694dddb70d5e4e457f22cfb154d1d0173c09daa8806ba9c7cefcdd7a715b3b5391be10c3728f3af25ab2a4b8a8a5caa
+Entropy.7 = 1015c9c0d06e6ac7acbbab0d2dd1adea756057cc3938ef8785e3d51e5afc018e
+Nonce.7 = 951d7861d8409b0a62b18c43bbb65523
+PersonalisationString.7 = e76a06024d00be09c6a22b78b74cadbaf368920b1f74a441d510aee02cae721d
+Output.7 = e1ad222c7f45d82d159309fea15e81bf9f148cacd57b52f5e8fd3faf73d9b832cc803d4f36e3d9afb03cbacbf72d6b297a01d0f00b825f64e676a7018159da2b
+Entropy.8 = cad936acd1ef9685f66bef62a8bf4f919e18024fda5c63c57cedb702df3e94a9
+Nonce.8 = 85d3238afa86c654702dfa793e11d3f6
+PersonalisationString.8 = d6324b2a3e38946c7df7c6e8d301f6b5e63e55535c8ae0bed677ce0ea86ea499
+Output.8 = 3003468365b5eccdd642d3d430d4c4d4c089c5dfb7dd4adafbdb4631610805e1587d355b56d659c59fa012e490beae5fc767bdbb34b31a5b304c23dc27b4e9e0
+Entropy.9 = 648e4e484b26fcb330bf46a9eee418cb46bdb5664dc0b5a875ee8e5845476a56
+Nonce.9 = ba610a74b66472c69f81ad0fbfe8b39d
+PersonalisationString.9 = 322f584329dfc1f643f359ecfb9833c4aa286667f2ffe6bed9c4c6e912380389
+Output.9 = 7f8498282c32e6b5351215f90e58dd3d5ff5cb7b61c3fd9e2b93dcbdc5ef85ba9eda9fc534565f77b78b420e24cfc95d7d555b743a80b2194508c31e4c30bae3
+Entropy.10 = c52a301c952550a31ab3f3d3c78919cc5509a5b984c0a47a9cae9fe8dcf6ce97
+Nonce.10 = 87e28aeff66c45e409f02f99d459f697
+PersonalisationString.10 = 956e32d3bd82c6379b2b7a7b67fde6583f98d5bc2e22082e793b95e0dcbb4f94
+Output.10 = 6d0f4a8cb3061b6af2f15d4bf0afbaa4624c063fd7ded3903dc90fb359f350b9ec31a19140bcc4d4eab449a6ce4e0abe6b1e819164d39884420aa20c85408c9f
+Entropy.11 = b52b8b3334bff230d033c89ce5f74d21c1ab07f17acec3094f5437e509139d85
+Nonce.11 = 617f1f5840a485d042a5a7bc55ca3746
+PersonalisationString.11 = a6f40a52f7923037a9391d450952af3b4c8223e9c19e24d2ba11e20d15964d34
+Output.11 = ced9f3e3fde7509f5c1c46d5a3bfffe67cacffb103fe4facfb45b66e53d594cf4e192844a1bac8187c65cbc9cd843f2383510d8f6576c39d7f37d000b8ce7521
+Entropy.12 = a579374288c8a2de144f460cb0dc2fffbec70eb759c5bf1712a45b5abf63045c
+Nonce.12 = bdb703e646666d1b2163c25fd563029d
+PersonalisationString.12 = 5128527d9077bd74b44ab7deadeb3f1fc2099ab711ed44a612cbd67c8e946273
+Output.12 = 8fba160867f257b90d76ec680f3e16904a8d1443b02833eaa78a33007137c422669133d7b3de2035830af79400730ded7149546d56a90f204e86477c42fec1a9
+Entropy.13 = 1f444891ec1d5d060bd1b037363bd750df9017b27479e21185b9497f6ba0311f
+Nonce.13 = 73b5497976d671a260b34fa314ccdd74
+PersonalisationString.13 = d70d63e58d23123eba0e5a6bde0779a8866683369ee1c1d1dde81a146717d8bc
+Output.13 = 4356afd04081e8c0f4c446a622cd3f049e7e6e8f906c07600da0671eeae8f0a732f45f7b99ee98c1b061335d0d5896da1e1c081e2a6f25c565fc47dfffebbe98
+Entropy.14 = 75d5b782c5345cee69e045844783ba53a315882282740a45b4a04fd9e77ec1b6
+Nonce.14 = 175c36b3964726caab9b5a127ee9cd91
+PersonalisationString.14 = c7b45b62adabf345dcc018e2eafe3ef212a253edc9460f12a7c0260fe959df6c
+Output.14 = 5c74c046d200cef43613eeb2b0835838609c4ae2697889d51c179a27371b7421d9d28d038bd22aaa7be1e31ca09f3cf3d3ea1d3f18340d9cc73dd8415122caaa
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 506bfe785bd17b7a2dec8abbe202a2414062b4c2ff22aac3890133801c54961f
+Nonce.0 = 64885c54fd4616e60dab9c4a424cb200
+PersonalisationString.0 = db1aabae138e6bb9ca30e7b107110046ad188bef4a71c90d2329ee420efb4b9d
+AdditionalInputA.0 = 0e224a4d7b8ca1fff04656f9f4b5b9577fcefca0c283287677bb84b1c3083496
+AdditionalInputB.0 = 58acadc54f2195ef4d1353759947e6e52dba2638040776ab0be3b63a4b2d663b
+Output.0 = 9f5475a395988b36cc3c41587231f18f232fb303cf82f24cbfe79569681f7f8dab8c7a5886106d530fe788886f8e5d1315715484d1882b1d0c2412e8796f270f
+Entropy.1 = 52e7d8abd30c4b14786756e82dd7f899076e1cea07dc722f8e12161141f6d9a5
+Nonce.1 = cab68ce9deb7e545e33e5a27c4878597
+PersonalisationString.1 = 9ac3bf47f6306a36ee84ed4ee6aea8e1d7e8b16b5c407bd1583e7cb52da91275
+AdditionalInputA.1 = d7bdd5cbbefd1b4d0cdb32937feb8d019d503cae80a5242495665565f32fc487
+AdditionalInputB.1 = 6361ac7a3c2090be66a46ff829df38ff063b2f9c531c7e4280307ec45c4fa0a6
+Output.1 = 9834b9e1618d5f01ee9083ee89ccb33c18596e675e5f37c3f4f59a946ca093e1d8fb068cd8d6bb0facebb7ed8d97429d22223d2e2dd87d048393d3549931339b
+Entropy.2 = dbe7a4622d8cbfcc191dc740566fa0588d779a0d227b037f7318a4282a080b0f
+Nonce.2 = c4e3469ac3a8d23189c9c9e4412abcd8
+PersonalisationString.2 = 08db81c12971681e780bd9ff537684de80c4bb214d6eb13a9209044ae462a740
+AdditionalInputA.2 = f9530b74a8cb024556ce54aed80c32ef2201fb19f4aa5601258596c5975e184f
+AdditionalInputB.2 = d19a2ea853dee83dbfad416fec5ffebcb1c6936b359ace38c5f0570e3aaee7d1
+Output.2 = fecfbc6eb3d0422367583044be8afb65717723f5fcc53bde9294862556970fe9de964a27d31acd1d41ca77a1e3b0e73ffc0b1aa9c6d3cbe8426ce911193a167b
+Entropy.3 = b1978ea5dc18a993ab37b881e33d85ab548e98aa2a797ecf8a198621c0a1e117
+Nonce.3 = db53b0de8f5178717e0a69d8bdee9f37
+PersonalisationString.3 = 4f6dda5e9cc1d2538eeace39d253e1621457d694a8e24e5c7602fcc819fb838b
+AdditionalInputA.3 = e2ada71c24f2dece4315c7da2a94af4e47a7ca529d9c368a32ae450d1a645ee0
+AdditionalInputB.3 = a91a32bd1d9d83d112f7accf956115bd048ab5f4244531e5932e382dd1435973
+Output.3 = 397dd1769de4dda7aff645e32cfa1ed22f3a4397b62857896baa0fba9262ca8e46cf46f20b127724d4c6863c2111f1deea9efaddb91855bcd018481acf17f25f
+Entropy.4 = 9ce49c6e9c5f2d43a1a2a1c2a90e8d63f1f4bd83fcdeb734f1894262d91b5e91
+Nonce.4 = f5a0885f0c21a3f16cfc3bb828246333
+PersonalisationString.4 = 0fa14c2ab3bb6fc3f222f18538ee6cb98b2e1a4ca7b53e4c919bef8881380262
+AdditionalInputA.4 = 909589e0795e571c530879503b5660f420003bcd19ad051a5020a5d4461b9327
+AdditionalInputB.4 = 96d4628764c4a2e52ced37574ea8618b3ebfe7035d41edcc9b820a22aa16708b
+Output.4 = 1aaa09fc05a322d36100a6805cc79bc3b53438950397697775c8f8f5b6879d4f7386d884a09bbd57a68efd79b7c0af33b3d45d9eb5c1909d4ab3e831e2d26a67
+Entropy.5 = 46b2d86716a429358c6c3951797e6417104a48d8f75072a180bf7fdf6dd888e2
+Nonce.5 = 944b76180c1a360555098f3de962db43
+PersonalisationString.5 = 7bb9cb6423d4685d866e47f98473a7dc720be0e4a42eb38b0e383b3af6a01256
+AdditionalInputA.5 = aa56fec9906c89faadb78df0fd6707e75eae96c796d301357c9554e299768e76
+AdditionalInputB.5 = c37047122973a6bee2a3a9481a24d5482c6113aff3865d6fc10898966b7c8e6f
+Output.5 = afc813fb3647040d07963b87bb78804a0729a311b6ee4ed26656679e56e371435f3fa450454482703cbf918cfe0945c70f3757e2c6ab3a674ac73b21de42c974
+Entropy.6 = 4ecf9aa3d6e33808c52a5d7008a767b832eb925ac1d67ddc76115e3c1638ab8e
+Nonce.6 = d582d46465f0179d1d3a9590f88618c0
+PersonalisationString.6 = fb3396b7fcdfa449210b4ce44d391fd87ec5663e97ca953d2fdced453308f8a6
+AdditionalInputA.6 = 423b59a0387fd1dce93c4bc4b2c4abcbe056e10f98c11cc10c3be139729e04c2
+AdditionalInputB.6 = 5f6fe2a4be5701d0f8735f1e63aa1f4eb8c7213a787b8b144b83ceca54547a94
+Output.6 = eb5cbdab07b71cd35604e865d4f8b26eb840a65f83a1dfe7e3f6b2fcd2412cbc21f9ad093993cfab3b41489728338b58bef0b73d08638cc1258c390989eb7c28
+Entropy.7 = 94aa463c7546a159ea14af2355aa785a03c9121797719dc8e8d5eeeb2cc51c59
+Nonce.7 = 269e5d4ad3cf2d14a17bae19c7d9c085
+PersonalisationString.7 = 3511a4249d855072f65b31b21581992c754cc39dc5725924e57e5a39e3ce9e30
+AdditionalInputA.7 = ad0c18971e6cf6c7746671ac376c30861fc7ca661346067c44f60f48398cc603
+AdditionalInputB.7 = 1f4a35abe855d3fb5d69607bb8a5888a1054d99571f7f6020ec65248d4727d4f
+Output.7 = 7dd66ca401709b52c77f67c22026fd921cb603fec7289db44400a7cd8322f2b2f8e2da652be56ae37b2a5984ebbd889c63fc399c24296a6cb65fdb2c2e869d0b
+Entropy.8 = 921e44a4a0d18de32716d415c0ebb7447f88c94fe128013bb6ccb91ba370a942
+Nonce.8 = 02b1ac59d895eb9719a7ff3bbe26cf41
+PersonalisationString.8 = 21a1a34ab5aab76df922806839bd4ace2f17def59bc735bd9f9eb018004b0202
+AdditionalInputA.8 = 8f8d89505db0f59e62eac83a0794d57e7aa0b689825b1f32e4be82a2805ef794
+AdditionalInputB.8 = 0bd6d9de89606b1b6fb2d8556042f3be2e18a22465bef44c4b32292d91039208
+Output.8 = 86dfd58fc6b93d895710bb6b06767497ad1ca0e8c0f5cadd8a012fced92c4fa6423b77b96a1dc28971f7715b7823dd5d910ebe2eafee3779a61e1f707f5325d7
+Entropy.9 = 0c7c987a32bb369f5c133c0294360ab3f06fff4af30acf4a36554abc81ea17d7
+Nonce.9 = 49630b516b1e44cad4621bb1b29434ff
+PersonalisationString.9 = fc700612ef74779c25ef846432106ee4321d357c9c74ed0bcfe6d7312ec0c6ba
+AdditionalInputA.9 = 55d3deaf9f2670e72bdc3d13d62eafcc8f2c2ed0cbf17982f571d086738f40a2
+AdditionalInputB.9 = 03e480ed33c81f60ee1d558df49e6e0c2e4f8cd4007c0ca9d01a65e32d1fd13c
+Output.9 = 1c02a13db6f4befd3aa74b04e9eab010184a322efaeb860f607e98d5b15d4337983deef87799c0865517a12c4b49bed1016cb73eba6ea02fca60f7efe550df3a
+Entropy.10 = afdbc8acbeebbb3a58b1bbbeb10483534773a2e1631f98c3503f6a4b331b14b3
+Nonce.10 = dc8dff64e44d50d45dfd66fd7c547ad0
+PersonalisationString.10 = 2ec2bd1ab61479cf780b977cc480a69b53065f381270ea95a041eb416c8192f8
+AdditionalInputA.10 = 696fa5748df75cf646d34fb478ce2c9bfed2e79781f5ed1edc2ee7d9b58beeaa
+AdditionalInputB.10 = e7fef0f7553d2919b803ca8b83a6d463ce74ffa6040b022685eaee8165cb4938
+Output.10 = d557ec728787d1f2c553c2ba913451316e7c5aa499d9e74740bab159dc80bbc8870841ed8373c10afcc38f91b0667d6a4477dee88e07d90a10649d5721011b97
+Entropy.11 = 80cafa90e13c24fd0d5361f50f3858cb46be746c0bf9f9c86bfa574f6f63a6a3
+Nonce.11 = a9ddc18c929e5505da59eddcf51c6c48
+PersonalisationString.11 = 2bb75ce29bab75b2e9192b13729877731013c5de006c3f5825af8ee8d7be7073
+AdditionalInputA.11 = 8e97f840574b9fe2ed8a86d2bdf372b0f31f8929a8d0d2b1555f03d6cc960323
+AdditionalInputB.11 = 65d99e664a5f3ac7b0d079ba3cbd2d1b733b9a46b45bf805bbb1442692d1a4d3
+Output.11 = 9b9bdeea2c912fc16d1b98cb6802013416760809073c531248e26c64272d442c89db2342da1b44ca4a1e5d983499999cd8851e20fc0559f837f66796dd56b3d9
+Entropy.12 = 2816c4a6e859c7da6571f5921b8e621e9bdb9d97eb3f9a441a3e8537536bfe21
+Nonce.12 = 9b906136c685d9ae68f49863dccfc31b
+PersonalisationString.12 = 722282e8c3d4ae4cd32ccb06ad250b33cf6eb0cf964ebd8a1fb8b58bed00eab1
+AdditionalInputA.12 = 5ca9d7bd6e9534ddfa5a6c4dc00b404f259f042ded1f199ce66aa54daa3e5019
+AdditionalInputB.12 = 1dd41f3217024bd5f0cbdd44a5915eda49f3c303c9a70fd74e675028e567bb37
+Output.12 = 4e3b60aef2e3b75ed070d4363e6844c600a5587c5a8c8c4e11a6258761cc072fa416507d73a4bea19c8a3138a8db329716d6a830b2870b5b69958a4daed4b714
+Entropy.13 = 5f440db97d11475856e1204db700f20ef52cc9505de7fc2353d6429c8cdeccca
+Nonce.13 = b5f1e827263aac0dfdf641e899253a83
+PersonalisationString.13 = 2a5b6b8292e5e87c53cd2b27312f7700cc40ac0f4ad4bc7b9fbce4dd52a094f9
+AdditionalInputA.13 = 3ad35c3b318534ede1ba6f10fc759f24914a6c6e5934ba83a776ebdb57717aa2
+AdditionalInputB.13 = 81202a628bc31e86821dc0d8a3edb9d864e51b274c2304c63344ae5018cd0387
+Output.13 = f91d2fd3a20e545eafbe124b20332e4ac24abe5f2c5bc0c45d218488d2fc94ded565aaf5575d8c9351985fafb22e7fc5a2c8e9532e5baf4b03b9d1ac8a960505
+Entropy.14 = ec7e9d669b31770316b420510e41553f683e012403e657f639920a6035eed34b
+Nonce.14 = 3079e0a62150e60e58ade5ad62225fd9
+PersonalisationString.14 = af32fc72f234313dbb9fd66b4d91bba743206d6cdf289dcd4fab1ef7ab46b1fa
+AdditionalInputA.14 = 031860c8c01832adfbfcb9322f28e8bff40fac8b3dc28b366088c25f2c4bd7dd
+AdditionalInputB.14 = 31edd2a5cb0a51088951768033c9672240309342dc90ee009353f0c665ddc7de
+Output.14 = 7490d6b108e016838c6cf33dba4b78ee3b6b36829de51093c9e629094a2f462fdb5552f6a059333fcc2cc3fb7ff137c0d8ec1fcda17b5894e1a0fe24f1e67a8e
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 4ee68b3352b874e1cc29375028851dee9d5dfd88a40664c79e2b724fb11b2808
+Nonce.0 = 1c6a80d82012c39c9f14a808643f08e7
+Output.0 = 7c58d2a5522a88341fb55facefdb6e24840cae283948d53148a384e13b5407d7712c33434bd3d19448b43270c54860bf3495579057c70bff3084dddff08a091d
+Entropy.1 = 9442e3f76775093ac2635d9b217974e8c7cc9cce8bba2f04de57432fe6cf0f4a
+Nonce.1 = b94a558de7f887f7f50d3f0cd4f76f43
+Output.1 = 31caaee5d50c6342fd6b3b18d0f88e72b857ed3fe5cbaaf76be1a6acf08551cf3eb15f4b573ca98950c77d30ea1dc3b9fa73335cbaa8e3a5162111269af7333a
+Entropy.2 = 27f1cfb937185efff248e1b1188cf1fd9fb489a7c8795ef2c7e0f8a7d7f711e0
+Nonce.2 = e7ac795adcdaae1a93116866c009c5e5
+Output.2 = 14f22ab69b2d5ac916917089827bd657f8d6d1d980b79211bc350b0b3227968d876674297a8987ddb0a944ad1e22df4cf1b612af3f11013a597e2d201ded33c9
+Entropy.3 = 6589a90ddac0838c73b7a4529f2c647d707d3f5f17cb76a8df265f264e33c8b9
+Nonce.3 = 006a8e6c2facb2355fd6a4638ddb7c91
+Output.3 = fbed163123f1d040446cafe44b9660a7211d0ff0eeaeba86a612d81d88ee8c6ada33d26115272421e9b84a34d6bd6d7bbbe6043e382f348f0d7daa94dc72a152
+Entropy.4 = e876c10c9e42c75346d593d6eb047a1fb3367398d62316d116a929eb9ececb18
+Nonce.4 = 815ab76332db44e713a8e967b20b5c1f
+Output.4 = 7022db947fd418f6c92bf9a12b6d1b2bd217758fa2e36776f35c9d33a489f6913a1d07b4b461a13911469ccf4f3b5211117bdcac052aa8ee0be7e27c4ca2a345
+Entropy.5 = 9b3deec23ede86625c5ead5f2c77e605466b602240f556a180ecd2beee201a35
+Nonce.5 = db3d7743defc4dca545fbfc1d37a09c5
+Output.5 = 9dcdf14278bcf9959e2fc07f7b7ee42b9d51114e9665643406036241221c826a595aa1a339406200e23322203e3467de3f14d1e262ed8f4424f3e1e2043b228b
+Entropy.6 = 289f5e0e237e45b8f7b22663fbb58ebb9101bfa971cedc1f6977cfef02490953
+Nonce.6 = ecefcaa59d31c969141960f8f5caa857
+Output.6 = 68380623abefe6ff3210e662cb2cd04ef31092acb1dee34fac3a5f70cc9da2c4f93f875cbdc9ef29739c3ba6c900c33750895f107e3bc7f20611c404fb1d3d12
+Entropy.7 = 008bf69842d1056881ff2e3571827a6990050f5688377b10b0604412ce86f576
+Nonce.7 = 7ac5163c1a96b5f4a5b3d2f2fea95d21
+Output.7 = 18a6261edefd65f634fb8c806c615cd2aa82ca11c608bb6e9e831e1ee336aca2a2474370a461f9fd1a496acbe908ca58eb7beefe2fd5c4802cd527ae0a1cc6a6
+Entropy.8 = 419de08d882e1dea8414fd01f1850586e535904ef0de3bdd8b667d16feded63e
+Nonce.8 = 5257d3e32cf4cf5a1f6157d60304510b
+Output.8 = 0b7d935414d072ec7b2434a50b9bc90a2987c05fe5596282ff1700f4cc44224779c4ef2f1fe63a4f37ea8891850ba5eaa1f9082ba5b499ba3120368569d09db2
+Entropy.9 = 80394569dc1b8daa7d7d42c32f2621fac4d5b6e793e682456314978a2bfb49a4
+Nonce.9 = 9b85634262bdaed1c1bbfc669d6cd3e2
+Output.9 = 0821e18a67fd7e78c32f654e7774c1dc1244865e9afc12a430c98c61130f9533e99f641f65458e155bd67fef2f7b35eb7ec7cb38b1e87eb4dfa8a173b23478fb
+Entropy.10 = dcc9adf0029178d4d71dfe39790aa8505ea71681f565294784fcc36312d4d7f4
+Nonce.10 = e4a344daab48eb31d7e8dc38936f1884
+Output.10 = 5eacaed60052ac87a15e42997cfc77b69e898cbc61e36e000af20dc53dd5c8a1fcda924e1030b535c9e4dc87c3ec8d3ce4c061dd46de12f9531067ca87b8bd6d
+Entropy.11 = 1fee8b757eabeab660dd95dc0d0d69d182228f241d48c64067f80dd96158cfae
+Nonce.11 = 6eb76c5c85c3a35d6f2af4619c54ae21
+Output.11 = 8a6f21156fd61e1a836f6b1f545a06c81008e87c85fe526c3b82dbbbc11943dbaf25fe48ee31fb7018510b2eecdd86b21d1779d5f70ea28b44b1b294a56634b6
+Entropy.12 = b3ed247872210b15c976f423096e3d7f6e626045b2883803262a96aca715e2f7
+Nonce.12 = a1f2b45ca63d4c2a98a380cb24e48bcd
+Output.12 = be7b5572510a1c1d245cc2725ff927b371eeeea6eacc62ba6aeeb9543af5349fb9da166eeca6e9510316e8d89d5d060234012587ab0baf57a708c1b6703dfc9d
+Entropy.13 = 70cc7b7bc803ab30368972cc021c1c51a3f151335add726f5bd0841386c96605
+Nonce.13 = 26678777919ac8f1b38f936bc0ab9e11
+Output.13 = 55a481fe7b3c1cd29b942a7164ac7c7413db9711fbab14cf005887cc53fc739c68e37c0b13cb73e53e9d272af803170443ee09110863bf7c10c4102f2aced8ea
+Entropy.14 = 437496cc896a20dd6dbf33cd47532f9924e75f26e43a37dbe9f440f5f61136e2
+Nonce.14 = 6540d6c586eb24d164e3c5db938382a0
+Output.14 = 4b648f49a148880571bbf717ab213d2d92fa1f2a6983584bc5f3db212e6747c5ee8a6605e1bd14ab9ecdf52c2ac6518821e0d372aea57e79a2617a5d435c20b7
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 481e505bf7a36f9d96690d49154d98d6a247c14a703dbfed7cf1b7a71bee737f
+Nonce.0 = 70bdedbc6825c4fe0a9f7e45290ddd51
+AdditionalInputA.0 = 5b07610c2c946eda2975a26ddadf7d73e3d287e923d9b1a2d2070776a446d8e6
+AdditionalInputB.0 = 2792a988ebb2e768eee0d5c263bcd76a675d6f339e5f1ab2ca595e6b3b4d024a
+Output.0 = 303448a355fc0a69a130b6ab194997b220970bf680914913da904e92109dee3d9f23871130c407045cf463ce783a5dfafd603a8384790573af385d479acd7206
+Entropy.1 = e4b61f0362ccf3c1501c609370fd560588b9c1a52595e066f790f4355ba1416d
+Nonce.1 = ae47321ab5ffec927e5461696123be8f
+AdditionalInputA.1 = a59f6d3ee5c871147ebc2d5f6e6c70fd9b985da7f7dd049ce194462d9c83dfc6
+AdditionalInputB.1 = 9fe2c7db11367981474186d922d93edf6ac7aa72a3e159f5c40ccf901d523e28
+Output.1 = 70a78b7303f902a76221a401ebe134a6317cbe6177d0b82799360c4913afa2a8c2b36c0e8a135871c3c4000960faed3728c1fbd01ee0efc5c629a09677c7a850
+Entropy.2 = d753457f99c1c6f1da211aa2a5efd0e880ae0689e8ae296cec3b1b6c8f816189
+Nonce.2 = f65f7b222b518e0072108fbe99b620e7
+AdditionalInputA.2 = 6d587cafec4139766edff5ace6b63d9692862c99bfcde604feded6d9f6b3b470
+AdditionalInputB.2 = db184ae8b3f73aa22b63dcc2d21f14b9fd17aef3a96ba5f982caaa0c16690371
+Output.2 = eb5e5ca3c827576e897e2684e203753bb1a3bacb7a1d5517c6185adb9ddbeda8684f6cad3dde6417106704fa29f8a102725b7d80ee2caca14c0c4c873c7d646e
+Entropy.3 = 0e99c1466afb22f0e01f7e6919a875959c3d37c71bca6d5d59e0eceee49186cd
+Nonce.3 = 95a8dd75b076450ea6f8a70207fb1504
+AdditionalInputA.3 = 9992b088e9c76f49ddc545409d8491a90457570b3d29ae69e3cc1897e98d66fc
+AdditionalInputB.3 = c5eefdfb4656d3f988ca19efffeebec781a1e1b1a2997c3fb76e1d0dacdaac8e
+Output.3 = 4b0d7647beb959f712c101c407a25ff0457fa8287f25c5f2db97115d4cb8cc3539c50e6d51c5f3a725b43efb0fea3395295cbbac1e919d41ffc9f4aff82e8f7e
+Entropy.4 = 2bc449cbc223756c120354649adc79d0b53aef5343a61900b254235cb61524ba
+Nonce.4 = 6aa9dd157dbb1bbf4185e1cc2ca3b553
+AdditionalInputA.4 = c07d22db1adb41d8aec846ffaf44cc833ea1e26d5d0718a5169fa069d63edc5c
+AdditionalInputB.4 = d41f91b20289dfa49c2a3352200427d4572e9813381127324f49807b47541748
+Output.4 = 820db9b7ef678cbfa8449ce3dff4b76836209ab88ed8dca339084e46d1bfbd0aa553d41009d94659e610aca9b8e1ebe235b6437f360271edc5c05bae2a63fdc3
+Entropy.5 = 3fbec8e68caa291d44b65ef622818f80ad295beb067d785fae6930ec8717517a
+Nonce.5 = 8a3bb4d15ff0b8437be6abc003af0fa6
+AdditionalInputA.5 = 6c8c9c35853e238212a83359b5e01852b6ecc34dfe7a258f515c5d7058bb0286
+AdditionalInputB.5 = 207ec21f3051e03959fd2d447476b893dba1fef8fe422632feef23e3ef8a022a
+Output.5 = b9435c549a050515fddca454f602fdcd17fcb812be0e1c640ff859e1172c2ab04491db152819fa9a33fcb1e66dc8211c8f3676a28103b203bd2d0a6298bcc167
+Entropy.6 = 55fafc70deebba97306da5b744ff4e480e3cc2bcc8fa20ffd17ca851368bf564
+Nonce.6 = 408f2df27e5be68d254816687a63a419
+AdditionalInputA.6 = 64304f3df4486cf6f012252f9ca9c17104abe4863d1e3db5ab817476d43005a6
+AdditionalInputB.6 = fde8749c2befe8b06c79cbc160ccfe9579a7e762550cb8221775a54e982fb74c
+Output.6 = 709aa647efe0e68dfadf2437ea7556381ea4309094c104cdb8e4bcc31c74716fe9eea232158170fa978a7c05813f2592b3522e5c44f2526e764e66e312ecd49b
+Entropy.7 = 573a243d3b38fb8d6fccda5823c15d641768057036646fa9a4975a738908a164
+Nonce.7 = 3bfead783522f256a2f7bf076b21f741
+AdditionalInputA.7 = 65bd02594d57c4aaf8d119adeadb8ace866999146a67bb85878d572695ce354a
+AdditionalInputB.7 = 60524fb23731c30c3d1596c9f3a45cfc0da8198aa0967613b3bac6be7f485d95
+Output.7 = 7ae38a83c11261cb22a521cdcc3197d8d811b8cad9071ead382e5bc253030c9cd4165215715a8ab0af1c5f91320399cd1d9b3916220c78c586e96651bc1d80ba
+Entropy.8 = cf81df4eba87ea2e026ebc6cb97d3dd6d3fcab6f4d0c520a8fc53dca99ce8490
+Nonce.8 = fdef88d87db58bc8397e988c834a8958
+AdditionalInputA.8 = 7bf9c07bccd7d50773324dcd876b58f656c6fdfea5aef1a9eb7702d6ed175a49
+AdditionalInputB.8 = 0755e148493539438c36fb2abcebc345da73eaf00f75da1cda13ca6876794cb5
+Output.8 = 4e8360e6fcdccb12ac6ee7f022f7e06f118a75f61c8aa197656c93463b86662eeb32214f371c8dce06ab1210f1f54f9db3b63eeed7ef6ba7320192264a7920ce
+Entropy.9 = 98feab860bfed19341ed1364d4abceac3004326299895330405f115fab031816
+Nonce.9 = 1afafc209a776bd01410848e5fd019d1
+AdditionalInputA.9 = 475009946120a2a2dfc106cf4b9f6f40a9b0c41b616bed3e536c9eee56e17043
+AdditionalInputB.9 = eff6d5392d5419f6a8b425ea8517190cad4197093ac63571f0d3c33f709163c2
+Output.9 = 0610e28e8af57a29916d8aee19dadaf0ba6aa8f50fbf850f702e59b466025aca9b62fe186d536e1a55c671dfe2b158bca65a1cf681a877cd5f0a4b7798ed373f
+Entropy.10 = 12cca9bad0661f02db438baabdaa2941cf3deddedb09f530ce6bfff278b79b23
+Nonce.10 = d716a190ac3f0f5465447993a9e20497
+AdditionalInputA.10 = 881fb68d66b69f4bde4a3ad1f150bbacb087da232e1f4d7be396f1da7463cb16
+AdditionalInputB.10 = 5b1d230db87d2aa1f3e110f9c0f913ecf78d0aacec0f47c3265fe0e609ec7a0b
+Output.10 = e9dd208e8f0f6f3ba21a9b6792848e95d7ee5a73fbc719ef9b5cdcff36530d3ec6f7cadfc55521c162cffeeb917c72fae341e5a3f7c8d5cb5b4508011557e639
+Entropy.11 = 99e396afcf807e6dfa0b302872eb5de0aa74b05900d1a06ee2c1c4d3af535fca
+Nonce.11 = 75a2f6edf85571d19c032965d2603fc9
+AdditionalInputA.11 = 581e78adbf5d9a668d013b7ff9046191e434477f3c3fbab447876fe87f2c157e
+AdditionalInputB.11 = 19f04c1dde5c2ec3eca906e7bac8d8d349b7ca49ca5d7de1f226ddd04c73df1e
+Output.11 = b8fcf90dd47144019705e673cdca261458866fa515760bc2488ca403309ba63d17836990b61a2017786196d70f65f3c80f5f9fbd4d6bede882dea592d1598600
+Entropy.12 = e261435c338429425d5491f7d8f54ca9d5082443858f46375fb2ce80235096b7
+Nonce.12 = 8d92020245c41590e36051a57fb12c04
+AdditionalInputA.12 = 6cfe2dc45a88f09cf76e6cea11ee5bc56b219147039a13b1a7fc99ae36f58880
+AdditionalInputB.12 = bb8112e5004757c0ab45ba2325735919f2141f9c6d60e20784a72ef7ab98d456
+Output.12 = 431df765c49da3b41e72b64af260e285f1897a594d907e9a41b6bee0ca69c91331475f95b20407fe777fcdef2174aaf47c4e7b8bfb3f3e9b5f52468466ba9aab
+Entropy.13 = 80e7cb47500012de07f655797b248305e21720c6dffa44c096dee7ac84060f43
+Nonce.13 = 7c21b12032c2bb4a9c1364be634b665f
+AdditionalInputA.13 = b303e2d56a5dff48da4ef1c7e8442af2a149a3890f3526bdd6618fceaeab32be
+AdditionalInputB.13 = e1ef53ff0606114f7b882eb7f5207ab964c8ce7adfb9f631b7aa74a23127f353
+Output.13 = 420242b4994775c82393808cc170131625fdf8ba10c9c8a8bc335916441a8063843a4a8e53d00f1a38be1f7beb9465282ccb9f47a46d99ed67a98686a1c11c3b
+Entropy.14 = 00af19872107565789d407af381f02ef008bee1f20dd695bc00c58afc7bb7edf
+Nonce.14 = 13160203230ffdd3417164aee1cd8764
+AdditionalInputA.14 = fd8aa4822723291d4c46716ac560684f8fa670a3d0eccc07a5a3335f13168357
+AdditionalInputB.14 = 12f3a8790b35379f344aa0627fd4b0ebb13419ce977f7a38e1b0187a8968d290
+Output.14 = dbd9ce5962736e224ca4b3b855e13970eaeb0a5c607a66f1d0303de959d817185b1f7544874f51eaa53ad0c3debe851e6b23ae2ee36d466288026d96bd2799d9
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5be576ef25e04ff8d61720fdfee9665362da94ce5486f5914f2410e06d09c73e
+Nonce.0 = 7b9ccc3e6d5d7b5fb5d4b321e4ff476e
+PersonalisationString.0 = ec2941f8684b25dad39f57acea40bd3646e209911d177714ab92cce13afe75e5
+Output.0 = 1f9780ec93e75db864de37b3f9290c609ae3620fab6cbb6c17f944383fafe0f64c233110eacc5b4e5c4107a43a0ffb00a94e00fa8918f11f4c564f04be7126bb
+Entropy.1 = 6c35439f34a43cf789b47b4df091f0d2028b9c8c746584ae7ca717f455044377
+Nonce.1 = 79d3889692cd2e3ffda028534a12fdf9
+PersonalisationString.1 = 2eb682598f5ca061f11e6536fc94a3a36f3df2896e2ec9b57740e67c83424b40
+Output.1 = 3464e75b5fcac3799637a40ccda0781bda21722d39b0692b8f567480a98d90a02919553a38830d7ae4d58ef361377fb1a868410568e7f3dae8bec20023eff493
+Entropy.2 = 5bbe84ffad62deb1edf2801dbd472d028f45c06fb8334d141f08c5352cbbd272
+Nonce.2 = 94f6ce2a287644acc4575a8ba6782658
+PersonalisationString.2 = 0e3b68da0e167e011d1ec8dd7d8b9afd4b0b6e42806b6000dd79757509e04f39
+Output.2 = d3a470ea6f5a160963a79531cee9679dd89e05141224883265f214ce17d836a2fcc3e2870d45662d80240ab57e28f83d07e13af582aa7011f969c8e0e732e785
+Entropy.3 = dc881521d70f4d5b34c956831e2c9536d6e026d78629577033be800785aabba6
+Nonce.3 = a85319194e701c558a15a0fcf3f35f49
+PersonalisationString.3 = 23ef4cf42fec6f4bd15c6afc0e1cae1a47729e2f91019094822a9ea4024bcc35
+Output.3 = 74b03616f6d362a39ff33ab8593b7a87dcd831faa056238a445d0dc623fc47725c2ddea70a5f0b8751a130bb2728bfc3de117677b3886d4d6715f2d8296d71f9
+Entropy.4 = 5c3cea9bb9432f23600979d7c4511d8561bf7d88d229f35138ac19646c5c9eae
+Nonce.4 = c098b0aedeb0e7c3a44da29c678f2b19
+PersonalisationString.4 = 503ef454d59b0c68d23a4bae0715a8963ba7bc70325de3fb59831c907abddeff
+Output.4 = e4408ca3cc4aac0645ddc3a6612d500c2686299b4fb628730db549fd49b1a8ab8ee7dca0fe5e732edb5252e69b0d9091034248c16548b0317b660b8a8b8e39ba
+Entropy.5 = 6ecd2eab50570cd5320cedc36ce4ff7ee311b9ddca8cb071eb82ba04e2737bce
+Nonce.5 = 7c5563332425065ebdcd721faf8c3ff5
+PersonalisationString.5 = f51ddf774db14f406392bb6c6ec53f231ba4c3c418ee054d76a32aefb71f2b1f
+Output.5 = a330bb0b8ab6054e99a4404ddd862b8f24039141eb89b0f6577eec2535c1b98b964c5d6a827f5613607863a59404cea55db79be1d08c666b02f5c2cc6a0f7f84
+Entropy.6 = de5a1875c575f7d38ec13ff4774c35b8c6b891b0bdd36042911d157bdfe00c53
+Nonce.6 = f8d1ad3c1510f8e5d0a8f05f439924ff
+PersonalisationString.6 = 1d320575e79b09f546203bc5d5b86ec0f762675356d84d6e7f57e57b77cd832a
+Output.6 = 1e749f2085097ab5462a100e8a86bd946d29232162280593e900ac778429a3b58932a51189b17238927aabb694ec481dd66c3d937b600fb626e02181d0020eb0
+Entropy.7 = 60152697eaee41d5f572edc08dea0ee31f4943446f5573fb23f5bf4ae98825c3
+Nonce.7 = 0213d591a22bb0baef78fa141dde5b72
+PersonalisationString.7 = 36596e0a5529b22b64d08763564676c6f429861e93ba28a43ef7cbb04b0349bd
+Output.7 = b33f03996ace84097fc3058c52e496c4b3b1337bea78e0c774bd15b94c2704a5d2017ba8920a915e215a757fbfab2d8fad6259481b4f113a8a62e2742d8623eb
+Entropy.8 = e67e0aff1453e6714444171822e66ef7c62e84ca66330d48d838403bbeb4f5ed
+Nonce.8 = 2bfd344e1cfdb12b152b84e9a8904efe
+PersonalisationString.8 = 9e9a6d164bae83b080e46b23dd1e531fd680395429f2e760bd970ff8a2f8c7ae
+Output.8 = 9e244cdcb0ddbbbc24858a52c78cc069c344e465f533980770fafff89f22aa52656a4ff2046bfd3cc7d0944b9543ac0e820f0e1920d54b9218f1fccbf0b271ab
+Entropy.9 = 9828238a3a1a6704bb296d121006724f582e5b70ef7531221d6ff63411e60cd9
+Nonce.9 = 6b5456cc71b79b41d3b26da1320c6531
+PersonalisationString.9 = e5e64fa551427db8f818ce5bdb534ebc7055b5981dc36f6496dac9b89bea1e61
+Output.9 = 5a69b4fe77156f878235ece127ad6a85b0e1119d17a08b21977615d8a9bb8ad7caf35d899dd9aa210c57e1104f9a9ecb7310ea6d54c09884f941c6cbff3da5a0
+Entropy.10 = 0bf40a75a2ae58035bbff7664fe2c958adc57900213af9cf4cdcb167b557bbaa
+Nonce.10 = 3856fc02dfdefc9c6d003b1fef6b7197
+PersonalisationString.10 = b5936c72db21716cac94444ca4a6fdc9f550d0fc7131ddf2709a7fb544d9e2b7
+Output.10 = f6d9e5a5d1d87f33655c9cba1e936304277d6998488dbf22420c73c82b0744c9cbf21ff82e799d29c1d6e794451ee7e53640f550bef721f0394d73a45715ebfa
+Entropy.11 = 98c6b29f701fe30c41d34d7f1da36fe2a719de06e874ae80684399a673a97d1f
+Nonce.11 = 0369f7b49f40367116faaa6dfe4ea3f3
+PersonalisationString.11 = 0e48ab3e507d5c74ca5885a6848c05f7e03bc2a0fc4792aaeaca2a1699f5d64b
+Output.11 = 5f93adee1105aa589a3c54dc0301257821b09367918760b75b8379e3f4d30469c497b7dead634a6eb75e544d7aab18eb9dd2f027c74dc2b447f9dc98ace5bba2
+Entropy.12 = b871d4b9c785a5590e5540d41e574414779760d93fad611c8b40bec74a82d3e5
+Nonce.12 = 8b4035fdaf566ec2d5aeb05671dee042
+PersonalisationString.12 = 8d9adab4c1eb1818fa7cce9e17abb4a2b4b57209dfc251324244a3bc2583a361
+Output.12 = 4f46f9eea62208089fc87d5c7ada6adfd17fdb6192e02a1b90716602c6397968181561c593757b4bc5869647ed7a2ded4f217445ee5998f7e9cee892fface9e5
+Entropy.13 = 591be0b5fdf6d1b3b7f5b133d9e05f81ed45f252ab1342a9a225b4312706a2a7
+Nonce.13 = 1998ea95f016e68bec009d58aaa917a9
+PersonalisationString.13 = bb41dcbd6ba802255a85d4cdd9b38851d636ddd0a83e65262e3d2f4c7dfca497
+Output.13 = 0dd6ba8ba9526222c436746630f07912d54dcd9c0cd4a2e95f0276ce07e031f461b35af87d0f694ddcfaca8fb65cdd657f524f3cb1d92858ab58767acfc2d23f
+Entropy.14 = 622a613173df7fb900894609e24440c3f456a3eaf9e38ca988cd24035e3927ee
+Nonce.14 = 377c3bdeb56a6fcf9382a242b1036cc0
+PersonalisationString.14 = 7aea3ff421447e01333c14bb5fd652b159d1f5324ef8d23e5e36081d848caaf6
+Output.14 = 22932674bafdbd4f7a343c5205aaf095edfcf712ce010c11819cd9171d1133c889220a1f939cad9f098c504e62f98a638827d736fb9960829b3826fa046f31a3
+
+RAND = CTR-DRBG
+Cipher = AES-256-CTR
+DerivationFunction = 1
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6b536f8f4c5616a0c4e681825585724d522d37fc02a05564030872e0d6c3922f
+Nonce.0 = 0184417527ffdd3edddbb070957826c0
+PersonalisationString.0 = 91e62a609b4db50c5e7ad7d09dc387dae9da6d2585bd3530389411cea7d2a40e
+AdditionalInputA.0 = 42f398bf2229976f9d97b0a5fc47d5c64b70fa5631abf28f2c6f91f78b7278d9
+AdditionalInputB.0 = c624291eb039ad1724c9b0ba20b98421a7f0032f6c8c00f64794018ce5a5ed96
+Output.0 = 507e0b4f12c408d87052b79eb4879c925a918b0fcd812bbedc720a3d8be656e40de900257f7a270dd6d8e7da50cdc20d744e94978d707b53f382aeb16488b122
+Entropy.1 = 46f626c7ee44dad83ced8e6ce556d1c440da55c7c97b4b0e51b9817e977001b9
+Nonce.1 = fd563b05c0c95f2ba940fe9e88ed6fb9
+PersonalisationString.1 = ec1a7224d1c135597b8e414d2eab6242651bd66278973f4d5ea26a06f37c0b3b
+AdditionalInputA.1 = 668432e5182494b232e8a66a7135f031e1154528d405da057bb4c8cfadbf25bb
+AdditionalInputB.1 = 10e0d13c77c504bf78d293ed12de192c108d7dbed81afbfeddf727e9f2816415
+Output.1 = 2ba89e1071b07b914779a5fcde874a74a4e9b9081bc0cfbd8a6234d75567ab7dcf2c9be003cdf7ebbbd166594f2a80899ec13a484d4cd26d0338e1f9fbb4d3f6
+Entropy.2 = bb55393be659c484705d79bc8787a54cd1c17956787e3f3253532101e18927b5
+Nonce.2 = ebfe1765d9d659467311e34479657bc1
+PersonalisationString.2 = 73544a814c51232d4804c59d171d500e292fc9110e2b26856b9db7d7446a7a9a
+AdditionalInputA.2 = 855fe1cb8d5072f03db8e9c4aac8eb829c47bf9acbdc888e773e36580fa24f34
+AdditionalInputB.2 = 6494d5ec3f17d73bb6521427640814f7b4ee4070145661637d2f79b2ef18b4f5
+Output.2 = 25ac0aec119803fe7d26cd7635f41f82d0ed634a3035886e254ce40f097475642904eaf3be5becb74043be3f33dc2940632a9e6aef8c83675575b7c830744949
+Entropy.3 = af2959b0b442eea3a470fd2e6531748db680f5431f979e40ef402f7ee06be275
+Nonce.3 = 147ff9ecd91a622eb75499d986e507af
+PersonalisationString.3 = 02dede568c8eec1b34a042ae651d6e0687d1261f54f3f39ed7e0ef4d1c1cad05
+AdditionalInputA.3 = 43757f986a40915ea7cb7d51ecd4dc8e2e2f39e1ad7f22d167ad486c90a76bc1
+AdditionalInputB.3 = 2b1d19f3c7ffe763f2af14bdc6c6ecac15656976a18117e704490bddd15da37b
+Output.3 = 57f2c00be62f8a881abf8f0adccbfcf5427751081abc87ea0a87f260f9bae57fe5ab04bfd82564012cd39975b924b417a1fb3ff88816d264277021513afa0f4c
+Entropy.4 = 556487457a0558a13f90a7e9b05c73c5c854c61ca20f89f5005705368afd1ab2
+Nonce.4 = 85bc559bfcd54dd3395f6e65b7cb3ca3
+PersonalisationString.4 = c60f026da94ee1a849569247c49135552e7977fd2afccbc70b2bf065aff405d3
+AdditionalInputA.4 = 5b0952ebdf3b340ee056be2aab09b4af54185d5d535cb252b0f5c6659f311540
+AdditionalInputB.4 = 160af1ffe37eb9cd0fe72604420ca199891ccd44466fc5a21937dde06a5ee8a8
+Output.4 = 5c832d5cb153f212a15bc69109b2bd937f16f40d0007f9574dfb998f3491c140948bd8a3dee1c441823f4cfd8405c429a5fc477aafa21c0023a9be350646c554
+Entropy.5 = 3a820ef605b4bac4c2766fc393b765699c153aa37be5753036d4bd3b72c41507
+Nonce.5 = 018d9fed42f2d2faa18f73b34518addc
+PersonalisationString.5 = ff3da2773e7a6b0f09eac7a99adaf12c0bd9ba07afd1384b00248ede8d633d41
+AdditionalInputA.5 = b5d4230302cca88787f657c31228ecfea666669467d95ed516828ea0c6ccb6b5
+AdditionalInputB.5 = b6257da8396d915972062fbb30b6603a4d571b856b057138021dee142cf1f5d9
+Output.5 = cc8ba6d24bfb07d83b9376ff07ee9e199254a96d4c45be1d4fe8da7fa730208b261dfc8db31f408f27fd6fe044f480bf43c1aedc01c1dfff0340d74a41600d1b
+Entropy.6 = 576d5b5a86d19f702a070ea2c2bd26c23220f22a2bd2433ad9dfde964b4c9269
+Nonce.6 = c5150449bc5b9ea1a6d54834c6fe55e4
+PersonalisationString.6 = 325db7771ff251d5b33a83b4197162714870be8109558be4344fbf215a0f14b4
+AdditionalInputA.6 = 039a990b3def7006da9e129e86339949b19195e7d520f7f7e3ec1d0e2f5f7cea
+AdditionalInputB.6 = d453960440719a68b2e12f957f66414ca7b21b7ffeaa95d5822f74d220a784f6
+Output.6 = e8dd7958d2c06322255778e6036f172919e52ab5197d620babc6af85aa6affdc75450da343865dd234d3e7bcb904a72b4ea06450d574d28b5d3374b1acf1ee21
+Entropy.7 = 06d1ae8dfa79ca5baa17c451b2f1a45f29d693bc565d1ad7475f48d855578127
+Nonce.7 = 91a2df1c8f01ba16a83a224e39f4aa30
+PersonalisationString.7 = 94298fd4ad50960c6bcff3f40cd6ca99a2821c56436f2969e847b97c12d3764c
+AdditionalInputA.7 = 6c1d46914e2bc5b56b5889adc0ae03bc60749a9a092a14c51fccf2a27cb1e4c3
+AdditionalInputB.7 = 26d2da54b6e166da72a23b64023c5515b0010a8337aae019f89c227bbb4b18de
+Output.7 = 75b546c2fe1b4013c7bc31e0c80bb1089cd946f1b035611f9126a0e330b8fdb089520aa7368e124370889b3155d39b62472fbae71eb269177104bb61af3dde39
+Entropy.8 = 12bd366767ea352d61f059deb38c8aa48eff1ea82ea4d624ac4d0b9a85402bc7
+Nonce.8 = 1fc606b0cb2bcd605190218c3afecf2c
+PersonalisationString.8 = 79554381968750ff21a6249ab6561c132ced1117c812fdfe179f96d09609f26c
+AdditionalInputA.8 = 1156ea54e2d49af0d9c3975f3ed8fe12a57bf1d7215d7f7ea7d5b802df533ecb
+AdditionalInputB.8 = 9e171c51fa0d85bf637f44e500a23277d754836ebc7276ca7fbe9950c8f800a1
+Output.8 = b3bb700f1e81055b25b1b2d787df3c5e8e688dcbbbca7c5c975ab8a6e782d4ac1969af4f9a79f75ad88bcb8286f31b1a4a3afbc3f575ac616b59ce6263690874
+Entropy.9 = 9e7a21016acece9413f12246e96a332a039e94073f7021eccfdb2bb056610489
+Nonce.9 = 5d47a59e428bba416613110dbc36f0d4
+PersonalisationString.9 = f6fd579946d0b6ca241313103d68cb915287aa571138c2702b3a17e43520348b
+AdditionalInputA.9 = a45fc73e01510fee6240787e166c743635fb55d1276c03672e3b4aa8434d8af0
+AdditionalInputB.9 = 06a7b57b497ee66ffecca0a62bb47b6d563e69d86a39be2cee6733dbc9cfc595
+Output.9 = 7faede537262cffdad9fce2be2b3b6ee031852561c7088150f776580f56fbf0b83e192dbf5455ffd8df951599c1758687e76b1beb74a747a7fb651d052c49169
+Entropy.10 = 5f3d888487370e4b7cdec88337165523898290faf6bf73e38012d355625879a5
+Nonce.10 = c8c14e4818d86af2c887472475c75f3b
+PersonalisationString.10 = dd92517b8719fbe70feaa82eb85c7f11add346e35243f047e172fdc2c37f25c4
+AdditionalInputA.10 = 0a4bdd431bbcb650a5e6aecab59649e41b8c1ac50111d12bdd3e0b9cf667d2ff
+AdditionalInputB.10 = cfabd62c4bd230695739de221517cf9ee064987ce63ed1d4b4a88b3b14ffaebe
+Output.10 = 890c6b5c1e7b478226a20fefaa4c03e878534d86a6075f9911de98a4e9acd648e74298b3e749f6dad9925976e7b69206129e7663e29caa3e3e92f750c74665fb
+Entropy.11 = 49c7fc5fa45f4165dcdadb6c45e09d1d965c529332981504a5d3da21124b8565
+Nonce.11 = 346745f18e41666a2e2409ac7b36a244
+PersonalisationString.11 = d89f116d8c3be30878eafe8faba4bff3519b144c08c038c6ed3ccfbc8900de3c
+AdditionalInputA.11 = aa450ca29ea690e4258af93f462e0849a1fe520aead96c5488a2f69ccad733ca
+AdditionalInputB.11 = de18864a44c5fa8eeb1116696aa9c75d57cc8ce07b7693babb22f3f88314f22f
+Output.11 = cd1878ca2e9b29348994648b9578923332a62fdcc80c7d8e202815f9f48d2a75aec78e70942017d8a0b534de1f8ffe5db502acb3abd4738377d98d26b163e607
+Entropy.12 = c94d907a28640eff377456efbaee67fe5216cf97d1adf7df4db6e18b596e7be0
+Nonce.12 = 573ce3b9d4fd830afb99da3bae14cc18
+PersonalisationString.12 = 68cb89df073d0e79367743af1c1470aa657dd67924d964ee80be72d99198e4d9
+AdditionalInputA.12 = e4c5a339dbfad8036a3b0575bdfa3c7d2f55ab642fc8cedda12d900d8f0f7449
+AdditionalInputB.12 = 8605c713cd3b0eb83dccdc42278c0e402cfb83ba5a5ad8864da6622b2a725834
+Output.12 = 1457a5d363d57fa36c01006f1e950f14409aba72a143b18470c46ad1c2e319b64ea588d683fc8af7442374227b8f424c4f030b5615915465eae7faa06ab9d296
+Entropy.13 = d8c28c04a74edddbfecb4b1a2320793d9e228204686c973cd01c95be37297a57
+Nonce.13 = 121d673ec1d9624133e42e2fa7c7a751
+PersonalisationString.13 = 339780b025370e439b7c92703b66ebd5904ead35e2640a85965aa0c4608c5a09
+AdditionalInputA.13 = 9ae17455af94a8d9eb2d0c526d2e70bb97dee505ed5a9aa93333c07968dfa1ac
+AdditionalInputB.13 = d5fa7355fd2f144f3feb642beec1fb4940e5d2d1da0dbfa1e5f59a0860faca6a
+Output.13 = 96cb4adacb8bb1caf1cb1e09b421cb52b114cf6bc4b94e3de21f140bf5dac2bf103994b859e20e38431d7a912fa986b2889841241c8ec942298a89fd6830695a
+Entropy.14 = 5fc1a46b9b53e83addd616517932ad8a84e550a58327ee245aef208264c5b91c
+Nonce.14 = 9ce74e2b3c43ba1d98f7d4e8eb5c9b3e
+PersonalisationString.14 = 5fe01c84f824c17e4dfbfdb75c3212cb2bfdf2da7c497febc0967475ebe291f7
+AdditionalInputA.14 = 84922c0335a0ead609e5a92cfc4a225bd3c7c01ab4580b786338e1caa3622f44
+AdditionalInputB.14 = 34b034ca643bbfd2fcc57c9b53e0f9b3fd6a73454f1823dfe7b7076ec73fd956
+Output.14 = 6caa4475189ee00ddc54910f8723b0e5b8d3d0c321ce7f2ac7194d134a0a31d96b102dd58e092e08f8a008f05c4f2afb2901c6e29549d3a720aa2b1d1f461bb9
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ce50f33da5d4c1d3d4004eb35244b7f2cd7f2e5076fbf6780a7ff634b249a5fc
+Output.0 = 6545c0529d372443b392ceb3ae3a99a30f963eaf313280f1d1a1e87f9db373d361e75d18018266499cccd64d9bbb8de0185f213383080faddec46bae1f784e5a
+Entropy.1 = a385f70a4d450321dfd18d8379ef8e7736fee5fbf0a0aea53b76696094e8aa93
+Output.1 = 1a062553ab60457ed1f1c52f5aca5a3be564a27545358c112ed92c6eae2cb7597cfcc2e0a5dd81c5bfecc941da5e8152a9010d4845170734676c8c1b6b3073a5
+Entropy.2 = d4f47c385e5ee36915978386a074d413d04a1ce3a13a0fe2b17f3f20f83a93fd
+Output.2 = 27f880df4c2907697fb2f594e311559cea827049327af31fa7f0cbf332c4620674f503d7dc378320d228907151d32ee5e3f5c5eccb13afe58bf6a60192e6d70e
+Entropy.3 = 123dd82c6a8d6a5f23067702e8222733a39c48965baccd9bffed5dc51cb789b6
+Output.3 = 12dd6a874a4656c7d5a21cb1179b3c4a9982ae00fc1bf26cb3a139cb21c4505045ff5e223e2d081fee52b22246d485b9f1274aef79a3301d2636999799aad31d
+Entropy.4 = f1a69af890b2c979fae046a2b58d00a8331c5322472b0e619bb372bfd027f705
+Output.4 = 96091258c4224e3b03d65c938c97832b55143069db5755196d52f525be959d519b1e02e5f2dabf4dd2164f9bb06a16a63576ff6deb042dab74033916c95498c1
+Entropy.5 = 14a9a1e20ca3686f3ec09603f6730bdd73a9cc8c32388ec00bc28e6c9ec65d87
+Output.5 = c12946457ad89dde788e13c5092bbf3e9c7f61eac73261d01d396a1d9d1163eee847a561d8e52080cd9bdce570141782ebf167c4700a66aca6fd5c9116a7be49
+Entropy.6 = 97261a2c19c6dc36a6d0283a177eb9666c21817fc0fca462c53d90b3d814cd92
+Output.6 = b474f2743b6182b051fc7c76c6b4085b2f597639ca19c1eee05c1cf439bb8edbe093d0b2239de5d0f79bebf0e622fe04b513597ed1d8a02821a0bca435d1fbde
+Entropy.7 = 9fdde0f7eba65381bf637d7b7e6fbc20deef906013018655f8d12d747db8e225
+Output.7 = f4a55aa4c245cd42a1b6429637b0774189ef4e5053bef06bbf422b2f10399e18b9f86dcc56aaa6975ea15622cdebf36a3f4778447bb23a2044c283a79903beac
+Entropy.8 = af62299f37895332d283ff9f3b0ca29f9003571893ddd1bc2d28633a33992b4a
+Output.8 = b91719f2d1297fa9c51720ab9448228e333594a7a1c0a5d7a10ae88249dc0cc5d07abe20b7915d2a87f12ec4bcdf44efa911f28c5e9e3909018e4a6bd1b5363b
+Entropy.9 = 42fe0ad088d5c1d6be9e02c147d5770c9aa0a977c6300cd9aec940cd15ecfb8d
+Output.9 = bd1a65bb65b55ec4d6279cb94dbf3bcd82bce09fa277bfea50b5dab64b06c0181570032a3a6f7dee5b2ccea34bc6928db11dec9329ed90d109c0bcca7ce7a428
+Entropy.10 = 744ed74d83bacf92d4bd4dd052458bd8af10391c66fc89e13974426320aa474a
+Output.10 = 8ddd0270b07fbbd339bc83ea7a1d986ee8e1a061c7e31c5dbdccabc8f25227832ec45f5ef9f28ca0446d844daadd192024c4d36854fa23b58a8b9794db6d3acb
+Entropy.11 = 884e9faa661dcecc3765c797a2af8906fb893813a396e02b94993826288d2a6d
+Output.11 = 18481dc45ca3f1896fe6394a2367d44c4e458b455c9f36a5d5ac2b6a7475cf7599a9378f9cc72ffcdbea71f09c9a244a36cd660b722546ea2af4f3e77596ec25
+Entropy.12 = 31d108fe0d40fe05c9ed8372c3bc09d1058b397b9006fb373cdd16a5a40e2cc1
+Output.12 = 80822450b0487e70ada948da0b25cc49a37dc58e0dad9233badd0e88df520d3654300f081b02e8545d6d6818b82e45964db8633fc769af84a9799e92a1bb0d61
+Entropy.13 = d5464a18aab8873d63f572f6738ef27a39845a31a211700310321e42b6620b4a
+Output.13 = e2b531ea43c513a1564fa65e9a68d43c875137773102941d0ef544c84e3689b82eac32d8e29cce42eae393e086ab81f70520179288c52cbb6448699723865b49
+Entropy.14 = 727c0ac75a99bb1a318e4fe2fe0f2e312b3b61d82b2e5071acfb4a36bc8258c1
+Output.14 = f595ee1af437fe1bed8d451088b788f1cd599f2b0c47feac1fb5c6efbf7a14a8ab0ea11a3569a3c23b2a9702b415bda355c15afd275c0d67b38bcfb54ab13f70
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 6bd4f2ae649fc99350951ff0c5d460c1a9214154e7384975ee54b34b7cae0704
+AdditionalInputA.0 = ecd4893b979ac92db1894ae3724518a2f78cf2dbe2f6bbc6fda596df87c7a4ae
+AdditionalInputB.0 = b23e9188687c88768b26738862c4791fa52f92502e1f94bf66af017c4228a0dc
+Output.0 = 5b2bf7a5c60d8ab6591110cbd61cd387b02de19784f496d1a109123d8b3562a5de2dd6d5d1aef957a6c4f371cecd93c15799d82e34d6a0dba7e915a27d8e65f3
+Entropy.1 = e2addbde2a76e769fc7aa3f45b31402f482b73bbe7067ad6254621f06d3ef68b
+AdditionalInputA.1 = ad11643b019e31245e4ea41f18f7680458310580fa6efad275c5833e7f800dae
+AdditionalInputB.1 = b5d849616b3123c9725d188cd0005003220768d1200f9e7cc29ef6d88afb7b9a
+Output.1 = 132d0d50c8477a400bb8935be5928f916a85da9ffcf1a8f6e9f9a14cca861036cda14cf66d8953dab456b632cf687cd539b4b807926561d0b3562b9d3334fb61
+Entropy.2 = 7eca92b11313e2eb67e808d21272945be432e98933000fce655cce068dba428b
+AdditionalInputA.2 = 0346ce8aa1a452027a9b5fb0aca418f43496fd97b3ad3fcdce17c4e3ee27b322
+AdditionalInputB.2 = 78ecfbacec06fc61da03522745ac4fb1fb6dee6466720c02a83587718a0d763a
+Output.2 = 904cd7904d59335bf5552023b6689c8d61eca24851866a8377aec90dd87e311c622d507e678581513935bde12c8b351f8d9a8efcfcc1f1ff76c0613bffe7b455
+Entropy.3 = 690e1ffaa969bd3aad20b2d646a6c693753467528d1dc1fc74e906f49d075d89
+AdditionalInputA.3 = 4a4345db4fed24cac49822cac58dc44edcdf9c63d1dcba9f460af9dfa2b555b6
+AdditionalInputB.3 = e2a565b0f970d2d09d1b59a6259b866912b266b76c3f09a7b6f0dfaefd46074d
+Output.3 = 27b4cf56e9d41fe11dc2933110cfcfd402ce6bc87406cde7f0aac0b2df410eec9666ff52e1a74f3224742af58da23bf5eabb12d289e41347b6d25ee0d2b37267
+Entropy.4 = bdfa5ebb4e3c31e63a9ff14c3e80ea35f86eff0269f3389f9f2e9a5191b6065e
+AdditionalInputA.4 = de02565f2564bec869800a818ba79bdd37c9b0ab7fbb9cfe953eb14f0218ec21
+AdditionalInputB.4 = ab7b1cc8b89bfe190293fb803a637675940cf2c38611968f770621dfb0ae35c2
+Output.4 = dd639aff7276f19d80fca5641ff90a2026ffce0f7e1bf4d50398b8aea052e6b0714f52a3e76c82a92736d307f1b732d045709d8455ba89aae108daee9f65cc4f
+Entropy.5 = c16dc70849117595cfe206c270c9a753355e1ef23bebd3c341e5b564aaf73156
+AdditionalInputA.5 = ede7927dd374cf979d00724029169ecd9420a0e4a4f1233a46697089f7eab409
+AdditionalInputB.5 = 0506894144058825274ec92290714b33528209beea3010e22ae9119381b8fe58
+Output.5 = a2cc30e9bd520d3ffc806398f81fff95b653777ab03affdc2ceb9a30570565995b421a9faaf7a5bf83bf812913f68b95adbb4c46318b2a9f457cd3278d4a532b
+Entropy.6 = b28cb5e20fb770bd1cd57433bd0b19eb05e319f77e2b466d835af8955222256b
+AdditionalInputA.6 = ffb0f84a08a5a84433c7ac5704addbce0c2968b6f83df29549f431ca3df3a32c
+AdditionalInputB.6 = 897a570f514a03fb60cd8af583065771c2fe93a6ad5153e7727c791a95239dc7
+Output.6 = 9ae70e0f02bfe75ce820eb8fd1ce18b40e1f3719773c9735edb2938708cfba2a801abc72c445ab0c436df53182dd90b46c1e357787f15ce100e43c3cf7f9d5b5
+Entropy.7 = f999e225a513b3a97d72b8263385d5dc8bc98f088ece74d2274bc2f4e343ae62
+AdditionalInputA.7 = fce85294caaf4ccd08c27fe0534dc882a3cc0faa123e7f5e92432e0cb12f48c6
+AdditionalInputB.7 = f7b393d3eac0d2daa35335a3ad89d666cd94b85c45778febd75f32cbc577de9d
+Output.7 = e9f7bba79e223501509912575dba64f0830cd321cbb6f75ed2d319605d744cdaad7eb7409d4000e767976d2f0b1e6653f94b0533e4e6e796dc6a225867442314
+Entropy.8 = 01b09cbb44ab39f7dbfd3e8b4d173b5b5433325a3419364f451b7ffb6eb351db
+AdditionalInputA.8 = de95e4484c98324f3c7771f9525c11ee268e7395d4dd8046ac23ae5db8e361cf
+AdditionalInputB.8 = 7d376e9d319a275351fb273274b6fad9e1420ee6b10ee1ae330698a1d15cd7fd
+Output.8 = 4315ec46ef983676ee61b61d3623c3b6731389b12c7d27c87d07cca22bd91d53ef80705aca3740af2d5dd8452ec0d06879f1bcef0132d77d3c311e1b34a0dc5f
+Entropy.9 = 6cfaca3c03b0d98f69dfc9f2859f0db128d05534a0e27fe7433f6afc2ddedb75
+AdditionalInputA.9 = 203b29aa54fee3ae86685c5cdf0347773301db03043a910ed063bbd249271887
+AdditionalInputB.9 = 57ded4f3ae768b100c36035ec5ecbc093e141e5bfb8746d344554ca64bcce016
+Output.9 = 03990f68ca84dc13b92e76647fa24dba47f36da6f1dfa9c4124de86762703cb33df730cee68a6acf8a4a4253a575d8709111ca6bae80507c248ebe4ff52cb959
+Entropy.10 = b0967a4aea350f67e7081537a2519f4f608f317edd14a24a75ba4369d224786d
+AdditionalInputA.10 = 8b48effd791238b8329b9db8517674f59c60b2bb9ab06ea1c5d54ee471caaf89
+AdditionalInputB.10 = c55bbdc2aaea7dbd840a7296e22295ae2b95b0ca6192237c125da1707fe8cd0f
+Output.10 = 28f4fb5d85e5b8b151ceaaf33b2acb02b0b25d9cf2760567fb54b0b0f560bc8926663cec6c84e3560c462e802584ba3ad58cace1da964899c52592a9ac61979c
+Entropy.11 = b37cd1d227f3c817d23982630b19aa8a81c0415f602d271112d4e31689c8e979
+AdditionalInputA.11 = 1f25517ab677bd8c4bf204c4f3fde59b6f337388385f28ca8dac2bce27e1df67
+AdditionalInputB.11 = 0acacc50533c77bfe09de685b516d1d9f2b03874975131ac85918bcebebbd543
+Output.11 = 9031b77db5be9b79150d623474c21bf5197ba4144d737d261f77eb6ef07b74c2d4b4ed6177480423421f1925d61e97741155cbd5d3bfcf5e1f1d30f3fcfd7be9
+Entropy.12 = f334c970a213759a03cef16d3b3a440143242af57dade4332588351e24152e60
+AdditionalInputA.12 = ff3567674fe5c8dc44d4f9196246402b9bf3e71cd00bdd1f0db0242347ea2a1c
+AdditionalInputB.12 = 7d4c242438617e5d2690a8776f3fd9cf27d32a9c5744a9f2bd5cf116f66664a0
+Output.12 = d1b631f7ff945cc7e2954f6895b439e99ca1fff75ee19c14f27f4446f627c1e45bc56350b432f718ce83f09ca493959ecdbca3dc24b3ef96e01fc4da229d22df
+Entropy.13 = 727cfb51100a98cc7082b181dba3fdad2dd197bc0065d970476679a40ac19766
+AdditionalInputA.13 = 03920223900cb0abaa95fdb8eb369ff66399cf657e71f2fc9e4b8d4682781af5
+AdditionalInputB.13 = 198246d1fa95ff480be0b84f2a107baadfaf7333980ab628c78232ccd899dc4b
+Output.13 = 8625a80cbefdf7b822e82a1e71104d449d8cef6a400fa769701d1cf60f5f1a147d9465f7f3cdc7d2f0606fe459e431fcc36df41a51e87650f585cb626ac3e220
+Entropy.14 = 02fbc1081c13134d2d68ea586ecf4a598caf7bf42ec0a3cd30018e01c264c84b
+AdditionalInputA.14 = 170a92d093d30f939b3eac628a18bab5faf86b3a5d91f30cfd0beafdec41191c
+AdditionalInputB.14 = fd0349af015037cdbb52983155c89fc59f37d512543559c3ee6589f7b93861f6
+Output.14 = 0273a1317f3dd36877a505ca2e440445094d3c702c4ff5f4a07daa3f810d8d7a4f4b9c54dce169a1307fbdc5d197e6a3edc3ea737bedc1c9857aa0e9f87943e2
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = cee23de86a69c7ef57f6e1e12bd16e35e51624226fa19597bf93ec476a44b0f2
+PersonalisationString.0 = a2ef16f226ea324f23abd59d5e3c660561c25e73638fe21c87566e86a9e04c3e
+Output.0 = 2a76d71b329f449c98dc08fff1d205a2fbd9e4ade120c7611c225c984eac8531288dd3049f3dc3bb3671501ab8fbf9ad49c86cce307653bd8caf29cb0cf07764
+Entropy.1 = b09eb4a82a39066ec945bb7c6aef6a0682a62c3e674bd900297d4271a5f25b49
+PersonalisationString.1 = a3b768adcfe76d61c972d900da8dffeeb2a42e740247aa719ed1c924d2d10bd4
+Output.1 = 5a1c26803f3ffd4daf32042fdcc32c3812bb5ef13bc208cef82ea047d2890a6f5dcecf32bcc32a2585775ac5e1ffaa8de00664c54fe00a7674b985619e953c3a
+Entropy.2 = 0bbc898f8daf3f12fc009c846fe2cea22f683a432eea297257312d5a44bac131
+PersonalisationString.2 = 8d34be9d8110b84b02a60508deae773c1a808f4e2a0ec81747ae2ec923fe99a9
+Output.2 = da49e24a6cb1d9e51b98ea6103627d9ad035770b7bdc760606e2b5f35afd13b7a61a4a18fac25258985fa1fb2b88a7cc17278b0539d7cf74f940f008ee2cf4cd
+Entropy.3 = 3ea1f3fb153636c33982464f0e5b0daeba59c3f1ee91a612c4f6a9dcfcd0a978
+PersonalisationString.3 = ea8671fc9c02584d69af91de2adacec1408d91d512718945ed1e7dc0b620b323
+Output.3 = 2429e7d817cfd4f8500948d2ec2dec02b7d035b4bb986144bb918a31bfd2269e6907c34ac8beab69508869a4f04bc3c23ccfbae5d59eab857ece000d554b273a
+Entropy.4 = b6b2033e382decd21e4eabd8f1177761d06a12bae1cfed0059b7e16bd9bab8d7
+PersonalisationString.4 = c99a49132543fce49b804e9f417d22e49c460bc4e60a6d36701fea561b93203d
+Output.4 = 63626608b446c7d02212209d0a3888e40534864d8f5cd28aaff09505ee5e894751e5cb8467a5d85d87a675b7852724deb0d12038035400c3405fafb1a47f88c8
+Entropy.5 = acc465d1bf94ccdeec06c74c812db3a993c408b5c2ef7ebe9bdeb6a1a51976a7
+PersonalisationString.5 = 77278d47a169c559518d46ffb23aa594efdaebb067c48d4a392f60b94cc15b36
+Output.5 = e0e6e417de8fc5d212bdda4c026a13d6eae402874d62c30577ee4c3445ace85479cbc3b55bbbe1573c13f9b0242d7e3f6e7e91d932b3d5a6dca8df43c188ae5e
+Entropy.6 = 14b33415d2321fbb10a768ced712c8999ff2f19b63264a81adc2fdc16370b185
+PersonalisationString.6 = 029b48805285349c292a99ee68fcefda1f61dd60a09f4616cb2efe4f8b140056
+Output.6 = 8a69feb26be025a3849bb0b60959717daa59c889c383593d1f8debf58051eb463d07c659cfbe47e94224ba18833b71d95905e0cde785364a87706e31297fb323
+Entropy.7 = 5a83af23cafb30e3a18e28651b3c1bd01813c44216e7e44b790d6664e2c3839a
+PersonalisationString.7 = d0f108ae7c65e16cfa13e5582204eb8cd6ebb08f1f6a5d476c275247c1a83eb5
+Output.7 = e64397f0eea0d33d9715bcef2ee7eec22a86e8d066a25e44706dc688c499bd7ef08172c8cf36e3bddf79f2bec136a01aad844930e48a16fe1800d69fb0f4e163
+Entropy.8 = 1dc24dd9d6a405a007bd082cfbdbd863185e072b67d663b14d7e8f16900cfce6
+PersonalisationString.8 = 0eca85ddcb6f38ff3683968ef98b52408428dcae2ec3b0fa4c68906c1b6481cd
+Output.8 = 156938566fc25d493c1c60d8925819a6e59a2479d75f3efff16d46aada68403140407955c1fd9d2a890bcf67ac9b3b82d1d6cf788fd863da3d41ac6e34f217a0
+Entropy.9 = ecb7e61a4792a2115213d141d20710e8a3212d7847dd53dfa5d4d7777d10d97e
+PersonalisationString.9 = bf09235d30cd69ada285948fe1be2e0c4e145ac8485d12ca7b8239136da1c638
+Output.9 = 868db5832b2e9c3d2c9794b174b328ed2cc86e41017863eabc4a7c096a487bfe4d67ccf93a5e2c67d88dbd8f1419b2a9f1293e7a70e8e8fe93e2156496b0fa54
+Entropy.10 = e55727c590ec3ac108f4e5fec39a2d34bf89aee4e215dcc970db8ae8f6a0e4a8
+PersonalisationString.10 = ade3d28a8e43aab8fd31dec8bdbe5c41c0b3f7f69a2d0aada5608ab0e57c8bb0
+Output.10 = 198742299feecf6083e3a0bef75ac2b93de2defa6525883a55f88247dc6902279f792402faffe4a81213e40facb873cd499e4b0f7f0ff592bc06699db773b899
+Entropy.11 = c380dafd84f2782b7539ca1c3ad9715fe6b1805310a578afcffc9210ac127ded
+PersonalisationString.11 = b298533d9c74a0d9b9aa0d82edc434002b4d1372318c2865b7700a5b7ebeabf0
+Output.11 = 9aec7a5ba3e091e6a6c99e04395af2ab2eeaa1ef089baa51dc23ea31603b899ea298317603354f38fd9c36c2a53a05c1e468c6ae32fe4c3b0056ec0d5eff22b6
+Entropy.12 = f158210535a404f6cb4f9550b3f26e3f777a9faa164774749f48ef4a8ce09449
+PersonalisationString.12 = d56fa873cc762f64b3ab31b6291e247efca71fca90453cfff1f2b0b3e265c475
+Output.12 = 034b41b2a9a6764e5ed1edb00aea3185fe43eb81b4253e7cade97956fccd9fc5782328fada8ed5208f1d46b1f872e333b9e2f036a51746ccaf39e1a85af8eb23
+Entropy.13 = 973a99b7e03b393ef689af8cb90d7436cae10e4814814aed342dd38e2a7346e3
+PersonalisationString.13 = 300d3d2adbac6d7ddadde07e08b0d72b5b39ff36031e81d8303958242e3cf03f
+Output.13 = 62012842991fe3220f1d961045f028a3b6a729f5a451b8c2ec90e1c1e2b1e4042e97267e1bfa1782a10c3c29509bc8f2adffd3d695861e1594da91702830faf7
+Entropy.14 = 22d1d8c8bde76a239d032804717face16d77b51170d0f53ccbcca4eaff4fb315
+PersonalisationString.14 = 5d3a7d40fdf95b98454bca03c6fcbf6abf3807de75171b55bab2db5a3f5f12f2
+Output.14 = 1007e11f48e3c4813fddd67310db56d67a49fe93e45e61b37ba81485df6a62ee57ca41fa1d987f467c2939790a20421c2b4f70b28fb0b90bbeab1ac0ae884f1a
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 50b96542a1f2b8b05074051fe8fb0e45adbbd5560e3594e12d485fe1bfcb741f
+PersonalisationString.0 = 820c3030f97b3ead81a93b88b871937278fd3d711d2085d9280cba394673b17e
+AdditionalInputA.0 = 1f1632058806d6d8e231288f3b15a3c324e90ccef4891bd595f09c3e80e27469
+AdditionalInputB.0 = 5cadc8bfd86d2a5d44f921f64c7d153001b9bdd7caa6618639b948ebfad5cb8a
+Output.0 = 02b76a66f103e98d450e25e09c35337747d987471d2b3d81e03be24c7e985417a32acd72bc0a6eddd9871410dacb921c659249b4e2b368c4ac8580fb5db559bc
+Entropy.1 = ff5f4b754e8b364f6df0c5effba5f1c036de49c4b38cd8d230ee1f14d7234ef5
+PersonalisationString.1 = 994eb339f64034005d2e18352899e77df446e285c3430631d557498aac4f4280
+AdditionalInputA.1 = e1824832d5fc2a6dea544cac2ab73306d6566bde98cc8f9425d064b860a9b218
+AdditionalInputB.1 = c08b42433a78fd393a34ffc24724d479af08c36882799c134165d98b2866dc0a
+Output.1 = 1efa34aed07dd57bde9741b8d1907d28e8c1ac71601df37ef4295e6ffb67f6a1c4c13e5def65d505e2408aeb82948999ca1f9c9113b99a6b59ff7f0cc3dc6e92
+Entropy.2 = 8285988e7865d0a0fe1eebf7ec002b0b49d01b8f8805866b27c7f27fc2b14629
+PersonalisationString.2 = 116177a64ba27097cca8e442077b11961039ef37aac9593b430b9aa2c73ffb27
+AdditionalInputA.2 = 3cf5975247cc5c28f210a1489aa492768e57ac2a97f399beed368173ea356c13
+AdditionalInputB.2 = 1a78055cd3f29074507a232f0d03e09c0b569dba24da1b9671242d940d8f4643
+Output.2 = 903d498f588565b25ba97740c34a3c573e643465c7d128d9c1f8763c7796056485c657e732b1a060325993116cdedde71b1a8468ce56540fbed0e7186720cf76
+Entropy.3 = c4d1d1fd1e198fcb07b91d509e2d16f7bb6528bca575f46432158e3217af7592
+PersonalisationString.3 = f68511ddea2888216d4551990caeaf020ae8371b7348205bf62866ae3899cab5
+AdditionalInputA.3 = 4a3eddf9a935a1ac417edfd7538dccbde1c1999d8a8e4e1f267db7165a98190b
+AdditionalInputB.3 = 55de6900c65d57b35ba19945be5453e7374f9468066185072902c3d085663ed5
+Output.3 = df69b3ddd242da1c062f131096eba5af633e4ae9ff2eab57c70b9610184962800bad8c4b908314539a305043a41d6e9e4f119c48020cf727c90990143627b09d
+Entropy.4 = c6c6cbe964c9ceb94572623b12cc9add6c7cef7292498a221847754c3def00c1
+PersonalisationString.4 = 99d3b0fd7be54db4ba4572f963621a88f29e97e894a24cd5a13fe7b35132aaf5
+AdditionalInputA.4 = 3171a5925507acf8264b1f373ff2df36a18fb096b83ec79ed48e0351a2d7c748
+AdditionalInputB.4 = cbb629b1b0a04c71d2173b245c23b97679d775ce051507e361f8527fc620d78b
+Output.4 = 28b983f63dc56314e539cdfdb66da6b06db6348f0d28475d12421d9104ba74ec0fcb851ccadd82c4af5778efbc82e1863a0cb5ba4b9a9427379c06e9732787e6
+Entropy.5 = 676426a82f58289ecdf76803ab0bd75f18e44c4d0e264e4a59292a9b6dd45e6e
+PersonalisationString.5 = c6dfccc3d23c5c4cfd1fb998f4a3cfb16cfcb05ab30eee37c1d3ef62dc66bcee
+AdditionalInputA.5 = c549ac104d3ddfb36ed9da29297f30235f9a14c51f2412b73a164d2b3d37b02b
+AdditionalInputB.5 = 6d54f94e3a2f263a051720668c9ceb2ee9b4636fe54c105123f15badfc8ede33
+Output.5 = d493c5daa93618b44526b6a091b37a4c62c422cc0569b88afbf596d568f3bfc51362abf12eb9b623e7065906e88e52ff671dbeb37426bf0c2d758efeab5c663f
+Entropy.6 = 179c71221de3eb244501e074e004d61f466fabfc8e7c7bd575fa25617d32d3e3
+PersonalisationString.6 = bb4c9f74c3e818fffefd552646f5e659e4ee4a8be788f13d3eddd36192790650
+AdditionalInputA.6 = 4f6029cedf4e2ae07dd99e7adb756960b067ba96c44f72371a1c5fb31eab808a
+AdditionalInputB.6 = e17b61060bd3ba3551f629de6bf3710cc6aae871ede70de509922acfa658318c
+Output.6 = 552f7f55e5e58bf6ff726927a1d93da55ec386cc38ca65b15139ad2259c02216eacd487782c37785264385e0331c7f882a1884f440a67faccc37018b6200ab08
+Entropy.7 = 319c01d6f08f0809c17958fa4169a76ea1d05c8368168824fcffcc0c4ca6dbeb
+PersonalisationString.7 = dbd671de6a7c61ebf58bfd323b1c738cdb1835b8bceb37378f62333cb8e1609d
+AdditionalInputA.7 = 9739df64b9ca61be3640ddc88b2bb195e322ab6d435ec39735ec8834382f437b
+AdditionalInputB.7 = 5d4ac8ddbf73154fea788da94f9f917fa42167eb0e97d6297687f08aadf17c4d
+Output.7 = b7d52b16f4bdf8cb765c58091b99b0ef65d137d6c10ce801e735eb2b43adf6cc014b1a4236390be264f7c8b999f821bd660b0a6262b11c7fb58c0ab6f12053ff
+Entropy.8 = 77c5169bcdcb996a6300fa36a30a02838fe03b990c74cbff6f0517f33193ba54
+PersonalisationString.8 = 6b1c51a349aec6e53ab58f0a7d9302fdded3e6509cee362014d9777e4c5799de
+AdditionalInputA.8 = 2700c046353116633ef114668e7d3bf12232d8837845f15fac022a323926fc18
+AdditionalInputB.8 = 5448474d53016b27ab76c3ae0a712faa072a3c68de51b4dd21f9b1424f51800f
+Output.8 = 985f77304878274fa502345365913b23642c7b0036c4e825969c3ca2324067ae40350844158abbab111161a7a36168b997c197261a60ef5b64499eddd64a5096
+Entropy.9 = eea7972a9252e09eeaca82cf28edc6f6b0203fbc47a7d13a03da7f8ca21ec613
+PersonalisationString.9 = d662890e01a73027fd80fd54d4e4dc2f03c350b77f13250da35a4ecc2f7779f4
+AdditionalInputA.9 = 6ec742b26f588b4f72967cda67aa1d0973a742880da8b1e14e9aa5f24a41c366
+AdditionalInputB.9 = 06d593dbe878ed6c3bed8dcbefa4036fcfd06f484c006c03ef6dcb15b68417f5
+Output.9 = 27ed08e78b6ec1a7ffa24065090f5699cd83b5646966195800ee47cda4827ed0e21f1bd82a41cb06498b4908c53882b0f93cf91804ba2adb01848611c7a8870b
+Entropy.10 = da520c33e8a026d64484bb6f78613a7eeca013a9b6a24c2f5ea9993d9f266e3e
+PersonalisationString.10 = f412dc9f3dbd1f9c24e40bcd09514e02d66b3388c1ec3c80f60921fb576873c6
+AdditionalInputA.10 = a17d88a84f13d1e90a6e341d7f3d7fbc3f273c4180ffb52c7b637c30855d19e3
+AdditionalInputB.10 = 115076306e8fce2c1890c8074d1fa601a057cbccd63c62a9c118878f1fbcf5cd
+Output.10 = bbff4d39ba04061a1b6e2f26dd0c132ea4381afaf84dc24e52e196c4d7da51c58be5f7ddd989340f1e0d8cf62c6302e0ecddbade87ef50046d3a0dd893681c8c
+Entropy.11 = e49509a90783992f48121d5d7d6cbfc28d77bcd1e6d6e6eb0aeca2555d9e4b89
+PersonalisationString.11 = 13e9a3f9bfcb09c332b6d3a1615cd9cea57b61545a9351227995ae64c2333250
+AdditionalInputA.11 = e69bac85228afc41d86d584641cbaf8628186b205b211fd428e39849237a3939
+AdditionalInputB.11 = 51ee8d0c0242f1382f1e2d38cc9dbbd506a80105b4b748f563ac941c414e9c44
+Output.11 = 8953bcae343b430d8d491840a440adc6eaaa20d4b9773bcabcf1c8a9ca3af39de45862c6963f48ffa051a141de70c33fed420711268607c9d20573c9b528db20
+Entropy.12 = e9e120c956924abcb6554e4fb4404adf2bf4ba069b92ccb78b92fef8f78e056a
+PersonalisationString.12 = 20f01326b87ff6a14b91c5927bed1d9aea8581b9a539a84fb7f2e54ba785d8bc
+AdditionalInputA.12 = 260495ccd9eaff4c2d87d542d49d48fe753cba70108d938765f77dadb576b711
+AdditionalInputB.12 = 47f0a21f12ac66dd138a003fa0f762da06e81dacee14a99cf52bb5b9ab35304a
+Output.12 = ea6474cb86de133182d846b09377512a588cb2401c1d20a542e9004ac4c2d5e62fcdf357e74f127447608ec6b4ba2f5b7ef4d2509dc517485c162ab7f9c96713
+Entropy.13 = ee99d4f705bebbc8ffad982b0ad4d7420e8fd1276b9ce3629915f29252459d31
+PersonalisationString.13 = 91e73930dfe4474f9c0384ddb3e9ae457c159979d2530da502550b4c56b7b919
+AdditionalInputA.13 = 957b9d938d90676265c90e939f8bfaee7eb804f39c819b9c52bcc20526cadc8c
+AdditionalInputB.13 = 5114a0dea822e44dc870ee63a5e6bb16a16c9d2c51718614dfe5882171a1ec54
+Output.13 = 733466520bb8908e3e21899e20f7927648de006ea9398f33bc5015688b43d586e2d9f8294ca7811fd49156d0dbee6765bbf4a1b5977741012d73e1e0f468206f
+Entropy.14 = f4cbf92e6348542bc108e7a664161831f9926dedfa8d4fa7de948c3a5de04574
+PersonalisationString.14 = 24709bd47013c1d5f3e32c60e789dd073c70441e43499bae318bbb417187a5bd
+AdditionalInputA.14 = 1eed7463c004c94b600245f4967af955919d0f325a2baf2e9c5f6e1504bb6af1
+AdditionalInputB.14 = 6eace0fdabf1bc84d08eaa4afcbebd502f1d83847d2e86a1e68147b3b15a76cf
+Output.14 = da59c09259ecc1d61e05d3198f349904df1468ffaf85f5d6cc57489e2785e54e710413674bd2ac41896ce9010d9588446e7540b35519c4689a5818ace7dbe0a8
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 69a09f6bf5dda15cd4af29e14cf5e0cddd7d07ac39bba587f8bc331104f9c448
+Output.0 = f78a4919a6ec899f7b6c69381febbbe083315f3d289e70346db0e4ec4360473ae0b3d916e9b6b964309f753ed66ae59de48da316cc1944bc8dfd0e2575d0ff6d
+Entropy.1 = 80bfbd340d79888f34f043ed6807a9f28b72b6644d9d9e9d777109482b80788a
+Output.1 = 80db048d2f130d864b19bfc547c92503e580cb1a8e1f74f3d97fdda6501fb1aa81fcedac0dd18b6ccfdc183ca28a44fc9f3a08834ba8751a2f4495367c54a185
+Entropy.2 = a559ac9872791d79197e54da70a8d858fbe39e8514d2c86a7bcffadc68782edf
+Output.2 = d14b72e17c2f6f77b46d0717b788420e503bb18de542135f586a90c5c73fceeee50fd1633b5b09ab061b9367ca785ecb400e1f3681583661aaf8352184454ae6
+Entropy.3 = 300fe148dd39de1edb993ca5260373b3f5f09a5cf7a32b0c41fe6224f981d3b1
+Output.3 = deea89b5128fb992696d7b97ebc2c0793614b172f4c75bb83c12a1b389bac3bfecb773cd7717583c2b61b3b243ac9683dba4fbc07182bad8271a7f16d833e4d9
+Entropy.4 = 0c6ee2a5d46325baa8e9a3f6b598fc790c513d387d47001116d19a614d2038c4
+Output.4 = f1ee11be189263fed9932c1192219d00378e36ce81a431318545da9f81f50c2913d1f7be499ce9e1e39f93ee2360668f127340691c17711707cf5f1f8a4d93ee
+Entropy.5 = bdbba1ad4803fdc783ef5d6e2aa66dc948e960bc11cca89a60cff5c60e984302
+Output.5 = 260a32c3973750e0c10f7f7495d46e7c3691c27a58e828cdef48ef660716f771d61c3c76db407d816066f5afbf16993485cdb653d418dd65ffa5d3825732b8cb
+Entropy.6 = 22587bfdce62f4afc1dd2673f5308364f27db9912ad01b045e74db4518435959
+Output.6 = c904d03089b7dd1f17564a7ef70b17bb1b29c0c1793cc8d92b8c158c04ca5366919f8caf544d5d07c28abe6d14baaa0c56602df1c373e9acc419e3c932e577e6
+Entropy.7 = 8abefbb23dfd58d82b88a4c4fcfcee183ce01db975edeeb404bd216e6177ea0d
+Output.7 = 8a708e8a99035389a4d66d57d12f488ecba57a3b2ca78015bedae06aaa414d791196e262b28fbd745dff94f8fe600687c9ce2f50cf6d79d39b8c5ea36533755d
+Entropy.8 = c45c9fec6bb83fb08008877c70b632d792119a35c4c5988c4026cf3f8612b800
+Output.8 = 84430e49a9b4d395d055ca0efdf285a7551c5f7119dbea5c10daaa9e8be041e23e9bc893c90a35b77b19dc202ec834172e6c8cea97c9d7c68df1374aeea94537
+Entropy.9 = 58cbccd7f86e5f0472dcb377f598f2d42ed96afdf0c8e45f12c4ff4a969c5b6b
+Output.9 = 41ff55d058beaa04308bd0b39d4801f70f23d829037e4cc9b2ea0eacf5aef9b8e33fc59c528b53bce08d2b536d37bf194c797f03290494dd00ef244ac223e350
+Entropy.10 = d50558dfb7a8966c63b3a1d0a837970ad0bff5adbd8adacae5d3accfde64cd4d
+Output.10 = e91361511d926be4d997fc970b1a5dcdb33a711f215cbdbffabfcdaa6248596891d55a9e64f4e9f5185ed7056f7cbb42f474a23542fe9e9c2495182cefb38a6a
+Entropy.11 = f70ce283efd5ba36c284cb267d22e23dc41671b2aaae98e638c6e451bc9c3cbb
+Output.11 = fd9b3b53e12b6702e4c6e4acac33aeae5ceb34cebfffa7007cb1ab1c3b4be1a38e5c86dea0775ab0c89ae135e0b36da087921d3ff275ffc8e5dcee6e3d66ee43
+Entropy.12 = 58eb544f44dfe1048a8113d4b6909050abf9010036233be7f8fcc41f39baff9c
+Output.12 = 5c6aedc020e764f4d3bb8abc2907c9c604dd98e1cfc2882ea72d554e39fe86463a51886d980ac8cdda0f4e584226d45344e43dd84e8430f58c3880a0ce930863
+Entropy.13 = b694ce5f4d9af4ce93626636c9ecb341f3f5152fd580745202cd0c83f4d5b4c5
+Output.13 = 78b32d396f5a919f5ccb9be2afaf5f6212d75bf084e99357e28ccc98d433696455b10a85ecaf61686a96606ff3e8962321358a56fa53cabbf16c65c1c32debcd
+Entropy.14 = 42cb183d2a04c89c69efbcec08bee2003b9a1cd56878a774f0162bf70f2c708f
+Output.14 = cb4afdec033b42949ebbb27245fd33c1503c1278027e11a1f050e04080abe4850821b71ed5a6bd83da6bde8e56c5faed49da26887028bab807d1ad055e2a8a27
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 7f40804693552e317523fda6935a5bc814353b1fbb7d334964ac4d1d12ddccce
+AdditionalInputA.0 = 95c04259f64fcd1fe00c183aa3fb76b8a73b4d1243b800d770e38515bc41143c
+AdditionalInputB.0 = 5523102dbd7fe1228436b91a765b165ae6405eb0236e237afad4759cf0888941
+Output.0 = 1abf6bccb4c2d64e5187b1e2e34e493eca204ee4eef0d964267e38228f5f20efba376430a266f3832916d0a45b2703f46401dfd145e447a0a1667ebd8b6ee748
+Entropy.1 = 350df677409a1dc297d01d3716a2abdfa6272cd030ab75f76839648582b47113
+AdditionalInputA.1 = ba5709a12ae6634a5436b7ea06838b48f7b847a237f6654a0e27c776ebee9511
+AdditionalInputB.1 = f1b2c717c5e3a934127e10471d67accc65f4a45010ca53b35f54c88833dbd8e7
+Output.1 = 1ef1ea279812e8abe54f7ffd12d04c80ae40741f4ccfe232a5fba3a78dfd3e2ed419b88ee9188df724160cbb3aea0f276e84a3c0ff01e3b89fe30ebcfa64cb86
+Entropy.2 = d62aa585b344adaffb31010bcef40a1d6ec629c4f4c5a24c37877f19cc05b3b4
+AdditionalInputA.2 = 7f980b7b8c725c92c2c3dc735bc216cb4662b0b8905289a8f3f2e39996a103db
+AdditionalInputB.2 = e1d3a141bcdaec1b115c9a7bf76dedc78df683e7427f04d10edda18fd93d68e3
+Output.2 = 60cafcd52863c6eb2dee9648133a420646aedac5e2697e503180dfde1ca2d1a2fcb19b059c3b6bf8e4b276777828b1384d86e87dfc9d69ed3e27610c2b5ec842
+Entropy.3 = 9c65305b5bf823440568227e458d7fc107efd66fc63e27acce90020b6c0be256
+AdditionalInputA.3 = 64ffc17e8c9dd244e863405265f48e0bb2518f7e5dc01a99ec8381998f78190f
+AdditionalInputB.3 = cd62c9f0e4db011f606875799e3ffe129beb1fd68015f5972f1b98469684efec
+Output.3 = c4e9acc0b658a04fb3eadbf98440473a3aaf4b05f7cd39e460b7f4648cbd452a9f2191320c6932892a08f58a685b7d525b087566add4534e0c13079422552204
+Entropy.4 = a5c78132f431c16eed01f56b600d628eebbdd9f1e273c73d8d9c8e517238791a
+AdditionalInputA.4 = 47c2e6a91a44c63e86817ccbc83eb2205345cc471aac3eb804b3c1297574d818
+AdditionalInputB.4 = 33b28b7afa3db3c965471ee99be595a56b855b4a43136f4ddd6d17576d7a5f29
+Output.4 = a19ea99b55085f383d7d35af5854be115ef506e07af4988205bf9de878a452831a3db33b9b5c965939a722599d976aed326b2be6d214df4911d38eaab8b06c0d
+Entropy.5 = 7b2fbc29b31c2ae4b04e3afa8016d39a364c515555c749bee4d9cfba78625329
+AdditionalInputA.5 = 500c5a69bdac319fa7bf3d14c02aeffd7ead71895e08d608baf03977e596c1eb
+AdditionalInputB.5 = f0be7f9d86bc916aa4950041b00a2d228568f5080df81a8ad8893afc76a1fd7a
+Output.5 = 925911ee208d75b368c19b843d176b24f2a0ea8b070bedeb70753cf62aaf70480d652c16955e961ac840648ea6cba21c4de0b30165f2d03c85bb9e31a9ea036f
+Entropy.6 = 32a812abbfddd355e2f743954f28f41425f176c3c6387f0ccd9b99250397cf3e
+AdditionalInputA.6 = 60cd7af1e2aedd65bd1f1df08f76abaf7c09e58e321728126ac65bb1143ed19e
+AdditionalInputB.6 = 6c4bb5483270655c50e0e0584cb9b1d4fa854fd22a8d72130505df3738083e35
+Output.6 = 39056f33da2f31a963d97fb8d8c74f89c405574b4dc4196cfc22ba6fa962e6c7ccbb96755e1582d41ee910451daa5b3a33579e428e3c457c9a8be609c3fb710e
+Entropy.7 = b6d801b3fea28afa07d090731087a5e53f83cf9d980d99b8ec5f05231c7a7fdd
+AdditionalInputA.7 = 2ed2a9db70a8e0e14429df3631429511c3c0b910adb08136ba39c6bdd0aa5c99
+AdditionalInputB.7 = d4752a120792d404703c33a4d03c745871c0f120e29bf616e15605a4932aad2e
+Output.7 = 836575898cce379341b689d51c597dc7c2d93e2b73b6fffbe0d85e0c9178a29be4b5c95df1c12388dd9aa9714a7331ef0d70d204e9ca73679a8059959ce09828
+Entropy.8 = 02737494affeb7dc7fc241703b7c62e82f748e3fe9ad5abe446d014ef35db34b
+AdditionalInputA.8 = e66b9aec28b20781d673e72c476aad99e8a6e34624be7d1d5aab7dd3e43b9016
+AdditionalInputB.8 = 9a910295c1501bfdd075e8e662b913bc229e87d6f3fdf6d24f1bfb6c55987c0f
+Output.8 = 527b31c1595575aa9a01775b484db0a5b45d7c2e25c6f4f0f31e12a371f8850b7e1bddc7d970e35d8573aad4d268d85c05acd326cc53be465bec8ddd94e658aa
+Entropy.9 = 8c5318cb8e6e50b77ef0891285506fff94d786a711195dc095245784ad1a4d09
+AdditionalInputA.9 = 07b7aa1ebc3ce53e93f4ce0763438ee69053e32b5e9ba37bfbbc34410549c8e6
+AdditionalInputB.9 = 5a6b6de78efa9c73accd4f96f9e1a2ff9a1bba02f127e5e5bc2572f846ceb22f
+Output.9 = af02594e48238593594e6007f7494e64ece22b5b662be44d9123ed42589fddeace3773d9279c0e1cc8ec41958589586999a74de2364e478a919338001b37c8df
+Entropy.10 = f6014c31ae3581eead6f83368e33b3f33d01e2f02eb7fcc28d4477fc60fa9693
+AdditionalInputA.10 = 6bfacfe8ea4cd9e06b4affa418f67d5dd9de843f4d64ae89505762f424545473
+AdditionalInputB.10 = b6bca689a12e0524c7565be1ffd8152eaa8d085b59c9e04abcf3d987babe7b52
+Output.10 = 8e8722800e6d83ffad46d8e7210f9a4900a418b968138fab149e172dbfcec951a2f0428aa8a221ebb3cc4951820d15e269918be93067baf1ce51971618998942
+Entropy.11 = 5444733751a8101610d7ed862bcc4e64c4f8ddd2608d9b4bd6c57c60f88edeea
+AdditionalInputA.11 = 66261a576535118d1a8f79d88b43385888b24a4724cd309dece666fbe2282761
+AdditionalInputB.11 = 69ffeb4817ff3192f802858373de1baa4539b0e0660b41243d77c5a250be34ff
+Output.11 = f0fc3d678976e929001f87047594ff5ecfb79ff0cb1dbead84950c4e7dcf3dd6d7fae0226411c9f6c0ff8ff8a9cba6e3787b6796dea5d83cb54a08b32e15b772
+Entropy.12 = 1d4ef9f3c1952597d3d69a4c2d1a05c8bfb14454900d9518cc7fdf7c14bf6f68
+AdditionalInputA.12 = 6e242aa9d9f54ffada21f4c9f59e48c4db5b464f0beb8881815ea20aaab0f325
+AdditionalInputB.12 = c7e4010f08c78a61995173c64cf2104be0395f56608698bf8b0dd1b48952ff10
+Output.12 = bb9d119e29dd8bff190421cf33c6bd92c8814ffe18adf4318ae8ed48e5f0fe1253ab79e912c3bf72a37352fcc0ac2c4ceea1f92bb5d15c2966b9542f4ed3cc42
+Entropy.13 = 2ebe173977ff27c8cfba5fd6406596bd6ffd390ce3c58a51ddc8f40d66f74ded
+AdditionalInputA.13 = db2b2c322128d47f9d4e5e9c2f008715440f917665ba8b0b5d0f169bf5d7e183
+AdditionalInputB.13 = 13deb18c702509559f3bde24cbfff1e7ec16b5009345a99fd86e0ee41c272cd6
+Output.13 = 42f02874cfd5eb5987d6469372bcdc17fc0062522a9f3b8713715b8ea2e63a3a6f736d957b1e7aecc77f39044e81e4611261a1ebb46ebfeeb52c405873fb0dd6
+Entropy.14 = b1a2fd7084b0150fe0a9155ca8e46224565118e702ec642153049193973e3a98
+AdditionalInputA.14 = eb2888119b0020cff3ac53cbb81d8576457a863fb087f91c795c297f68d32604
+AdditionalInputB.14 = ad80f4ecff758da0a5beed20a9d851fcca2ad4ea0d54af619470e3cf3033a04a
+Output.14 = e2105e60f2f2fceb27c882caebb0c1eca543c359947c4319c503efa82ed5cb63640f627c82217260f0203220435c842d7993623a2b05e26e1ed1d03f68ab3cb1
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 3fef762f0aa0677f61c65d749eeb10b013ff68ccc6314f150cfee752dcd8f987
+PersonalisationString.0 = f56db099240c7590dac396372b8737404d418b2864a3df96a8a397967245735f
+Output.0 = af0afe0837442136fbb1959a1c91a9291c1d8188ede07c67d0e4dd6541303415e7a67999c302ba0df555324c26077514592a9b6db6be2f153fad2250161164e4
+Entropy.1 = 3eebe77db4631862e3eb7e39370515b8baa1cdd71a5b1b0cda79c14d0b5f48ea
+PersonalisationString.1 = 4be56a9b9c21242739c985ef12aa4d98e8c7da07c4c1dc6829f2e06833cfa148
+Output.1 = be9e18a753df261927473c8bb5fb7c3ea6e821df5ab49adc566a4ebf44f75fa825b1f9d8c154bcd469134c0bb688e07e3c3e45407ca350d540e1528cc2e64068
+Entropy.2 = 3a2a99b6cb3ddbe411d6d5a268c56fb31441ecd8ba47853195869e912d3cbfff
+PersonalisationString.2 = bd1e822b66180ea29a0d9e601e983c1f7f54875e8c9cd83463309d14dbef0b82
+Output.2 = 04d1aaa81ce4d2f5cca3581c3af5ac81cdf07970abe9808605b17423b355e1e23a193495a925e7629afe76f9b73bcdd992c9630c2ec6491bd482ece5a44384d0
+Entropy.3 = f9d7e6026049be4ad51ae3ea23df50435b9e284113af4de68a69c1d868aa572d
+PersonalisationString.3 = 2b337d90fe80e8e2065ec3115f404d44622ccbad486cf63798a22683ccd48087
+Output.3 = 216749dba2b9a55471b1eb7f395c9a1d105db154749ef51fef1e678266a5e480c75dc5ac4cc9ded202216708860f41270abadbc094cd6c2ca3a0a3d9a70a1d70
+Entropy.4 = 12cfd7daf168d0906df0bc01ed5ed93992bcb6c85beff2cd3d2dff21ff3480d5
+PersonalisationString.4 = dd855cee7609aa1b76ba7aa9f3125a1b6830798c1a2397e502f55747ff3561ca
+Output.4 = 25e02250850d1ac82fdfc1b10bc0c568a3bcfee69163e3021d5c5ce76ddde106e6956df400cdf6f36868ffa4111e7676141bea28791081387b3e5dce69272aae
+Entropy.5 = 049b1603f38618ac463198e24516327a593a2210f9b8f16a91f54c81c1d3bae2
+PersonalisationString.5 = 040565cddb45312e4337c909ae83dde2c55118ae94bf5494381c157d66e47553
+Output.5 = 650d95d6085b8756b4c8fe2b161190df1dd6c349bdee3e5d6c1dda80c90db5f4e855d613347cb9bdb8cc7be1506d88af6863a4bba597b7577f3b418402c84724
+Entropy.6 = 9e6199ad25a58971e76e48db30ab0bcfedb57a974d3334514a4e034a591cc3dc
+PersonalisationString.6 = 40841d2acfe951617127fc085573f626605cbdb2ab085a77cb080a99a92e22f5
+Output.6 = 603a3bd85bcea4b87cdff4ebc6baa9813180c22b1c48270aad93882b6376a660898a119cc99641fd5f75e0d18face13241c542668e46c9e043bf8a2ffe98765f
+Entropy.7 = 4a01fb95fffe4117a71a520a0b7d23a3c3120d4b20a8496d6501bf36d694babb
+PersonalisationString.7 = 59b87f1c1bd9af79bad411ec61cbd591f2cf35f66066e18e17b4f5d419d1327b
+Output.7 = 7bfa6afbfc3229c277b41396477ac41b847a2e58159bc3337bdc987b4a684791671a5dcb1249bd3907e68a5a87d45357e7c54c53da7821b55daab763e9aaf3bb
+Entropy.8 = e7221b710d0e91d3943d42943029f0c95fbdfdd976b5c0767156ba4503fd26a0
+PersonalisationString.8 = 62559c1e442d846d16ddcd601c17ff370cff582874a619dac6206748076d8d32
+Output.8 = 8966415c216de83d75f73626303f914f8d75e9bfc29d68f89c5492898059a1f64ecdbe2342a4fbfe6317d5be1325a704b9e3d2e86c546a81906042b60d02cc0c
+Entropy.9 = 571580a5724b11e4b312df420fa260cddf8ccdc4cc81cac75a2adfb73657badc
+PersonalisationString.9 = 170d0d6402aa7cd26afd26e4cb11d46fe4aac48df23c69b06de7c0cd702c78b4
+Output.9 = 9329e915d3d891c91c161cc39148d8ba37193d7840183a9672c79f29f8ca56a27f2c869205d3efbea70e4b8b245f490c81017370d6a173b3f6ef9924230f2d69
+Entropy.10 = 26fda930bc9c08a1691f023f348e9656346ce57d74d46e8150d343b52df5fe89
+PersonalisationString.10 = c6b08d04f3d35b07ca6451d2efe5ff8c545a734228fca338806f1dae93381f22
+Output.10 = 18bc448e8cd5a2572d6faa709f1f757433fff93e1a633a8b671e975a43f3a3a3506c4ce976a925f06d7a26cb2083a80f565fea0524c45d3672f3c09d6a7f308a
+Entropy.11 = ba595a791633aada59daa353533b0a924873140af826f47433e81aed88eb87c0
+PersonalisationString.11 = 5a3f431c9840e0565e49a12dd7cd6504912c4359b1508f6c84b2c718a37fe3a3
+Output.11 = 2284939201b1aea47606cfd623c6e0454b4e7d2c9fd50d1587360e838a190d97c8482865b99d59a819ddc89cae0b005241e7699fbc662442cbef847297db15cf
+Entropy.12 = 94043d900952e25c04252ffffd1fe4e8a54a3c047e3c2768c0324d1fe32407df
+PersonalisationString.12 = fb51b26a7e7f87d8da7c54ab1fad3d08c2c13112fc17b3f31dda72fd5b61eb01
+Output.12 = 7a27666f3846bb36f833ea638723e4cf95d692e0a6a37fac88a7cd5e4bcc3ccb735c0cfe40275972b2fdf530459a2a63ee13847460ee09ea63a84901bca874be
+Entropy.13 = 5722046edf9b2b84f2886ea9302ac38a1fead8edf6b3faaeca23ffdd95997431
+PersonalisationString.13 = 37da9a6fb1eec7234156b0f5210ba47c3ca6c03a34b69de3fee1f5269a929e1e
+Output.13 = 0b03d215fc30bbce8dc2aa3d4968682d586f10600757b05293c263fcf15ebc09bdecd2818d626a43982f9009f2974fcd01214f6be6ecb2aa7d9d101698ec08e9
+Entropy.14 = 3acd2c23bbae4d02cc9e4bb548e264f43e35764b446595bfe1e45165d42c770a
+PersonalisationString.14 = afb8203d4f7900c35d7bb454a83c5f2667ab506a68b710011c0be67055dfc3eb
+Output.14 = 02664c0570c4d3c468d16cc7c8b99da7a7f1752249e30f2833b1b7cd32a4df3c23454621d79119a9aaccc52d3f9055dbde98e773c26d4dace09ce9be1f1f61b2
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = c129c2732003bbf1d1dec244a933cd04cb47199bbce98fe080a1be880afb2155
+PersonalisationString.0 = 64e2b9ac5c20642e3e3ee454b7463861a7e93e0dd1bbf8c4a0c28a6cb3d811ba
+AdditionalInputA.0 = f94f0975760d52f47bd490d1623a9907e4df701f601cf2d573aba803a29d2b51
+AdditionalInputB.0 = 6f99720b186e2028a5fcc586b3ea518458e437ff449c7c5a318e6d13f75b5db7
+Output.0 = 7b8b3378b9031ab3101cec8af5b8ba5a9ca2a9af41432cd5f2e5e19716140bb219ed7f4ba88fc37b2d7e146037d2cac1128ffe14131c8691e581067a29cacf80
+Entropy.1 = 7667643670254b3530e80a17b16b22406e84efa6a4b5ceef3ebc877495fc6048
+PersonalisationString.1 = 40b92969953acde756747005117e46eff6893d7132a8311ffb1062280367326b
+AdditionalInputA.1 = 797a02ffbe8ff2c94ed0e5d39ebdc7847adaa762a88238242ed8f71f5635b194
+AdditionalInputB.1 = d617f0f0e609e90d814192ba2e5214293d485402cdf9f789cc78b05e8c374f18
+Output.1 = e8d6f89dca9825aed8927b43187492a98ca8648db30f0ac709556d401a8ac2b959c81350fc64332c4c0deb559a286a72e65dbb462bd872f9b28c0728f353dc10
+Entropy.2 = 749868eaece294a1ec7ec9e3f393dfedaaab2ff04ece79e504f27e2e58679afa
+PersonalisationString.2 = 9c9b45e39193747cba32fe67692c0ad8dfcf75f6d88aa79a2dcba02cf1bc0fc8
+AdditionalInputA.2 = 277316b395920347c6ccc41e60ba380f3672ac4cca3c251bc06a3936c36201a6
+AdditionalInputB.2 = e5d3c8155852799133e4c0f8feef818617d5e614fe5b24eb68023c9297e8b52c
+Output.2 = 27b925bfa556f789e9a310328d285260388f4c3a338988e960446e5cd7fd19e8831b80a829731497ccdd1a74f936efbf4c800349b4fb9a0ef291e14002825c65
+Entropy.3 = 94abdc4c57821e4c1c9a1775c1e3d9dcf8ea9b9b2f60d68187fd7ec6df8d488e
+PersonalisationString.3 = 88e1196af300adf953203e5a699d0d38b3d413542f414e6efb318d5a5074c8be
+AdditionalInputA.3 = 74dc1aa3b2171133ff3eca691069b061680661bd5e50339207e5ab3d85ed35db
+AdditionalInputB.3 = 7ae33779efdbf530dff97582962de937acc741457ac68f0eacbb31a9d225b47f
+Output.3 = a613823c56057cd001da13064ee19fc1eb3a1e39680e5c957a6ae44d73bad9c0f0b9c049e8f1d3de5f5b9af98e3c0e11ae27ec09c1c620331399d308df898562
+Entropy.4 = 4b5feac24ac35f4003f7fe159fe6281e8f6552bffcbedb5ff0f61d822b5f060a
+PersonalisationString.4 = 676458ba8e2ab71a3d7a1428fe50e3081e018e4c2c73e1d7c036a823486a5810
+AdditionalInputA.4 = 95ba78623e5d36fd64ddade66a651008e9b57c847602af7f71bc4d877bab620b
+AdditionalInputB.4 = f5f9dc932d69ce351c908368d9c3cef5231dc2417b5314e4eb80c4af60be050f
+Output.4 = d8d7950ad8b8f32a0c209c8e8ed5a16724e268dbd5bf8df8bcc1396afa11e279b0c2e01e1228d47ca042038bd5f5c159d144198462f7527286babe72cffba99a
+Entropy.5 = 6689dcfcd6ffcca27444ce9fef0e0a119025ba99bf529acdf216f46935530eee
+PersonalisationString.5 = 7ec6a195c2b1449242bcc918f5db25625e59e6ae06372392e538f7fdd210e2af
+AdditionalInputA.5 = b26033746220973d842193340db0e300ce0ebff36a66099d6828bf91ba5d2d4e
+AdditionalInputB.5 = 9a54f8f8af430206104bfcf2c03a3cf6da74ca571ff4f9afac415e86e95ef5a9
+Output.5 = caaa270c0dd422af2f7d7dbe069ab458995d00f0a99f43e2b109d4d9a68f39782a2b6cbb3fe8cb9b38dedcb56c0a9a4f7152f5a059ee405d2548ea3be442ce56
+Entropy.6 = a5adfa74d17a39c6ab28a6d8ef364d5e2f9581bcbea71b0b048f1f1c7fea3c24
+PersonalisationString.6 = 90a92c76dfd952af6296e015b6592cc05633b6e28f3f5ee60fad927d67af81f8
+AdditionalInputA.6 = 8f76ad330e118cb387b54678499a37f603212baeac2557d22d5a4ebfcd31cd2b
+AdditionalInputB.6 = c37f903c99166df30c5a02f262108e6fd6ec3d2af7a9dc6622c0e93c9724d3ff
+Output.6 = 1acec74b9b961087cd8de85c96eb74346dab26099389c9df24250c321f0d87f52c557867a600d9312089e78d9653d4d077f3ad59ca0e3faac617277677cf9ae5
+Entropy.7 = 9437404239164016457990085562ca14865c7e8b9fdab38be93101fd578668d4
+PersonalisationString.7 = a38be2f1738b5f08e7946980b208f4e3c0cbccef60898f57ab5ba8b54cf3c11c
+AdditionalInputA.7 = 56b3b5f053b8b2bc5826780d7301e2c046218392cd82b62ec16f37bc87b651ea
+AdditionalInputB.7 = f22cfd518864660a99dcb06edd4a15eae3074e7bb187aad587fc570f54eda51e
+Output.7 = c8612d5fcb053ae31a6884248709e2fb2e9b2d9fc18cce82cde9f941a064baaba21970019178a62d17a4198d26c392c022c32ce47d748c5b29b6f032803418aa
+Entropy.8 = 372224ba2689402f222f67da94b4c29670867c5cb216b51ebfdca4cf554b0f8a
+PersonalisationString.8 = 57944844dee02016854cf84486357e3470069196e428d8178ca2225ab7dbcb95
+AdditionalInputA.8 = 1e6f7fdf0b6ca87812e3566ad3387228e4b2c402a618f026cd84a14034ada0ab
+AdditionalInputB.8 = 3866b914e975b25ce9fdb0b5d3cf74cba196e26e67df11027bc1b44890dbc76e
+Output.8 = a2a182944d5218b198259ba914bf1615144f7e6476f236290815006cd27df31147e1d0a9c3f8a2538fc1fef5cfa67a3cd689d566b7ddd06b3b2055b40dcab680
+Entropy.9 = ef5fd77409ee7c1134e7bf8c432b72659657c2ff1c0e4daac969accf93ec0687
+PersonalisationString.9 = 146d6e37118614d73102feb2d66014504ffecc0f027b5be69e8945e6f309ec5b
+AdditionalInputA.9 = f2eae66e9c69cca6ad87b4fb20d1802bfd9b8fd8e9e69aba302c2c3e805b9117
+AdditionalInputB.9 = 9381fcc06df180817567265604d1309ca7a5ce511404c15cfdb2c5920bfc4440
+Output.9 = 740f8e346557f3ed8f99e33ee1426e8095b43b885d3cf8637d0d4194ab2c8d374da6d00141a39957ec6c9fbea13cf5c1e6296644c6c3649ed85aed5df84e9862
+Entropy.10 = 113bafedbd62a96547dfedc508a9c85f5843f2a813c33bc803d5cfb62c971966
+PersonalisationString.10 = b17084ecfd6e3f411b82379d3001af3a17debdeab5fe2d01079028608ebf6025
+AdditionalInputA.10 = 65d40375481c48b9909c841e550e82f48d5d4668d6f66f8b5980a8ed2333008d
+AdditionalInputB.10 = 691fc826056499d3771e899b24cd2ec86fd76f46c9d2e73ca1b549f289b7f725
+Output.10 = 878b160b83200fdd357834a4efa7eb2dae7fc86a4872e60f682cf5f732fbf4b5eba7f55cc966e019966f5d64f9fc3447b9d8d2c2ea6ca21fd44b1903b457eaba
+Entropy.11 = a0d2b9b47607d4564af2a443067d6f18c600155485023121028921396bb10128
+PersonalisationString.11 = f663799e37995ab3220efde02de433ed4ccc56c5075c9a5ee6c4e9c55fe9d3bc
+AdditionalInputA.11 = 869012497a0607f92056920763ee4f40461f3003a2ea67ec0c26bbd955b401de
+AdditionalInputB.11 = 1b23170f86a0dbb785a3c3619437a11fb6b6e2961c548987019531f54ee322c8
+Output.11 = 4a8cca2b46db4125e6809cdcf121dc549f591494d4683ab2cbbe7d14cc823cde916b5cb0a11083eea8fc301b93fb0bcaa6c8eaccf210a7bfd80d024f7aece180
+Entropy.12 = b59170ddb58cca49a09ef10c35e0cb0fc30673bb89cd0abd4b40dcc8fd8d0f26
+PersonalisationString.12 = c3e41ad9dd3894432fa5b0c0d0d9a5ab8e447ef5224a8bc6b13182eadd7b086a
+AdditionalInputA.12 = fe6da3c023118dd691988db2d76700b3843573cef405f5af1730e614a8eefd29
+AdditionalInputB.12 = 90c799ce1493f908ae6d1673ab44a2f147f4b8f1abbe4157c4b490bb75f293bd
+Output.12 = 56c34070c2515c7429cc64bffac6ea1104db76e4146f58624d8dda3dbd1bf6f62bb744d41f6c26489e248b81cf641a7bfabb36109c2bb08eda66eb2d4437a8cd
+Entropy.13 = 9bd57e72ca9cb492a88c3dbe49c851ef04e1da87457891addb06c27ab97fd968
+PersonalisationString.13 = ac1ffe64ecff5676fe8e3107fee9c9198b63188a899a766a1ed28c84a9898ec6
+AdditionalInputA.13 = a9b6a29c4af412c107baadc5be0ac0a45728b861fcc2b100b007c1cda9908a75
+AdditionalInputB.13 = f3f7ccc0d96918289d2ce990b8f7b9ccb217c9cd6e5972936bbb1c99073c60b5
+Output.13 = f134a45c20ef4a61f433d4fb26734075c6ad666a0d4f9ccb064b83de4e98ff96bd201ec52ebf00dc6ad6cb7d50d7c3e8b182b5f5b700dc5b3bd157a4e866bc6d
+Entropy.14 = ddb6e10906650bbf1cf78d9e8040b3b02a6088e94f84aefed100a5e80c16a4c8
+PersonalisationString.14 = 05b6da010447e70c566695a3b20664d6e762d1223ce4315ede311518883e2b5c
+AdditionalInputA.14 = f57cf314188b397797caa30733cdabd5ab2a90562cab9be5f812bbd48252371b
+AdditionalInputB.14 = 93839acaa271af55ec6c8464ac2ba8bc1c61584008b5d908b200d8048edc0562
+Output.14 = 38a3dd584a68bd037c5d5be4a103083e1d4bbd8a845ac1832e4c545e942bb5232ccec9df2abaaf0870d1f75d3bf85aa9323b5eedc26a73ade2ddade69fcaf6d4
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 48e8271c4b554d9da3f88c820d078f6a3f66acf007cc98840e03e26c62527f91
+Output.0 = b9a956a6e3d10310e57e287c284c6867ed9e8084a62b25c49218fa3aede7c6eaec1622696640f6b4ad5379c6fb8f9b5d7202ad89105d03173487e29da9739390
+Entropy.1 = b1c347b09665310d0d0487935ea81b4f73448386cf0801cc9d6a0bb655602c29
+Output.1 = a619e26d7acf6b828451562f5175c2a9afb73ce3a7265bea38b8f3bde9f426cf552fff3435eabbfb72446d9076ee0045bf82caff76d901237f7b6e33e6acdf9a
+Entropy.2 = 4adf8ebff3588c1d86f8b0a70f5585cd7fa6e1a1176e791beb37b5a25125d2ab
+Output.2 = 8bfd73ea9909cb62248f972ca77fd6537924fbf5847bd6b29b2fe367f8dd2fe22cadeb8b6e32856dcff811da72483ef164cfa678deb4f9af381efe2d70288292
+Entropy.3 = 285de616b8ba8bb5f646fe43601645454ec7d708f442fb1ffdea09ae10acc064
+Output.3 = 31be558ca13f238d596ec5db02d4f0b923bf01649d1a51f4cd27fcd77ba29e4630efc913bda1dbed320c7f4c8d69ac7fb3eccc259bca82e479599f3a67b17922
+Entropy.4 = 145b3c65afb2fbae1cd76525b2d5325cc430cd4e1c8a6376bfc7a3023bb8f59d
+Output.4 = 5660035f34bcc6ccabaecb1583827c9f0ff43e0ecb22269c069363c05ec282bc5f4d4a4262e1e0a0fb667a285a3fde69052c91c73d0432d91235bf4f90373a22
+Entropy.5 = b80c0a02b6fc7bfc0515880005c0a2c18ef5b8129915fdac34bc946cb480c0fd
+Output.5 = 82ef2af14b58fce29d33f9f1b52618f23024dd17dc8133749b5998150f44f4de8fa28f62c4dfeb2bb7bcc4f514af9ad2c76420d3e4cf7cc535c556e1e73acc54
+Entropy.6 = 1aea9380ee1c3837fd57b6ae69cae7d1a81663c2c36919a8fb46398a7757d7bf
+Output.6 = 9bf9e4eeeef118d6754944b8edd46dea3797d8219dfb9dec1186bbe2a9876e604ad52c02d02ea0a98029e883fff8b60439e6c358b26cb0ea40f0319a37f3ea87
+Entropy.7 = f2a711e4e5f0551ae7c7916a95e76542a44c9a02c71535fd020b2db168f43d31
+Output.7 = cb8ac78603a6b44f057f8fa348e1987106d5af6b9293ffe3726b4624ba04c60a27b21a626224748ecc111cd1ef102d62d8e90cd514ef04516718530500678f20
+Entropy.8 = 159cc9eb22aafb9ce31a7ee2f8e6171524c7d7bc045632ad043d731d00fb2a67
+Output.8 = a231a1ab273a297bd443f143599235cfdfc72359bb69394af0917960ec43ae17aae46232f8273edd864b8b07a613e9fc2656e895300fd17a9e2860d45db61e8c
+Entropy.9 = 1ebccb0dd503ec20e58bb4d8c2ec67f2e8dc3a04361dafc81c0c0b611af276a2
+Output.9 = c64db384b4b7b054b00d31bb94c027350e7a5c2fe00eef37156c94639cdb0433fb31be0237019bfaf6f9c549ff77d523b5b53c07d1e00f79b074b7fb5c7814e4
+Entropy.10 = 6dbf76e78b9af7744c84a24e5d9a4b424932b19e6a62a9ab3a04b32c76eef7de
+Output.10 = ea09fc6069b99c9ed116df49471be2d7261710a8afba1cf3a0d3f3d22d8072b0b50e003d7fab0211d5a44d6f75f4541f5b973e727105e0297c3b9f0ca94e0043
+Entropy.11 = b0a4fa9cc2a5b428dd924c312dcc054bfbf74c0f9c38ed0240046f354d2fc6b2
+Output.11 = 6f513361b3076f5eac6ca540869bdc401188f9e4be25348e22a6b8daa04311b52784baff3c2a11caf03deac3643174b0c8e44b544c0bbb4da7241bbf657ec176
+Entropy.12 = 857a1186a082d77ed7893bb467daa79576d1fc667e07117490522f87ee19bb9f
+Output.12 = fb8889bfe008f0d45034c26bb0414ff19513b6c4445acc4a563f6df9552ec5df95f8cc7143757e7406feb4f5be7f1b65760490df90298e73055830943dbd7c38
+Entropy.13 = b278aef0589ba49f91d3ce6ef0af698bbf282ed6c112cad9e86646d0107631dd
+Output.13 = e6e345a50ced3cc68ae24ed9ad8cdb482815284e66f9b0151fdd75d13c9758663c4df9ab99cef4fed8ae86fd1868be6c5eaead7a6a9de722f12da1e955dbc641
+Entropy.14 = ab875886827197b784b137726f1f5862c016e2c8780452fe98f4eeb68f71aca5
+Output.14 = b6634452661b019afbf2e9b6e20b8be7d9cab739383de8636404c275dc495f54fbf23205dbf843afebbc4e88c6ee126f729cc407ccbbe792e3319230f23023d1
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = caa9436ee5f88bf320e8ed3a7789c82363d0bfd4dd5d3e10ea14ba0f056f2122
+AdditionalInputA.0 = 20cc0175a54621122aaca0f0653034a36d4037e93d43993c97836ae915cc7477
+AdditionalInputB.0 = 604464ac87081e0e8d465211f9a9c99d071045c1430a3174146a09408406a296
+Output.0 = 1d1cac3f1f7d3fc6edd201938f6338bc2c976a4305bbe7bc37b128c56eda97478daa7d812db188bdcc86fc44c705441f952f3c54860a0fc201ddff269848ea44
+Entropy.1 = d78f640c60a28aea35e6bcf288f2c8bd0e71f774230bc8fb06c641b4e97e248d
+AdditionalInputA.1 = 884ec6cd4625f4b69a3fdec98f3841af8547029106d6ddde5ec481fb12b78a3d
+AdditionalInputB.1 = 9bb6a95de1b4be8841b72ea41eb446b43b269d0b9e394b356e6883c31d8d66cf
+Output.1 = 82695fe60142c66fb6665bf90e6f52839b956fe26ecfb7fb02d1ff59f8231d307e1ae38a52863945dada626d6e32a0c216df0a72240af28714483f0ec863ee7c
+Entropy.2 = 794abe2c9f065bfcae647aa62cf688fd694160565d87f2fbd59fa1e426206033
+AdditionalInputA.2 = ff509fa460000b3ca3e2930d1a3dd170c1b8ca182503ec12d49d7083f6a9daed
+AdditionalInputB.2 = 6accd0031e49e4eb085d0e18a07d89a05d6a1b15246825d865c00ab0429bb33b
+Output.2 = 5b5ca675f5e246b85ad31abaf266045150309d39b18d30190c1860def3e07501cb0bed8c57f53669c0b4f59bf1e30e241b5937d6f8852ccb0b6235702052d95a
+Entropy.3 = a0cd3d5f726a1a847e3d8fa0293198fee67cee2fe6fa6bd2c90b172288e0fb0d
+AdditionalInputA.3 = b768331b82e45272ca841d3867457788d1949af1fe1c2e0184a8cf91dbda63fb
+AdditionalInputB.3 = 8325754c9aee9bd5862e4292e29569aa37d3598e38e1203c617f0430f86c0251
+Output.3 = 741a103e00aa20210bbb0a901f77fa35442ffa90f4c171194ec9a544644f8c40d122b83643002ea50dce14faf764a7937254432c7da7e5c3f8936f32b5c21c9e
+Entropy.4 = 45f8cadec2fa4472347f6ace4ab04c04a9191f794b031e615bbcf9e716c941dd
+AdditionalInputA.4 = d884d5901ed1c6dc3fcd54ace3e358573260d733a69305663940328c45d311e0
+AdditionalInputB.4 = 11f0d7a40b124418a50eb50241095f0c6a89acb4c16a205719c51558de077e6c
+Output.4 = 3559d5ff9995e55d047f43a6b3a2972b766fdfecbba57fc92ac06fcd6672b98603199160698c04526085c0305db20411ac5614a5ebc2744c11b9121cd5684527
+Entropy.5 = e9e8df90bff856eb0b2cbf465391ec554ef3ef4e16fbcde067aef8386ee73428
+AdditionalInputA.5 = 0c1dcd0a54714765abf5017cacd1b15b209f2d6c19c7fcbff722b7a57fab4e94
+AdditionalInputB.5 = 5ba7cfa9c3619565e770b90c17ae60fe736dd87922c2c6ca0d4cac99c082218e
+Output.5 = 80159bd9bd269705cfcdc280e720024f8a2999833222ac61f80f6cafcd7f920de168fb95cb89d0a80a841dff92da3166ccb0f86d7a678021d11c0e999139017a
+Entropy.6 = 99b73381c4e530edcd22c78d695e3d49a808b312b7207ea0c581771e14f1f04f
+AdditionalInputA.6 = d8651781ef9353376533152cdf05c6886b9dd7d88aaba669715207e48c122636
+AdditionalInputB.6 = 63d45c3dcdacc47d7f549992d0e358aa96c5b7f293a77e82ccc3d2bbfc9f61da
+Output.6 = a4b1a4f324e91a410add56f04db8acbcfce7a434b95098c0994d9ca7f044095c82c97dacd10ac7df032b6c46cd48c1933cbd4e645d6f0b2c549d8f67e7f8b62c
+Entropy.7 = 73ed9942ecabfa132b225d37e93c49ec744dc1243d6068f4bc538dcc7e972c36
+AdditionalInputA.7 = 6345f94792f90a0d7834279ca9cec75fc78249bff3fcbbe94ebba86ad79be054
+AdditionalInputB.7 = 6a817efb5c930c14edd96d4ce88e8636d399c1d297f3de5930252923021e6937
+Output.7 = 353821f8c8d4b683c082cff689c3a8f9c81eb89fa7011bcb81c16217262030e9341e985ca1d4f60197e8660226a4756fd06210655ff4e98d7d0e70297b8491e8
+Entropy.8 = 9b52ae682c64191d588879ee9c736ab2c2bc515cb03cb6df7b6281a12534b7b7
+AdditionalInputA.8 = 30eba191b853fbe838d07e07805c0a1718d9d140982691d1f03f179d594caaa7
+AdditionalInputB.8 = d72d1568bf4f919463440bb68e966a0a23bc44e99da90f0eb75cecc2df471531
+Output.8 = d418a9edb9e6d1a185f9b419e8548fa8495e559ab751c4b286fd8b2e7db9392dd1936f8cc1e711aa86dc8354bb97ccfe2bcd9edbbb383f1cabe5b44aa14e2a7d
+Entropy.9 = cd7034839b3e9fb28bdb0ceb9964e86854e47c8c00d24e82915f804dbb932cfc
+AdditionalInputA.9 = 49b995f395185472ef60dee327a6e7c6af92a35a6114aa52e3f7b235d50d354d
+AdditionalInputB.9 = 03fc0e03aebdf594128f358dbbd846ae0238c42354f8d2601d52237806ab872e
+Output.9 = c4f3550b9fc59c01c6519bbc8fb5efda4dfc698900a774b058dda7d5e13099d7348fa078372a3b8ccaa75ceefc4f46a26378cf7e8a64ef7f98be70dc0540e5b7
+Entropy.10 = 546278ab02cb868701e0fd1ff0cd90182596da85e8d147dad0e78374656c172a
+AdditionalInputA.10 = 4cb54597db1c8cd5241a572d5d4a29b60e700ece3acf32447487bee51d6c0fff
+AdditionalInputB.10 = 28aa5b1843634457b38733a39779787d8148e7597de0831a0c7819fb23c247bb
+Output.10 = 121bf6343b387e4922a855d29c42b1f3b65defe59ee9b7d93a6012ec8a976fd72f9844face7fdd25dbaa3ef61746c94a0f0ef0195d5c209505eec716be33671c
+Entropy.11 = 12be2886302764845e401a638a736db7d8bcc3e457fd71e5a473c9a24df9042c
+AdditionalInputA.11 = 15ee3416681392e7c5c98ecfc6ef5b98658f8b0d98743d9c72e82a4f6114c83a
+AdditionalInputB.11 = 726434be41c409d1a2ac053d8b8d009d0b9785b0c7ff15220e48436ff0a39ee6
+Output.11 = 34a292fee05cacd78974b57362f5937b1caf5d0cc4e52bc3ed9c20a813f686ab7464392c8eb4607672c97c2f40fdf919390baca1d395676466813c822ccd3fa1
+Entropy.12 = 6f021dc93249cab7db93d5dd245ae901d2a9497fc9c152811a4a1a9eebcc28c9
+AdditionalInputA.12 = facace9263b0ee3b229080f02fc9083c2cfef7b6e1e6d764825071501720dbe8
+AdditionalInputB.12 = d2ebd0d8537ac9c37f6208cb2074d7e725a2127dae150425e7aa29d8efb3cd05
+Output.12 = f76bf3b19142d8294fc44764b18ce69230aca3a96deef4fc208e61205c5a67a4fc851a4d4706c0f402ffb0f7adbde4d45848405b662f454e5fbc11e4a3333735
+Entropy.13 = fb9131086743a20e480a4260e22ddfb0edaed147ab708c2536c17acf1bd6eb1d
+AdditionalInputA.13 = 04117f27fec1f44d44d0b86a231820c09a6dc7b6418175558fb6a028f835cbbb
+AdditionalInputB.13 = 81318958f1d8059ff7d3c592ee24901c619d3b74d96bafc511757a7b1bde405e
+Output.13 = 4b16094129e41cf3061ccc8e257a836c3c3d0997213cdab32a188c7c8c3758b4b9224e3844a3a88556c9cfa629e3ce0b0b436528b26a1dd5811fe1caf88ba033
+Entropy.14 = 73d9634cef191444bf3ed498c3343e6aef97885493e0805ed01107ddd3d194b7
+AdditionalInputA.14 = dacdc1a5c9b4215da6b1520c227724ffc888945a3cf1db2d2ff5c4826695afd3
+AdditionalInputB.14 = f291eac0295f5e0936542010df7ca9c417cd78f7a109655e9050fd502ad91d4c
+Output.14 = 70b881acd434f90da8788bfe77226132c8a3f2544293b0ef7408559575ff0e52a17aff11b9601a4765e2ab0cc90f19f69fb4485554ec0b17ceabde960a56655d
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 52544be6eebfd227809cde95f19a062bdff8adf94afadfb6012c8c3d99d17b8b
+PersonalisationString.0 = b4ad5442e7bbba499c36fa520503795e7f2a31be8d95943eb34db538d66723ee
+Output.0 = 91cf403878ecca1fd45d31dc676302e02e92d44710bf9200492aee1de6d1b64f342c1ad807c845b539652cabe034b69f2e84b4220cf7cc1ba6eeddf86d8f3d99
+Entropy.1 = 25f5ec23695db8151314d79d5f8d3a6d2f1cf744a02cff058a31093aa2950d5e
+PersonalisationString.1 = 6bc77568176ad59c72cb064e81c80f8ff3be2d4e2e1a467d60031c6c1905cdc4
+Output.1 = 8ad67e6dee168da830270c84fe6f54f285270691a982aa32f040baf43dea4823873a08a0b3bee2784db0f9385cd846de32b4f417aeb23efb8551ddf4ac1cff6a
+Entropy.2 = aec2cd6f65781d4e1168ba57191280098c39e348af42b3f45a79903c29de70b3
+PersonalisationString.2 = c722c7d8c1fad0d4ffeb4ffc0c0ff0fb5a98df295e3243707ace3c97483c4c17
+Output.2 = a8e1fd99f18a3b313225c9f6af0ce0326a907144d091b4df1bf84425665870a80801b07ff74c0f7498f37dcd34232070734f760eb19c966140e3565acc7c9c32
+Entropy.3 = 30e4a1765be1249eea46f298a67c271c2b34c6b5b7a5fbe9740fc3729a80758a
+PersonalisationString.3 = 1835ead1d86c79c33624fcae73db91e85831c1882d728a3c19a05f90533ebe8b
+Output.3 = 8669f2c25965948b61f6388a0f0e0cb8b286ef444201d3b98d6845a7e14d145bde1d01420e590dffb645e6c90e305686cf9b685ca95c97ebff3864c62a004bd6
+Entropy.4 = ce80f49a9512b76477bd40acf320d1cce742565904ef45c801d5bbd6206dd20f
+PersonalisationString.4 = d212101d3f558c33915aca3f7ca32b65d8e674c1a8c880457bfbeae59b876778
+Output.4 = 5fed82f1d10b8ce1dfb597c905e411e81fb96263842299a19a0afcaaaf6f40c118ad0a3f2b5fdca079538c354162aede2a49d529d370b6ad1c5618d3f807b32c
+Entropy.5 = cf9d04887a64df7e2a4d107d487d3b146ee849388f960d0a14ef2a5e26a32b92
+PersonalisationString.5 = 3950f09d6b564ca2496d740a92c23fe09ff875ceaea58a3ec68d12bc84947d74
+Output.5 = 8caf1a41df0ed48e05bd57d7e8b1d784fe4c55c7c08e0c2feb56da99cbb60b8242dcbb2e236d481328c0352e3c20606880e1f09b684703984b332b7c59bd8667
+Entropy.6 = c61f9cfdc7ea70e403d4972a234378bb6ac99c13fee4359ba870fae29d22a8b8
+PersonalisationString.6 = 86eeb33b0086770f72ee971b8e84da92ce90974e3742631a0a2195b88766a533
+Output.6 = 76007d134306425f4d1b1fc81c014b6f6971891857696e7c7ea1f8731407550a2d886446369f703f97ba3d1a3a86513e6e2af406869ce77c169685550640e44d
+Entropy.7 = 0541d6f99166877f14e2ec40d37dcd693a539fee18752dcc16685694ef8653a7
+PersonalisationString.7 = c2b891c8e8f85f13b0f82068201945bd6fec9d102b8e20a5bca100dd9b1c257d
+Output.7 = 47eb4f0f7d57e0d360fe51d6b2aa54b62f05cdd62a789cd639f63d90b5b5c5cc1bafbe06163b844230a9f52875ebdc342f84149d80d481892f6e316221044d9b
+Entropy.8 = 074367ca90c04ee7880618683d02017fe5829034edf5efb80d85d23731ec167a
+PersonalisationString.8 = 2167ffee6863e6e9a8d7703b4e92eee31a736609d92f90b9e3dff4556e12b77b
+Output.8 = 8eb4e9307996a6d17e9137a1aba52c518aa560d5938d9cf57f2f2009a07c82ed540d1cb40b7097f77d6dd2e49008df8c98979ce37ed3f763c307e2d79c7ae616
+Entropy.9 = 4f68a0a4aca711550d02cfef7baf555e452a10ccb7e6329ced3aff019634e415
+PersonalisationString.9 = 77e2d6229968c8a16ac9bb1ef0420eb084d9fcd010892acc79baab899d19ce2b
+Output.9 = 4dce9dc3b2020595ad972314a1194675caa70ccbeeb023aada1bd991aaa966b4ef5e0daf46cae516537b35181e6684eb0d731b919e14703f121960352dbdfe78
+Entropy.10 = c2d0012edde141aea2e9454ca04d5cdbd8a293aff96cde59e40de068f9dab8f9
+PersonalisationString.10 = d80e1ddb2e390bac9008f1f4cfa1d5cf13a941cb4669eb6a9b1dd23358390286
+Output.10 = 5d403a36e5eea6067c6b28b1cbc48e9dad76c66f6d14bad9c68611fef97758ec6f5c798760e6710d8bea3c8dd2045ca892fa015e39e9385d29bba908d7005a6c
+Entropy.11 = 10333bc106e9eea936ab55e34c5f2833ad2395c466125beb4000d42b1c0a80d3
+PersonalisationString.11 = a1a7775ef0ff03d7adab74b1b8f05bf3d7b62eda1d29685e861c5e28f16d9148
+Output.11 = d12239df3f0a25e384ba01e92ef4840272cb82579ce6e5c1125ba191f2bae8ea8638d4fe020c20e236da8d6a830ccdb84e531a27f8cf9f1675a60e957a15f7a4
+Entropy.12 = 3d4e9666723c05ddd2c13aaa26dadb43cbc188b0c2057ceb1f0ac78bc8575c9e
+PersonalisationString.12 = db9e870d9ce2ba3c7b261f7ebe29482b0f12ebeeeae3f6fecee4c0490c05e3eb
+Output.12 = f86642dade1493c289c16a210cdfa723988c7200cebb3611616ea8a63675576c64f6f4a995ca220f856e725f3023d3aece61f23754f0585ddd1e03311cf5cb16
+Entropy.13 = d95f81f198d973577f902dcaf707d93f5e9e0f4da50f48d3a1a2b6a016664160
+PersonalisationString.13 = c5e42256b2d0239d204093ca5f99d1880cebc96b6707b6c209ea2da0d26a411e
+Output.13 = c43544c95228cb76d7c5a49937fe6938d220458004779b02cb7aa28f8fb0c795115e942a6578ddc0b5679c0c9f54478b8a3353eb390e31774eabb9cc6b80334d
+Entropy.14 = 0c4564ba254455b6557aec1cfee2b2b726d2c4f45379267f0e27d11c6f1edc7f
+PersonalisationString.14 = 46aefb024c6acdc9297d5019109310de558f6afcca730c8414c54f4e574fab1e
+Output.14 = c94894d56985d73ac516c1249cea3d8e79b67dcdb2bf24b830d52f9e1fbdd8bdb37a546c4ffe13186ceb0a230a14ee1be0e409eb19eef018e54f79c3ddd4fbd4
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5148674da123e809431d84872c8b783566ceaeffb2a2ed1f85e4745275173c01
+PersonalisationString.0 = e4bbc186bbd34a9e3ddb562aecd390bedb77e379e71e1dcb4fb6dcfe581d09cc
+AdditionalInputA.0 = 4cf31655c6facd209ef99d1ba9f5e29c1ee9a7a101f3dddcbe384107da52aaf0
+AdditionalInputB.0 = c77bc7952423a2ec3b1f7f68675f9ada5a32d1b49414307880d635da80c59c83
+Output.0 = 98a6a66451ce9bd34825692fdd6524eee82ea1f550f5c32aa9735ed52119b22dbbad9d4282577cb800315ba7c9072550847edc23b50a1979ed341c37759222dc
+Entropy.1 = aed2fe2c23f5812e6bdba3b4ec782f3317bc25af7cad0effa8ddd7eaa8bea0f2
+PersonalisationString.1 = 292cd528fa53da05032c1c0cbdeb52ecacb819b651c28c4d0a1d75248d468cd5
+AdditionalInputA.1 = 363cc47e3392ec7c28a9ae7239167bedd62dd1f02c38af47b3b080385280c368
+AdditionalInputB.1 = 63371453c32e2eb3e7bc1e961e5f333224dc963fdd6abf71fbf8159be40aadc2
+Output.1 = 9d52d11fdf3f9b3c4ca9a4184b4d4a5816cedc755e033e406ed35787b792a77f7322d439248c91afbf67de473331aa0e0fa000bffec10d16afcaf4c0fe73a39d
+Entropy.2 = f356f1c63c5c00be9660c68dbf00eb5a4c02085998d5084d75f54a86e2bb07d6
+PersonalisationString.2 = a443d0526d57982a661d1ae3c6fb0951f4e724e8fbe3a5effe9f718be988fd9d
+AdditionalInputA.2 = 15f227571e83693aa934658a13c650c1e663c0c74e529cd486650044efe2523d
+AdditionalInputB.2 = 3ed20508cbc91045b555358e3f7189a0522ad43d5d7fd0d6d88f475cdae177cf
+Output.2 = 868bf4fe9d7a7c656a1ea02dd353a7ddea6a9ed1eb4c0de928eb03f3e78f069d5b22d82475a9c52efe524e4cd4bf10326c6fe2fd6040d61aee34b74fb7cbbbd7
+Entropy.3 = b194f492ba4b20fa65be3732412425198e782d0424c263c5d3ef3e1a9908fa8d
+PersonalisationString.3 = 912c648e82d7f4077fbdd455f4b12ce9de4744604d24f94407020e56e855286d
+AdditionalInputA.3 = 25be6e16cf62562b19e6e6737543724dc9e03d86e97e896ab2eae1fb3f1e207e
+AdditionalInputB.3 = 2ce541fc4869449c11974f1b88b17f8ffe7a7d3d43e8d6cf0eecbea2547fd7d4
+Output.3 = 550e76c2de2c799612ec816141289776a730eaa9782610be58ee4fe94847bca56ee8a33c3aeaa40f5f71feb4a9df8d01a28a8f80a666ef7773f302e9a8cb54db
+Entropy.4 = 1ad7359e362dfa169d5f391b570c2657f12f80cd2cf22e6c340c9ffd1ae95cda
+PersonalisationString.4 = 0b60a58744f7753baa2b2a817d738e08782446f1c8eac848acd3baa683b045a7
+AdditionalInputA.4 = eff6582f2545b67f5e1809b87f7b7e275362f35215793acc1e3bec93a7da31d3
+AdditionalInputB.4 = 3357e1262f9d44766e485c3ed9679d7c544deda01cabe1c55a4df6961c0b96ee
+Output.4 = c1168b39c0f9a6c584a44df7a704df4141bc553e7abcbed29ada29b5d9d333104ed5f9688623ac771bd71258ec090cfb31ab9685812553d687a712265e5a2e0e
+Entropy.5 = 91afeb9fba80f7f05e2ed40f548af6f73695b8a3df98095cc32948dac0ab91ec
+PersonalisationString.5 = bf083342d0ae63d3509de22425edd325c7e2660298894f677f7ae5b30c5a3759
+AdditionalInputA.5 = 085bdcf86f2d89edcc727f5be5ba1255675e6fe611746fcca4cb372ceb7c9fba
+AdditionalInputB.5 = d38dd8aef235c7babc682ea46d83fdbbd2b1c53adf18ec266cc53f01c9091249
+Output.5 = f4e37fb22bc0c6b9a972fadc914d7ebf16428068ee20a5055e7b5c54fe36cb11518890e436ad1e2e2f8c648eb9507a49e52202df446aa5c6342ada65f0a22647
+Entropy.6 = 79e2011d49c334d977bdac54e3f4d87219c6eb38b0d231837716f3d6f4d736b6
+PersonalisationString.6 = dbb3afecd81fb94b6fde7b9e5d129d8057737fab7828127cce2eaf82a5a0a505
+AdditionalInputA.6 = b56ce9f1afb8e58709c1b2f8e50e5852604d1b341d046584d088fbfcad746a09
+AdditionalInputB.6 = ff45e7934f8b1791fd3d3d03924077a9f0c43ea56571b9db8f748f4dd255e732
+Output.6 = bc8de340b703c75d8e95c6610559c9e709ec0ec62c322f7cd5ef467f999fcd457a4d0ea4b3a63f9341a4df5b51ce72c79770a73b3d8dc42116f9be194a222c4d
+Entropy.7 = 8ee99100c8e3b44c8e07bf87c24f761346f8f488efd86b33528a17bc9ab95cc4
+PersonalisationString.7 = 01b95a46cebc95e0ec821c921569d80799ed2a1332b7fd080707590a511a5583
+AdditionalInputA.7 = 02f520d99b93a622e8efcbb073f8b64a89ec075d70131a63509b04fe5069f47a
+AdditionalInputB.7 = ba6b22672a1fdc9592033ae8966421f9e84d98d60a1cad8b0d042dc6c3448a28
+Output.7 = 882042c9302b6714ad5be7e4fbbeec06f7c38f84620cdb9b300e02b5ca58da8080f8290cabd9ed8e62ce810269bd2fae3a6427d3117e45f0a83c5358bf9c49f2
+Entropy.8 = fae46d546b125323b2815692f5b6c73057b726b20f3927339ee63597510f6c64
+PersonalisationString.8 = e7612faa262ae7fb8b81d3e8fe01d50012354cf9e18d108ae0780c334f8bc6b3
+AdditionalInputA.8 = 9fa5fc127d266bfd6852a532e4d518d0ac3614c677b661d5db6200cc2deb5f4b
+AdditionalInputB.8 = 8e1c0b5d0a2afe84f4e2326b8714c15b21ae557f931dbb14ecb6ef67c5b7de8d
+Output.8 = 25bf43c9555597e2b1b27d4bfdd827785d80be5e09fd6b6dca629df73faae1c1f0ab228b058a7a3a8adfa45f4b8f679e17260d25d87d9c01be4dc242581d977f
+Entropy.9 = 001701b44d0d95f1878b3eeefbccd7477d7d719e1ae869c80492bf646d1b0556
+PersonalisationString.9 = 4a8daef809daa46d8f95070201af13f2c92e61da77a62e8e1c8367107dfd18b8
+AdditionalInputA.9 = 2b241837dccb292b5f1f55d814d6197515153a276f366b406f92eaa8a58229fa
+AdditionalInputB.9 = 04126b3fefe04486254a4a0ba5c4a3d50b208d45dac5ced173937ff4a3152216
+Output.9 = d8aa271909459ff40cebef223f2c8bbf327248c988dce9e50a57c21194ca45f9c758178eb372d2c15b8acb4593734746950cb9123a67987fed82d5fa8a516749
+Entropy.10 = 85425a96dc6109aab7f96ca73856cb51e5a06d0fdfcba46876ff75542bc15659
+PersonalisationString.10 = 7d34eab3a49a0054a0533c36e4befc81e8576dba7bf2cff8c8f39dd191089c8d
+AdditionalInputA.10 = a2b12d0461e2855968b2e9394bb581d3ad631830d7416f6efe6968ba1bf44ff6
+AdditionalInputB.10 = 14d2501c43411649adf557707390e373ac069af6520020cf02212eec6477c288
+Output.10 = 71130692bba5d1a3684bcd6c03281ff9720a9f4fd62860eb74fde298987f612caee251c1376192a68aa29b938b103a16a8fb0fb5594b728a5459601eb14caf10
+Entropy.11 = 167b702d7a96eaa8814d98b7b8ec596c6c7597b19faead69c63bc2988a8d39a1
+PersonalisationString.11 = 20e7d6d19087a87ea175baad5b2b3a4c017385ef0f7d1d32209a8be6e07e8d88
+AdditionalInputA.11 = f63f9ab7f2679bd24e7851d3bb5d826bd23d41acf387f90c8c9dbb7e18dfbe96
+AdditionalInputB.11 = 235ecfca1e66360cdce60b4beb139d08c2df8b60c3043bc8be7b2a883de1780b
+Output.11 = 41bf3e5088353bf926ca40a95078be13aa2c7032a05c55f69c6d4568973079da0d45960d8c4e37ca6ae64627cd94abeb09c56ab8d57fdcae923a9e9911e569ad
+Entropy.12 = a1ef837d29eecb1f8571870eb06f6423ae72ccec87385ed6cbc600cf6291166c
+PersonalisationString.12 = a94c80c1b7c07d58b1556f3c50166780fd2651e1e73b97acec4f92d1ca9eabc3
+AdditionalInputA.12 = 8ec601cecd3409ecfe915c3ad40c861465506e4631dce4010f8bffd0787b33a6
+AdditionalInputB.12 = f17d2644faf43403b187c79577e5a6cc66e4737816409787f46b48b1d4a0ad1f
+Output.12 = 7f52cbd4aea28323aff2f633b42adb0a903ebed089c850cd531eb2aa117ab8a9c24317f852f5f999a34438948898b89769b51009ad4298b7e5b48caa64131de5
+Entropy.13 = 65fa0983ad3a6f34b60c2c5f423e96fb620668ee6c617cb397989e7c8d22fd6e
+PersonalisationString.13 = 40a95f2e17003c0f0d420694727d4460dbe2fd12a765594c9b3f0851443e6cb0
+AdditionalInputA.13 = 0c380383009c1618d16f3b8b4f7cfe3c776af7c4a5ffc53658e0519290022fdd
+AdditionalInputB.13 = d9c3208820bc29e0fd8bea1f31bf168fcb23aa4b7b583782b88a936388bf9467
+Output.13 = 61a0025c4603d6d44ae15a939c9d9654e985e7d595319fb20074fb32f2b7d7a781a4523ab562b04374c1083b520f335756afa6ea4b05ac3ea597e904f3424919
+Entropy.14 = 573821a192ae7c82279f4c519d9269550f68af4a6779b70a1ea53e6a3185fd0c
+PersonalisationString.14 = 9f380e16bcc774cc3d224b58277d4401225b9436ff9e40021b79076e228914b9
+AdditionalInputA.14 = 959a1aed8c1b0af637b8c0d0dfd600b0d5dcbcac12bc8cb160a2a0ee7f2fdf9f
+AdditionalInputB.14 = fdbb472c9f368a44f92bab4bd993c7f39d4e61c6503f69c205191d86bc1b2944
+Output.14 = fa2f2a566b99ae810b2b95092da67bb16fa185013ad0c83a845b48cf4fa55f7017ed944d08b57d6813700fb60a30a2a2f976f8b9761516ef137e3e3a078312f9
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 084b352f38ab28d9c1c7ff16558e0a12377d820cd6eca3a352a6fec381f35844
+Output.0 = cbdfff95de2906f3423eb4422bd3b0e6ed55a7843ab6ebedf52acaf28e7a5ae061aedb49e7476783f5cf2954168c8ebc3c9ab0b1a1cb879076b47697b36f9540
+Entropy.1 = 8c2566ac860f232fa317087f84f0176f98f57ec087ae8cae97527bea9224abf1
+Output.1 = a664d31a2fa08dd16a2b89f6bc60eb52e47d99782394041e391d9f5686247aa24300e487a730d5200dfdeccc474d22f5aa8ed523c3a0f6297dc533936592ac3f
+Entropy.2 = 09c8e3922a756bfa740d09234255e0fc4b1b46e3513969d24244b0d9b492fb26
+Output.2 = 31c502fe08775f53fbaa52de6ec53ed96887ee6c49743bc5a88b016f4695a6f5352cd6f182b27a50b37550644a518efcccc847ae08780766aab2d0984dc137e6
+Entropy.3 = 6eb055a330f2c1817748185d5cf11862e27a173c7caa983128ac7d356d39f440
+Output.3 = 3a34b6911fe27f5d5b4da7561fb57db8fcee039388ca9bba1ff1db8ff58096263e96b0b067e2c6eaf488f299d37051c59505872601e28b9d2af7dbd89f235407
+Entropy.4 = 70b34065299cabb6728909fafe37d6b268fe9fdcff833e638f134c02d232b4ee
+Output.4 = cb78ab067591155fcd3a892053d9b271ac05a8c7c32338bf6390184a46f07f8a4757b0e03e94758b143d5a2330c6b8f88aa621eb102050962940788aec9be654
+Entropy.5 = 61ba1ed528e5a6070981cd5c11b4be2c2c57359df061c3053c5a1c6a2006ee26
+Output.5 = 86ada4fab2bcf5d0641897e6b728b13ce685de59f859aee2bc15ca0bab6703f8d1991a4a6033e40c58fbc19be53a13398e537bf903fe19ea0aac55b272a8a346
+Entropy.6 = 5be7687fb7d0ee62bf62f06fac2eee2521be7e730c1ecc63371f5d8787bbce75
+Output.6 = 285ca1fe69b8bb0a7b787823f46ccc9f8ec6accf8be17eaf95e63c4a1d27d4699f9ae9b5943387b576276e459f2d5792cc51a1bae13248c35560bf211cc1d781
+Entropy.7 = 079a183f312e9bd4d23cb997548028b031010e80bd59d5673414e4ebc10dd99d
+Output.7 = e82902b5881d6a8d4d42c152ae60ea1c81a6fd171676d16b7e94e4a85faf462879c66725404259af4413c428b858518e4674788fc5356bb9b600f96b88ed4706
+Entropy.8 = 0a55a579dccc4bf11b59fa85db6e33eda069257206fd62345445ccba20327043
+Output.8 = f96201a7e0dd00d59b9b64ebed6ac9a7d5108da0afefb6fa86905914a3378785240708fcf67de0481b3518cc4a8bf05ffa4f82ea8743db321f7daf866794cf93
+Entropy.9 = c79fdbd9dbe494be5597acf66cc58d5487f032fbda9a7370283c415028b33541
+Output.9 = 7668fb8d9bc279aefafc0c39c0ad6653b9bc3dd1737ce19b180744544605ab8c70f461acbb337d686aeb2783b50363fffea0764de46d1a6d511c5ec024e5a73b
+Entropy.10 = adad3e0063df271abb77b2a0d528638deb4deb5ee14d00253c1bbe7e3ff9b6d4
+Output.10 = 4a19a0b8975243a3ad46f29a2a024d477bcafdfb50f17aaca5660039fced2f0764720620dcfb7ccd2501fa13839f7987bd339dbaa2ebe51e9057837ff510380f
+Entropy.11 = f8f62d35efab4993f899eba75e0219c8651349c9e8f8e746779cb5b1203a3b0d
+Output.11 = 5940004344e57a3a9fcc5331343807dfea4426a861e9bf0ecb07f4b4757258ffeef503379de278b2736ef06af1f78266bfecf114d452de8afe1a31d35d961f4a
+Entropy.12 = 7c321cc7a02710f42f5c64f7d50e1cca139f91815021476cb3b65336ec0a8c64
+Output.12 = c860e9e09b4e36381a4d8b0b247338924aa782eb79603a26890250f566ab11de34daca0056403c49c074721481c2c0b06cb4669ff9a3dfbfcb73c62280e532be
+Entropy.13 = fffce229dcc8f77e3b7149804e94b29c8c3d851c129d1a417e181adedf8dd12b
+Output.13 = 9ab8f2730cd5039a1c78f837ccaf7747b27ca425b07728933e61bc39b5c09fd63a0f5e7586fbb00fe4fbea809392a7f95206345c640cebb98997d53cd1bea4bc
+Entropy.14 = 397427acb3683af13636a70fa2d9ff5b6d032f9fc6197d62ce1027517cb66268
+Output.14 = 2c6b5c5682187740fb566ca60644052b2e0bc3285a399e8127ae53fafa3d5286680416772e552a2cbce4a523f26e7e7e45827a291b61a8b6fc7836e3a14e694a
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 15087d76deba6d1bb18901e816887178db2811be02f047fcdcd93fd064817b0c
+AdditionalInputA.0 = e4f2d4342ddc85c257cb6c1767cb69652f1c30a82fe8c0550eca1937428e1d90
+AdditionalInputB.0 = eb5f7d3efc4bee049512b24625146a3fc576fbbf0f0e7be4f8078b51d489f953
+Output.0 = 0830847c4697b678f35e1c657a2374eb7556ebdaf8f98681a3e7ae8726c2f670d057c38f5f2a0c23f6d53668c6d10a9755b4c3895d9651e7c9d688809cef9422
+Entropy.1 = 6e5315d872428c26dd63f37c2adee9a88ac71bc52dbfe29f55ba0c910381731a
+AdditionalInputA.1 = 27397528f4761cfa2e2a585827909f15e1f6b07b10556caac62f9189aa52ded7
+AdditionalInputB.1 = 7fc7932c7aa0eebeede714dba747ef4f6151ab2fa571dfb732ba0205d1ad66b2
+Output.1 = 8fc9b0b27447d55c29a9e887a24fddfa89a9a35946706359b8ffd83a0450f707d4f50ca260ca7f1f41ec693f7f489cdbfc10f82e2034f323325061f069b6776e
+Entropy.2 = 5d3f0ccdb08822b34701e14eb570a3fa63a9eb31f922244eb951ab31e55080e7
+AdditionalInputA.2 = fa6f2478fda9ada827b9b20c990733266697bc571c834dde5993f39a3180c366
+AdditionalInputB.2 = 079713b043ab9ff2f30ffa7c221044f0fe59042cc5f1466ccb0762c1fe7c77a8
+Output.2 = 1193a46b182e3966dadd2aa7e9198ba651d6144613ae516a7ffbe3c610d04c08237b08c2c49b2e3f398015693ab5fcc8cb000ab7122d7fe2a072f60a077beced
+Entropy.3 = 677c911b858d6380d728f9375407d667c6ea7854c92d7d7db7fee7a39cc38864
+AdditionalInputA.3 = bf93c0b7e596c7e6ecd2a16ef42abdc693b511804e547a44ffb84cfb53cc5be1
+AdditionalInputB.3 = 1cc29a2e81aed20813a6b9e9f6b62d6229f7b0f6a24b854716ff010cd4000d72
+Output.3 = 8c1563eb9251f988466ea6752271151927f32733951389ae0e89c8fd4d63905b914eb5498fb87191d4dad7373c8fb4d596d8743aed3eec9d2f1fc43ceb2e6356
+Entropy.4 = d01504c5c5d0b5893e759b5bac173f6545a13acbffd5f9a49a0c0200dc19e634
+AdditionalInputA.4 = 52c6d2e8ecd1b0d83ad25eeeb72fceae958a177e8cc0511ccc4049def87a47e1
+AdditionalInputB.4 = 645d9ee2af9140fd1019f208adad1221aa88cb8b581ee9f396573f7a9cf6ba9e
+Output.4 = 365b0b4c25cfb92b87c33f5cbd3685da3e4af8a176f26db1f127604a0ce8a591841c93a7c36357e7c65fdc3c2d1e14ad73a2c138398742cbd4fa9184878ca9af
+Entropy.5 = 728d5e16383b89b30689d96ae0ffa25d0870180bbf9aa784c0becb830d1a33e3
+AdditionalInputA.5 = 7ee493d5a20a1affd0a1ecc7f948cd328510c6780fbab6dfbb8967d547120685
+AdditionalInputB.5 = 8bc721b2660019745419ee627948081011423407f7ee88d08de3c8d2c7415856
+Output.5 = eb6febae389d396ac3e2271111f663cc2d5c355f9b2f983e0ad97042882e52bf5e3b72fa024dec84dcb8d6602f7ab34de5aa02a2bef985b41b6ae3bd36b4eb43
+Entropy.6 = db1bc189f4ae4cc90b36a15ac686ad05dcf9fccfcaa85ac0e1f7f3ba0bc9dfde
+AdditionalInputA.6 = 4dcb2417234caeb0e58c5b37c39731e6791e62183b8f4f0598b3149643a4fb1b
+AdditionalInputB.6 = 24d424923e78f5c5a229578b882933eb4fb29055f55b825b40c905bfbe2b436e
+Output.6 = 139d7152f805c45381cf4fa9da6f5c7b9985fe503991148cc4357c85699862325e41f467baa084057c434574a9ee49e03ccd6c93b7ec6e75b4aaeb885823a1b1
+Entropy.7 = 010e7211ffcd4a6c368be398d9ffb40da8a3bcdfe5098fb85afaec13749ba7c7
+AdditionalInputA.7 = 3dcd8f3980b315b569c19c0df8b80d48d751c704423815dabe9dfb6a0eca14bd
+AdditionalInputB.7 = ae8b707de992cab2d753ab423681127d76d43beff6eb5962a77b8642639923b3
+Output.7 = 6b92e9fda9af63f14556476697591254a993a1e36b3bedcbebfc28dbf85cf5959901b44293d8665cf95922ff172d9c7039b7c21abb964587d48117f385c7e07d
+Entropy.8 = 06656ef727d13e9b2a49b30ea9cd4d9b574dcbf4c1daf5d500167f3f4bf23e57
+AdditionalInputA.8 = fcce0465f3c76b163f64d4c34bea91e7ae91c6d79e01942f4b5e6bcc672299e5
+AdditionalInputB.8 = dd4f6b33d894476562890db4b8ee7d490be99233aa81d072dda32e2957a3944b
+Output.8 = 1a6e600619b6de943bb14fbe8790b5f38eb7f2df6e8dfa0d1e54a6aba1e3494296784208d04fab7f6402986f5f25e35a202a3f98376ed448c3a1c24e7957e095
+Entropy.9 = 5a0024203d45ebba4e217fc618246857197a9a12b204addff9c65e4c8ef6cfad
+AdditionalInputA.9 = 46a91c235636d0aa0d8d867f80d351f6b9c20e9debe3f5e5a30861f92d741e75
+AdditionalInputB.9 = af7931c44b7a1c32ceca3c549c4c6e5dbd91484e681e199e2a7a08e26ca36015
+Output.9 = 4dcc5878eab932e2cf2c51afd43f101ff75153aeb9964a653eb9bc01715e1326ee3cd4dc590ae7fdc639ed9e01dffc3b1111258cd5342ad5acf43418910a3c4e
+Entropy.10 = bf241ad79251ed64c9c692e09db7ec33846cae82b0cafeddcdc9ea3c218a91ba
+AdditionalInputA.10 = 471019cdb49966cb96cf050985be39ebcb9818f7f87d881dcf4e7245fdd345e1
+AdditionalInputB.10 = 4831481864045be276508219a619a039e22ff26aea3f3e5ac4f766f2dc3a1470
+Output.10 = b8de52f6651ec168b4d0b5ffe0a46ec4366531b2cc97017398c5688c277dbea7dbcdff622f79f9014e3f64a13d3dc85372477fc32354362f18f8f90a351b485b
+Entropy.11 = 6caa44f944c888aad0a36f82800086ef8cb73ad7ca631e2423a70a8f83e040ed
+AdditionalInputA.11 = aad93808cc9048aed8b0e9bb6242f42886b7fbac2c4ac11dbc834ad1f8768dd3
+AdditionalInputB.11 = 59eaf7235fd54e516d18c34ee974464c0c93c9e94462b0d3786eac4650df2ef0
+Output.11 = c0a27e1bc27fabbb1c1ae2a5eaac925ea98b77a849b94bc11844cd8eac815dd253a081023356c5539c7e45322a12517061dd86adcfc33fe3c393864b2bfc84d2
+Entropy.12 = 5fc8906e14b16c9e2ef1e7f81c47b3683aec26548155445f0dda333b45b34c77
+AdditionalInputA.12 = c97dbf3a29b209cdc4d31dd9ec7dd1f427ce4be014a560654ddea51ea9655957
+AdditionalInputB.12 = 4a0d7464ff8742b3ebd64874d1362d44e0ddce28630d56f061e544f4964b03e2
+Output.12 = e917b843e5356a03f4cf27cba477d0b3d9293a2e6339f3e277b13e0ca9b3a9d16de381a907418d33726faf078b6c943f2c0cc0b730f56e54de4c74bdd051d7ac
+Entropy.13 = 75bcab2ccaa29070d41ea989dc1ba2259511665ebe81027fa2097d69fe2adeec
+AdditionalInputA.13 = 7829dce76e1d8700fa46ec3e8046036fdfaf6d36c2dee59f6cd9740adf94a3c3
+AdditionalInputB.13 = 037a8ff905d34ee2c69102a3e990b1780d49e79acd1f2a60104232cc020f3855
+Output.13 = a6278fb01d3f1d5c259922c9f3af41075c7728f34aeb41b7a63516db50d3f4ad2338fbe45ce810fb3721a4f455f42e0113c56f0ff9709df714ebb8a4a298e725
+Entropy.14 = 058730b72564965e802aa3792a7db262d94d4f10f9098a86300edf8bce91c2ab
+AdditionalInputA.14 = 534589895777f502aa3712aeed8013d343a824584774d92f9b0668201d562489
+AdditionalInputB.14 = a97742c1e0c816626e67ebc81ba3987378499b75212b194bb56a6746029866b0
+Output.14 = 8057f97b49700edc8ebf7bbc798e6eae639a443e4c8e935cd06ebf9e9bdb803cd3121a0602b32f088e7906abaa68b28b942e84bb09d13d565490d20295c520a6
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = c455c4670137c65c0c5821015e785f848871f98f57e5563142f015223cd39523
+PersonalisationString.0 = 3ed6375b5b582381c05eb9a9f40fef0d9dc5dbe3b4af3c9d1549e62e75617edc
+Output.0 = 18217c3aff49740e0930bf33b4aefd4220c5b77cf3b245fdff3f570a460a59b99f52e96566c0d6fddd37e4cee060319a14c2f3394ef0d429be5415925f18851c
+Entropy.1 = 38e0e5f882b54eb0f82085ed0177de9fac81501f95bb9b59563820dba65db320
+PersonalisationString.1 = 1bce1140bad45a5edd24f01a5de1e2f85808e1618a3478c13c79e685eb7b8994
+Output.1 = aa88e2db425f799af15db9ef26164f62e906e942e5ed5210c7d22545326c297bea0e6a0972038e4c33fb15479f68b01efb0bae77829cd1b29fe9c86a64e33f67
+Entropy.2 = 9b5e7e5f424bdd719879f828577897da330d5acfb0e000e7c5a4c57dd639ea8c
+PersonalisationString.2 = ece4f71c95876ca7ef405af42a3a56e33d585f8a732157ae50c5f46a30ee89b3
+Output.2 = 1ef794cbe0455cf767b5a89360e8ceed861d437c64aade0ff4bb51c228a366feaa2919958a72bf2cf2bb0a3a72b32390613eebb30f544ef12abade70a290e984
+Entropy.3 = a1eae67263a8ed5e5b446ebb463df9c97232297d41df8aae4b2b2695aa5d75e0
+PersonalisationString.3 = 5695c8988ece974ec41c57ea4559a10b4e81429d59f50aa172cc5e428b5a7d3b
+Output.3 = a4e48a8229e93d4cea558353e1287a05cb4be8e345f64249694d85cceb060f4f60e35c7213c8bd6e540af1ef48e06f7835ce8292359f24eacda1f825bc5bc986
+Entropy.4 = 422db7fa67034d9b77a664319f3a9dbe1e9c9664ca7c9b3acd8d47a834fccc2f
+PersonalisationString.4 = 95ce4f754ea4405954fc055fbb8b7e9a6b2517ef97bcccfcb39aee8e9f7a342f
+Output.4 = 998f5b9e2dace24a465fdfd02628fadaddfb428d7ac50cd03503aae7779fca701823f2e05d1be3e6e0d661cd57cbf5da8e08a641b0018e56d757974d40fe25e4
+Entropy.5 = e5b2f82daf263b34b8c21bdff110372add43c7d8d0e82c22c8fbb444da61d9c4
+PersonalisationString.5 = 19113523556c74a7bb31328098eaa25ac8b42c47805247a016ae2cdd9139f5bf
+Output.5 = b3b8ab1d480e6123bfaa85f526dd8a8db10bf0c4a82e3b09ed733025b19c08e49fa32a9a6e8d5207c5abcc9dcf5e36662819dd6a503088f0d18e48ba8d71f53f
+Entropy.6 = c082657da3a66b0ab17c6479276aecbb6798f0cc791af2e9713d2b7a90454fa6
+PersonalisationString.6 = 336bcb3a623733f62eaea970229cb426f617a2ca77a68586589118842c9f315f
+Output.6 = bba337dcc4efa6c1e0b24bad11f923080544bd6d58f79ea0592327be33b05304b197a6770f9d2c1747c32c792f80d7b0488b6cf8496048d4e4d5c6051bbd06f9
+Entropy.7 = 207c2e64e908f30f83d35d2a1e783041fbab4a8e1a19dab700f302031158a26b
+PersonalisationString.7 = 7bc5cf5c525a3d06191513534195b97c89686484bf0492e08a18e4e1b9991556
+Output.7 = b0761b36a7d5d5b47a72e5dafff31da8ac15eed077995743922df4dc1102c7e9b64db6585735f011a76a378d8a7fff8eda0f0a13605425e344bb5027a23c2384
+Entropy.8 = f2d91776695a5002aa8663540f329ad7240a4a1b1e7dfc8919ca0e83145da09b
+PersonalisationString.8 = 80c0306c1fc4a56b7cf85c0665d07dcf77610553d3beb4cff45593240a986316
+Output.8 = 102623f258d27fe274d0bee76f6cc20a7904f7c8a1991dff15b55baa92f18947bcd400414b280377b37a1d131407343a87f10a42bd60010ad7b8580a4980df14
+Entropy.9 = 73456df4ea33f09315f5527fddb27f195fa62298d298f6ca5f4023758f35ebbf
+PersonalisationString.9 = 5bdc817975a62415ad3227c3ef89060998fc9130b3008c7bb98307c964c56319
+Output.9 = fc88671d758334f28d97c4346079baf80a3ac51919d5b247670073199c89afc8fbda221937c06a78d3663e6794e6643c4f4a782879cada5c765bf6b7bdf00a8b
+Entropy.10 = fe4832c493c53655859c05d0501eb0015610c425769c9b66fffb1363ab8cf859
+PersonalisationString.10 = 6540ebccadf8328b7b4a34c32b7f01f981889037d045159a379be9ccd6800e33
+Output.10 = a85b868b920b7a24cde0b8c8bd656438e6113e7eb31af16f636135f91b5287d4be39e4acca8cacf21b3d7ff517ebf6f9ffd39799ff489b5dac628e24c223635a
+Entropy.11 = 472f8ad0428aa5a5b6336228f8839be661921eb7f5c7ec2406ec4f747ba48e68
+PersonalisationString.11 = 46b3b7b9cfedd09f4a51eabd0b5400cfe5ebf15a5ff386506c13d655f5910e91
+Output.11 = d9af4c4124b88c0e76921f797e0cd312f238de7caaf809a10bc0df9090b21325f752309d9aa6bb2c6fc50d40f49ce0a1595c0dea0fd2ca9c1f3f910e038a5582
+Entropy.12 = e22c61bee83339fa8f72b0191ca5cd1356d91275d374f040145e96ae450e6a9b
+PersonalisationString.12 = e54ae2d8a4cd7e614fe7782cf96fce0233111e2da34829826f7be84c17744aba
+Output.12 = 3710390940f641c99f032c1a1b9addf6bb91ebc4ab278f7a1eafa86092b55b52b9721f4b5ea3793b4cfb4ba8bdb49429331ac7f17c66a4771b29fa2ff0e13909
+Entropy.13 = f851b7ecef38422b437d4dbdd63a1186a15b3bace8508a2a81d5cacc5ac5a968
+PersonalisationString.13 = 83e4315a6c4cfa9852c91069a9a1c9140ad67fe93ee3633e27937f78fc8a11a1
+Output.13 = d1a412cc86f79ae7c479cfed8590f310e22a688451b60aa8630fc8c2b1ee0f94806f75975c29dce0e36854fa7b8604c5f54db9f69c8e1978472d5081ec7e1553
+Entropy.14 = 315bbe530ecfa44eb27250f6d20f4b6c648e42c61f6faed6fe483f26f6f8427f
+PersonalisationString.14 = efa10fa5bc1e445c031620ebb37e7552c2dfa08307dfe53c1b8e74ec55050356
+Output.14 = c592d9e7b67415d09dfc46d3039b3afc1ce66afa98e8793437cfcb5ab3a122c636f0a84edc04099d3819d7fa30d196880d9199de17f7170de725f3650ef34b19
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-128-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b4c740b2f8f2b714ccdb8c58b9760dc6c75dc4645427f3d4241313da2643064b
+PersonalisationString.0 = d1b21b78ca312c96cff673f08c4bc78b068522c601f53941046d9aaee0f42898
+AdditionalInputA.0 = 8c16ff82bd60f92c737c77836f7c663ac9739d3e74d1cf5f1735227d832bc0e8
+AdditionalInputB.0 = 13fa8e83c9e9a55822d9fef7e69f7cd048036b75df0cac04a28156d2986a19a1
+Output.0 = 4d73d7b751d90959cf096360525947c2cb54565f241acabd77bc16d9189f70b76b58fda71200b0b4902d1006778dd1ba763b03fbcad6e60516221fd84ad234fc
+Entropy.1 = 632108976c11a90e030e4c6cb15d56bd79ed3a94424161093dcaca093b0513a3
+PersonalisationString.1 = 96f9c25076379a4d52ab9e6cc62c7acd3291e38858aff98f8c52fbdbcc4c5fef
+AdditionalInputA.1 = 4e8d8fef9e5cae9f8ea232f801210871a2b4cbf11b75ea11acd7a101faee756f
+AdditionalInputB.1 = 419f717f34249a0bb9a81b273f528c2a46007f3def9fbcd29689cf2510526347
+Output.1 = fe0fbb5504c5bbe4e4bea2c5913b90551978771cf319982d7eb7b76a644902ef9112d9397c9c784e33a17cd592e924a87ddeb517ff75283ddd9b25b316d75f8b
+Entropy.2 = cad4373eb18bf4914f097374ff2098789b05a04a9d1bf6f5db95710808de96c0
+PersonalisationString.2 = ca2400aee498a71face734512a43fffb89e74cf818ee5b2b017cf8b74aa71696
+AdditionalInputA.2 = 430b47540c771f708615d2a52e9f2a167e5b08142117833287d5ff0e39fb4498
+AdditionalInputB.2 = 474a3dfe1c1049385567b96eb99270930f1181e37d5e37d1d0495b985bf15db7
+Output.2 = 176279959feeb26ece7e3b830a2bb14feebb0bccfd2f4c75d1e1e830b3d782ddcaf95dfe3d5c4d3cd2b1e671505da3f617c5e02a804da2ac4842e86a37901bc9
+Entropy.3 = a80c79d310abec8ae33b0d370922ea2fed110a40e1b74bcc17f7cca3fc261137
+PersonalisationString.3 = bb891b0cb5d002afa509abffcaeb7b18b5966efb435d139e792eb302b1089a67
+AdditionalInputA.3 = a9c916c2d668fa112f2a43b22d1431cade795ecc340021d29f4a4aa972046961
+AdditionalInputB.3 = b2db3f33b6b5e48b3059696179f478cf539a60038def7fc7d99baa4f867f8dea
+Output.3 = 6be87af744debf0bda8aea3d9a761431eb25b7f4fda2bfe0b6d3542c5c664c80299c5c53f32c018b3eac9aa7fbbad4b01c1f3bad0b8c71b07185c80da8f19ada
+Entropy.4 = 5dbba4e2fdffc95518dccba9fb685d40d6f954f93041159cb01be82af5a70ee0
+PersonalisationString.4 = 2a4c1858d98f466b7e51f9e2d0fe3479a940e6155d33f40f4c0090b871d4c8fd
+AdditionalInputA.4 = 2a54c52f8457c3719ddbb90f31df492387335a24e1756bdd187737f9f43309d2
+AdditionalInputB.4 = fcd084e2f37779ab828db92ef64db4088bfa66daf162c962fa9ddd1243c1274e
+Output.4 = ad0a661c1e5c3f446420c0761f34feb412ace4a37c2cdbe3647927b10ca5e76890c8bac10a98befb1bc0d0ab78abd6bef588e63c910d76c9f1bd40b8be353f3d
+Entropy.5 = b0673acaef01001810458e7e3bf7386ffab4948a681a0a34cae58e9ec3edf6ca
+PersonalisationString.5 = eb85b21d4cf1171c22f2e5b4573b036f6b63763e9fb1867c7eac3c4d0199b109
+AdditionalInputA.5 = abda36991339040023222e2f38f9e51de33d8e613ee5dc2adc2d9cd287122fc2
+AdditionalInputB.5 = c27e5899bd61fa085b1f02f74112543ffeb354b66c005b37f46583679bdd5f07
+Output.5 = 3f412cba598fac33bf9e0017691ff4b71900475b31155984bb6cee491d3b65f7c17122dfe23a26e169a16fe991ba128847dd2db9e644e9c60bb5524613f3776c
+Entropy.6 = d8ad4c5808cfe0d95629af69a998db8df87c176b8128cb1cf822cd7a35f536e4
+PersonalisationString.6 = 6dff97100ca53e51e981351388ba48f2b858d2f20c2d60f860db4201a9902c11
+AdditionalInputA.6 = 439eb8eb1001e1c98d55fc69996e176d30c2b55d40e0ce3a4e40ffed6fb9f548
+AdditionalInputB.6 = aef577dcd698ba8eed6f7a8f7563a7c1c0a153ce836b2f6bb24b3cef81c20343
+Output.6 = 049c36ad784d2c3fe0093513b29648eb8f43bea919f2f526197f9914be45e163e87ed1cfcf88ef162cdf587ae22fbe087442258b9c4e07683e005d9634736103
+Entropy.7 = ff0ab69db9fc3948353acf8bde34b8842b571694ed10e2adfe616ba16273ce88
+PersonalisationString.7 = 3d6a74d692c90cc771d3ec374aca83bba7e315331fde42dd7356d16166514736
+AdditionalInputA.7 = 7bf52330ec8179aea2c27f1c5f675066d1340773fb4d5bb3179a382b6c7ba039
+AdditionalInputB.7 = ee1cae7f1c94048b75bf78ceaff632d2184d724091b4572aba23e8af32568a5a
+Output.7 = 737cb985f82f303a76325bda0d80a5abc545d25466822f195cdf58ae8c988d344f3564ef75e4de37eab31239b72f66e317452bcdfa42fcab3b1e20794a12c0ad
+Entropy.8 = 436416caa8a546fa5ca8e037a85c7c6e2ff75eed0f8398221efbc026a9b5c3d1
+PersonalisationString.8 = af105dab2516aac29005e21fcfd81cde713780dadb368bbf70eaa001c524a841
+AdditionalInputA.8 = 4cba4a6fd0538f150d7702b42107f0c3ac396300f21b651c2d3b3c40946bd310
+AdditionalInputB.8 = 723c7d85cb1fd5a1cd184d0c8539c1e57415c8f37eab76414d5849fc00a45c21
+Output.8 = 40888d839585cce46642cfc4642c1707da64baa67d67250c5538e9896c98ed0f35dc9bc04cdb3495108bbeb4de814a115b374ea469f019848aa1c236a8c364db
+Entropy.9 = b33758e305471b87464efd412a46d725ae5b122acbff2eec04274c60b4db7fe9
+PersonalisationString.9 = 0742ec33d5709b95ba5ffa4d75cc81a8d5c79d7041ff81c9af85f728047454a5
+AdditionalInputA.9 = bc731fdab1fe4584cfc4d261fcee0b0229ec961af20cfd14069a1fff48736c28
+AdditionalInputB.9 = 2ce2ff0bc7c3796660806adcfb3e495f9b1fb94d6452b84437cb972cdd48c9db
+Output.9 = 9c6fddf4d8fda2641153464994892316d4c574badded6466a5535e3629e042be35c6f01bb230708f934b5260d0e31d33a71170287f148bed2beb6abd57e1e2a2
+Entropy.10 = 2856ac3cffae8f23575a1021f1b39365b671ab4ccfbfb9396ec0f1ade261e1fb
+PersonalisationString.10 = a810445697e505ac0a9edf58ceb3a0889530e9c7757a2b8be88c52c81dfb0d32
+AdditionalInputA.10 = e1f3958354c66a0cd1c0ac4ca8648524b75bbb6773c9a751ec9dc92957420084
+AdditionalInputB.10 = 8f3bb313c35666abbe279b2ec45da5cd41c40f3d9389f478d7a223cf73839b71
+Output.10 = 048e37f43f1fe878a9add9aaee37712297d9d3c46265b22721eb507c601a52ae54952f880caef6ea5c5dded8c8d7f09418caf324ffa4fd99cbec484a79896c7e
+Entropy.11 = 8085bc19cc02558e7e704bca1a79de7d532a9f85fd650b8614b4d0bf031727d1
+PersonalisationString.11 = 66ec26ed7c8a1689d1460d06875d7ddba2dee5d8edc509b98c972a65ab90b72c
+AdditionalInputA.11 = db506e35730e4f5faa689fd15b8851dc4dbfcf64b84fc0fb3dc1390b3a867655
+AdditionalInputB.11 = e19906f20b4322fdb4cbf1a51ca8269335edd720e13d79e917b3db0e04de7b7a
+Output.11 = 4a01e86a5f0552d4f20c273391533ffb238381243001cd34dc011b2f83cc79a6eb85072410e83746e8318cceb292b6103d8300854a73b34b9701a526b1e14cc9
+Entropy.12 = 475458928a2cf4de752968a76bb70a00eb4fc105aecaa29c6859bd6a50168a52
+PersonalisationString.12 = 712e5294b54bbdf8923654660b1b6e0e6640f398812eeb0016da4f26598aaadd
+AdditionalInputA.12 = e4ce3c5792fc12e96732b4fae9918c132eb3af4142cddb96c8a2448458ba7ca5
+AdditionalInputB.12 = 0a8495e975bffc3eec8e71ddc934db19f2d15750cb4a0bb2ab129fcb7da2b37b
+Output.12 = 1016ba860dc60b59e12b64efd78a30e4d3f0af5faae6e45884c185fee0315dafdb98d244cf6c3ab8d62d8d3d015af53dc6f0c25d0c254801ff600fa4e8cd08d3
+Entropy.13 = 9d6b6fad86a5a528cbd346949e8541e39c62a234413b150c3b6e3cf5251857f5
+PersonalisationString.13 = ce19851bb5c72acdf860952de605227e81803d44485fbd00ff87cc80eb1758b9
+AdditionalInputA.13 = 3950a89ac6cf27d82642ef054a5aeb9f93105684cde4acd289946360de787a4f
+AdditionalInputB.13 = 67c83a5cac25d28b8b16e8b9b4fa7d09d976573420bfb092fef79fc4b6e83110
+Output.13 = 1998dd0133701743ff6cbafd05190193ef6504dfc5ee8f8fb314776b6567ca84830d2ed315d6b504b8ab80e72cd73b09180e0b6f9f19497b72e9cd6b6abd0677
+Entropy.14 = 22546044df54e2bfe7469318c57c159d0f25a58bcf4fbe70ae214b669b2e6314
+PersonalisationString.14 = 28cf3ca7df24cd72704cc73b4a618cadb6ac93f2168c479c358de1907c0a0c82
+AdditionalInputA.14 = 36551ef09232d2199547aaefecaaad217443d616433d9d169bd8cd3eae7f91e2
+AdditionalInputB.14 = 9e57a4e96ace483dbc3c226d2723c9258063278140d220c4fd023c77fb20b84c
+Output.14 = ca43dcecdab689549bc4493a38a6a017f6048270e5d70d0d7576a2ab764d922bc346e30f42dc5a73ea6a210d2eba9bee5b5afe3c66867a68ab3fe0d08f511101
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f1ef7eb311c850e189be229df7e6d68f1795aa8e21d93504e75abe78f041395873540386812a9a2a
+Output.0 = 6bb0aa5b4b97ee83765736ad0e9068dfef0ccfc93b71c1d3425302ef7ba4635ffc09981d262177e208a7ec90a557b6d76112d56c40893892c3034835036d7a69
+Entropy.1 = 818d5b460cf0e18faf2441c97eef12eba4eca4be95a277c4f7ca904da1981cb905a290601db8b677
+Output.1 = 6fd75498e5f38c40e72a0a3c2e2247ca133931bfed4237f0c9a19f6bbf6ab8381f9271337f6de6af53d7d5f67257fce6bc8e602af8b9844f043c78f2d24e4ffb
+Entropy.2 = e45dc4113f01b589e503e7c58f6a7c910d8a3458b71fb322bbbfee175e15060b278ae692fb39d46e
+Output.2 = 65c696c8cd524977eaef54b5f7596f84d9681efc7fee5a41c1479c04b18175e2ec0296c9777ce460ebb6e2c5063031420258391c70f5926be115035dd95155bb
+Entropy.3 = 6f1cce67d7b6374d3c0f084bcad9dbd45d6e50b989891a5782719a7ba0a9c3c21f06773e767a9731
+Output.3 = 619d8d8a1213f35660885de1eef592869aea27a61e791a0cb4fa5a6839f4f2a7fe4de524c98f121b065248f2c3bde6509334eafebcd50e7721fd8080f50d00f7
+Entropy.4 = 40efaa49986aa90e98f3b84a7d212827d215af861563e4e2b7aefb8bb4f274848bd07af04dfbb998
+Output.4 = 44bab69429d19600a3103021667884918a455507da166ebe7cbe03bbad904938659a9a27df6ca4a167597e74b05a2ed30b926536b41d03aa68b3eab1f23315a7
+Entropy.5 = f2b9f37f53dde87a03f4184e9f250ee602b61c294ea3214d949f7b5564c962cbdc70a6f81ef66a5d
+Output.5 = b0409fc51b5d255d0b7a1fed2a60678b35c64df779d0cfba9543924e7552bc6d9bf46ecedcefe916016fb5dbd237a450f54068b14c67f473d8f6df082852b15b
+Entropy.6 = 7fbbba2845dde18c0bfa215f837059ccf477cecacb88452d61ca3be27b7dde5637c4853ed1c729df
+Output.6 = 05b6a36db24c069ef583514882451fcf3042f83063ec03b0dc83221c8f0dcea90f7692a88945c1d28fd6218a6757ae665a21d149b7bab496f6e1066ccf1fbdb7
+Entropy.7 = 2f85ae86c38a546897a82fd220496099c94b81a65a2bd5a2d6e66b1728efd5e2a99af850a17c089b
+Output.7 = 30b55d02b0fdcc1f375ce1f229f54e7cb891f3551ebd3c7473e6108f87655b8c10137e770ad5466c61c121dd489c2b8fe4506b0c90dd497e005288ff1a030052
+Entropy.8 = 15bd0f42ca57baeba44c71c69bbf299c5d8bc052c0d98429a0794f15d2c1c673018bf9e4e6b38a53
+Output.8 = 5e577180d6454e585c72572ea1451c28d0506ecdecc66f20f57b57d739d89384190f9e97ae0256cb6256d7703d3da0b11a0ac957580ae9a3cbb4fdb730ace63f
+Entropy.9 = a988285b9ea11ccc1437c519607093bc6aed41b509bbe00b700058437e8a52e90bb043cc67133a0d
+Output.9 = 949a6eedb842d9b65a496aa4b802f820234217c4834224fce9fbaa7211d07475f4c12e1db728925094de32b19b3ee0fb36cf00d5661379ca76f198faad7616ec
+Entropy.10 = d7d562d6c9cc960a49c0b7c851cdfd6f539561dcf184ef4c968e57f2acd72b432ef11df3e0a0bb19
+Output.10 = d8a6e57f2acb7b5ae99036382c83182262c155dbed020b5e8f3dd49666fec46a2022b18246ae992cbde978f4441d64396067ed031739a3302f156eb89392c767
+Entropy.11 = 07d99626938c9f30a99668d9688162baf3093c6fbfa783c99b9d929e4b3bd48eee1ab494a7d851aa
+Output.11 = 502e412596d18863ffd538bd3047a1d273e0526994f4eca5338bc31e41c5d6af273ae3092824a14c107166631b5a8a94cbf49a7fdf9cadc12cd14b31642e701f
+Entropy.12 = c549357429b42cb29b49f57c8ef877ca1cf1a43c0ba7e0c60e549352ae84308444e9e7035b494fce
+Output.12 = 5d341906e6876636d72c0e9c789d52ea6e827d10e4ae2c8eaf6b203c3a26c718c764608539c57f8c15819adab1b0bc3d9a132ff013781f22cee4b73addb50b96
+Entropy.13 = 2c7d6a54493ec7623886456231264d2580fc081ed0b97fa57320ef340340bad560164ef265629bec
+Output.13 = 20d734ab5611a39d6ccaf8941d254804c36ba8bf206bf10d82f721ba9548b9f7cc100f948aafe3f324ca4943783256641d5a1fb23fd60613fc0fbe30c9caa8fa
+Entropy.14 = 8dc5a9e8e9458f841dae788d24bb5fb192ef1ffaccd991f89f2b5d3ba57c1471612496c7d9cdd174
+Output.14 = fd74a7b15c9af2ea140a2d0e353c3387b389144dda5779c69f299917dfb19de6ad60dd440c14c010ca161436243bf9d33a6649339a3543b8e71789621da7ab7b
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b895b891f039052821fbb4a889fced861b96c37e36a5f4f7aa208a2bf33a896fe7e29f3f6cf0041f
+AdditionalInputA.0 = 8711df3931a9035905ebdf510b3ea3f344923b2f20a561709c0def03b9570be267e9765719a25d8a
+AdditionalInputB.0 = 03908b9fd56bad5a1645b688a4f9c2342bc0f81fed6f7449af14e92960d60127dda4e27487e77491
+Output.0 = 1385397b1a245bd06bbb4bcf651a52b2d30867d3e2f98e9c7a9ee959d2e1bbd63a10054fc081cd22a7f3b65ed2f0b3a3deb389d2f336e50b359a6c3e83667fb1
+Entropy.1 = 3d643ac8b8f2732b292861d082b231415fd67ee54f1ef5fdcd9dbfe70792d7d87781546d97e962f5
+AdditionalInputA.1 = 5ad6b5cd053b081750fd1a8e9b7059ac150ae4805033d001988b18cbbcab76d9a0d32b33a1ccd65f
+AdditionalInputB.1 = 7edd5d192698aa5bf4ee25daf86d8e50aa4bdb03bf043ee99e0956f15ebc8276f01d04ce144e97f3
+Output.1 = 6642704d9cf72cf608e82d32aec45366bd09b5bb1d71d99d43ae7b109c82186bca371c96a0d0d293d1e7ae45f3c750a5486acf30b82acd4922b1d5cc7e07f409
+Entropy.2 = b82abe82cd65e29403e83a051df46054527b85fae653dcdd5e1cda275946ff255307b0e4acd4f49e
+AdditionalInputA.2 = 22a39c8f9bab9667978fbb68f8f71d956485d767d9d52cfddc0ce186c2353351e8ff1f41e64fffb0
+AdditionalInputB.2 = 9975e992d78018a415b316fc54f025827270bc8fafad2d592cb672ad499e9446307bcee4d58debd1
+Output.2 = e374248587e53aaa597cef1febdb611befe7188aa6d6e4584e1e3e72029bd848ae56d41e8f6e73d8988d9427aaeb08e24e45e042cd1e41ef8d712a6619708876
+Entropy.3 = f9075a560189aedb89bdb85a9cb9ff3bcc615e9f7d3559a6b6cb143216d3480965c5665242770f82
+AdditionalInputA.3 = 9b903dedb0492c366322a53b74ffb29d2f46fd813e3c93da6d9ecae8a5798914b097f6f0bcf78125
+AdditionalInputB.3 = 2e45bd771a7765ef106dc32e74ab44f353487ba3c648a278afe73f5ae0e01ba510360a3c8a1e0a36
+Output.3 = b8c8866f5a165164fc66fb9ab9eb96b44f0dc369a6b56ebc6fa18696e0dd63762c5298b803de065c05dddb1fb7d8fd952020115030d91d14a1c0cdc243f899ee
+Entropy.4 = 11532ecd67c896e1843c3f9e414e99d865e3320880b8206dfbe9e2d23b1d02a039d6936dc47dcff7
+AdditionalInputA.4 = 88e22d8318f851bde6a59d8b24431cfafa45d7b03af137c5257311ee74aa1613edf7b3bb024d0352
+AdditionalInputB.4 = 8deb0d99a46872cb82544fe093e5e3e8e823ea2019ae400b3288b6d3b9511d37ce6eec979de43fe7
+Output.4 = a77ac4fa8e117043c284e67e85d5ab87c6fe5a09d6fb83d92b179bb4b0a2cc24abddef2da4c80e867ea2ff071290209213928638269ce4c85e4157ffcdff014c
+Entropy.5 = c2119453ce99f39d065d81c46a41e0ebbc2b97e4e6c4fed495836becbf7404310667f004b4f62433
+AdditionalInputA.5 = e858d3a3c273c1b2d5c615b1757aaf8e01aa38c01318b302700f5099e1e4cd1367ae746baacc33de
+AdditionalInputB.5 = f312cbf21257615339b396dc07ae88959e5b7e9a9737477683d800e3a6033844cc67f0c9a69e2fce
+Output.5 = ee06e9a224106e1d41dd12084ded2a9ee076c1e2b829f179732a7229aad5ebe3fcef34332ed93555d675c36c7db337fe6ad8ca3acf97aaf33631b72ad76a300a
+Entropy.6 = 78890ba4b48d48c1e070d96d9580c9b514bb7420a30257cfcf2d2895846e9e821bcbc63dacead90c
+AdditionalInputA.6 = 5a1a0b67bf74feb158e266d3f573f694ac20c89893229ac5297d5b0fc3122c9cc9851498d4db2516
+AdditionalInputB.6 = b9d7837aed4014c862c18f268596a02204e1aee49f1a29d5e87f05e8aca5be805100c30c16bd1a71
+Output.6 = 966adbe2d89e6635758e08026986c303e21149f6e1d962d17649ee43cb20819a136b42cd862c245d6a3573b191212092d0595c9bda6bcfcca794ce6bf8c926d8
+Entropy.7 = fc0f59ee833cf9fd1300bf1f77cde47b9432e912866ce8b3eccb3df91cf539668027fac38e0b805e
+AdditionalInputA.7 = 49267f0583ff8db1f97b97c1af0e64579f22722ed3153ba5057f0e155dafb7d7cc55a17d76e98973
+AdditionalInputB.7 = b459bbc353c479d52c1df5fbed653a14da092c4b9c33981d96178172e282f570ab59942e33472e23
+Output.7 = 2a47d57722c79bda6d54e288db36b2ade9b64498995e49eebc06f0f8f30a5fc62b354034f7e6987c930d2c4d1af3c6662f4fc109298da23687400f6bd9cb302a
+Entropy.8 = d8407e1d3174e0605d890813fe50c0383ed3d9d4bd05a373f89715881270bcacd6145694f7ed80f4
+AdditionalInputA.8 = ea1d2e1282244ee318f52789e3bbba484c33a2d85aff68dc602624e5aeff7d7707be6ef80ac674ef
+AdditionalInputB.8 = 328ef9e1b6eaab46746a46e6f5760ef23a6fb78e6c5b6632dc25faebc397813ca425da4e71a87535
+Output.8 = 3f6661a2fda17a4863587f59c0045880f4021818477b1c8365ec58e5b20589efaef8026f34eee08701fd512a799c3ed50ae72122c2cc3d3d274c5c3da308bfce
+Entropy.9 = d23b7bae798fcb9a689c3688ec69a51b27d468403de195a925eb5ae8ecf6ef1c69eecce1824f9c7f
+AdditionalInputA.9 = 418206c8d6cfde44fda2ff2b60ba44a42e116cbf343b3963d9849504a4b5b870ad71f4be3c0446e9
+AdditionalInputB.9 = e2b13786d5c40869b4d5afb9fa1a09c204a3a113db3f3cef9cecabeb96b95eed2d8cff11717a7767
+Output.9 = d4cf8c4c4d5d672bfd21faf1944043f295558aef43008ed7003ea0ba0fa7c5bb981e908d6c17b6d0a9d5a41d0d2b390b81cbd8e237ece7b8eb40ffa080fedd06
+Entropy.10 = 8d4e1c0f1849e5a6f003a2ab245ed5c0e68f2a5b643c288e6e3d8417d246b91326d9fecb56ec3408
+AdditionalInputA.10 = 6e0cb3fec63efe94e40500eb5803c014ec161198c55bd061abf723a38de643cc3baea30e31226558
+AdditionalInputB.10 = 391b8d09b60035edc7c632cada8b0de53fd1410e7b45a35a89d397d68090960ba7c52f565e858cc4
+Output.10 = 727d6d6731f73d80e5581299ac911d212d11341eadb7724a351a04635cca4eab5b023b3540417cf897e3f0a3fb91311e8f4b5a83c9b9854bb1b0cb0e38139899
+Entropy.11 = b641b10e3fb877698d6c85abd1f305a4858b9e5f8b78be714ff18b6c556137cebd94ef357d06d39e
+AdditionalInputA.11 = 091e039bfa7c41b87657c424f0d9bc5759e07ee51386cd20c817611c4f71c31e7dba1d06c2fd3c53
+AdditionalInputB.11 = 734aa51094d297e4cb8fccd5152c05d2fe252721499f0a519eff699a5288874d8dc86dbcf841e598
+Output.11 = d0c8e1c5d95e9e7996e4f018661f9b08a5d4bedf3a69c0c5df1824d4baa0a1fb14a12489340cf39a4c5080076e8ab940f7a528a564414d0b0e15fd6106a5c31f
+Entropy.12 = dd72bda9ee04f6dd9a567d651c6ddbf182f4d7b97faebf9725c251e649fbfcc2650d6419d572a442
+AdditionalInputA.12 = f108e9d7796db740c1729b16c0586c9459feab01390823a196f40680461d414fce0992155b2b3bd1
+AdditionalInputB.12 = f7238f4f4fd6328b6cd0aa35bbbc0c355d41e02aa629fb54eb22a6b45b39b372e57ca0958040996a
+Output.12 = 271efc67c3cc27b5eebf75cce65bf4791eb992ec24e535743bcf005ee0137ae6564af6181167ae7fff2cbd080e9265dfcc01e214c47d402b74b5e20382d21dfd
+Entropy.13 = a4889ec0ca942c8514c65125f3c3c688b0bbdfe87ab6a91ff75d4f07393e6b38e6423cc8f9e14e94
+AdditionalInputA.13 = d24e58d878240bb7c770d8b1b6e25f2b1ce1191e1fee7e44a26649ef58e5a2121d04837b9db42ae8
+AdditionalInputB.13 = 9f3cadb20c77e65724d85a37b0b976633581a1b8eb526e7ab795e8cffd1dbb83a056733206fe732a
+Output.13 = 5af36e4019d8fef1112562322a32d03d4992c5070177f7bd317b4aad034759341525e797b17f08feee8d166e461e9e77ac40c4642bfe7a53b91b1dbaca11eb83
+Entropy.14 = 091966c342667eafb6d3d2d07c23fab0a3f435d702293fcc2ccf8d2218f71132c2b970fd5c506fdf
+AdditionalInputA.14 = 79b75fe104f0d7c86bbe311585198f82350a13c4a7e450cfb86e440c00fc6f26a508e4bc73107e2c
+AdditionalInputB.14 = 6f20134564e79c7eb530727f5b649996c89d7bd54ebac095c19a162348fce468782f0324f2138c84
+Output.14 = d00f784a9613677023d27a4350efc4cc28f95a3928c4c8da67063ee59de5d2da13a3090f580e61fff1af27a8f4ba9418e07d856a996e836a89062064bac7a9cc
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d76697495add9baac8cfdf90e0a6f3381a52b2889f840a24cfc9606f97c49446202e70583fde09dc
+PersonalisationString.0 = d64e546523fb082b5e87bbe6b66a8e6a7940bb06ed17fe833c4e9bbb211396c227f83671c924240e
+Output.0 = 5693f68ec7a8d2631dee9d371503e05cbd5fb872506f040050b1d441a94bd74ec06f24c1cc4363ece1d8b2295e74389b6dd8b1e5438bceab2f2bc2af5a9d8da8
+Entropy.1 = c297f768f7ff4741876c90d3eb15600f11685f9b931e62ec580ac05dc8f122f6a7a05e09c94323ae
+PersonalisationString.1 = 0d47aa43ac1cc67a754b0a5afacdff9e784c9ecd184ad31b076574c56a48550bcd7d32b3e9b3a114
+Output.1 = 858c5420880d2d22c9a3d2270cc8fbfe2c7b53b21107b9e456e646157ee748fdafccd82815423fe618c445c810da9a323cdb95def48e8bcaf3b7281acd49422a
+Entropy.2 = bd7161db3282de2258eac2bb304002fcc96f87f996ae00e35be3d84fcb04835eb75f843e6799f7fd
+PersonalisationString.2 = 28b6db39360dd5b19d9f4b862a8bc5c0617ccf3c80d02cbce1bdf9b30e46647ef54f6b5ce3473e91
+Output.2 = cab89f54887169758c26fab0f833972d0c0781015b71eff1a2284605c7ed987552f0bcf17a5956cbbff1805284285d538bec14f414f3b2bc016bfac805db96f8
+Entropy.3 = 82f1c5eec1637ec6632bc96c8f709627561de6b56b885c121d4f820ed22c2114de9467150f0e9819
+PersonalisationString.3 = 0a6d1649ba340da7d79f6f098ba2284cf7f57b28725b2111755e36e7798c5b66794c8b109cd29971
+Output.3 = 2e338168abbaba95a587cdc6d9b11e8b555d8952655d6de4ed026b058237f5d7d02214ba0848e501c0a0b7e38f98ff32785cc529b0a26791831473d188b02487
+Entropy.4 = 9643df0b92d8cf957bb67ed86bdc020bbfaebf5340acd2f344919fd63af07575a0e01a8b5007494c
+PersonalisationString.4 = 8aa84e2a29ed39363a8010f732cde9c46e86314b6904d690a40e65c61386a26d9e9c8821ee68afa8
+Output.4 = 895c4995177afa56fc490037c23ef8307be1049da8a0ba329a25b489e5bd26b7d50c29dde0e79802a13c70264032ffad06bb91cba9cbd7df361f74bd8309aa8a
+Entropy.5 = 98b19535dcceb0a007dd62fe750be54d1e58f7ae75ac42919d6bd769da73f8e460b9d038953cc0dd
+PersonalisationString.5 = 8c4381f61b048c258c4b309e132e217be92e58f8c5a5dd15387afcfb10ab9fafded9c2d1ce4832c0
+Output.5 = 1456fddb09db4dd443f1be270cbe1feb7ea8ebddc87968b13c5d37e8eb515fd515ca5ad837c424389d0b60fb067020a4942d3d4b6f3ce1778b35420b9db1f8f3
+Entropy.6 = a674417c5b056b1a04719fac1012fc4264b8c4434786fbb3f3290dd3b2c62bba1d2188292a8a8230
+PersonalisationString.6 = 19aa3bbf148b8807a7b31ea8f0fa670c68517bb781d9bea546ce43a70774b9a815c3d6d5b64c1e27
+Output.6 = fef3f383728a868c90083ace7b41e9d055d287e10fad82c4ae3fece18b5ca67f29638839e241aec6daaa8cbf2630be42e73b243a5e697dd9036fa99d0ef330db
+Entropy.7 = de2298373140a3e3763022b6aa22500e74b0d8c1637f778e14240b2b23ff65d58eb3ef4243bc407b
+PersonalisationString.7 = 96fbc0e7519ff5e336ad3b52f9d02925eed5a5a2e05fa543d9aa3a103a48f05582023aa1c391c1c7
+Output.7 = 283a1b1f36cf5d654a9266a847f245985e8d40473e6c9efdcce1bae320184e1b81702ef04128888adfc5b142b8d0b1f2e6a171b8d1a07956192d671a9f5577e6
+Entropy.8 = 7bc92d092d7c0308331ca57a1e8ef13e92867e749dbe1bd70e822e3910d89770fd72322595402f6f
+PersonalisationString.8 = 745f6368ad6af8155a2d0326fc260803bd43d47e0d71ed6618f5fe8521798896e83ed1ace8c898f8
+Output.8 = e607d5977734498fb32d274204e3c788b199f3ecc6445afcea5a564d86afa58914f6ad36c45fcaec2fcb8b82560d81474ba3338ba47c1b7d94bf69b5cc553180
+Entropy.9 = af9e5567759f9f570a5ecfc1b21253034fec654e91365d9902585a1894d6b63344d95b6e88fd75b6
+PersonalisationString.9 = e6478631bdcd5219a516839195249cda75724fd6315ce395d210f435010094fa28d508cafefecbab
+Output.9 = 58a9eb363cde49d76c9efa45fcdc4d010292aa1f41309ebcd7bcb7764764cf1e39c3f25d640bddae78570fc696f0419c07a1979bc3cbffc4589f23bda896f617
+Entropy.10 = b1f692d24da2f9ed264f3fc1b23937198df71405bfc9a6ccf25ce3709de3b5334a0f885e2baea4d7
+PersonalisationString.10 = 2b7508f83bead900b04024dbf81aebc00e6a03c9b7d60d83b0766d3109630dff151df17975164912
+Output.10 = cc5b65b712d96e83172eb7e30a22acfcc9960a75a5f50408265b8bd85711f9b6c2ae08ab1f3312cc58acfff5f4901bcbbaf4bee08f2989f1324d91fc71dfb0f0
+Entropy.11 = 14fe15d35f4c97b6dde6f0c15e77486cf8d6d2164fd09349d83cb96b6b2b9a9c4eb7461172a92909
+PersonalisationString.11 = 5ba3986358b7308d24ac9f502ee1005b6a2a02cafc302b1af6961d10b7d3f52ba503379ce0b672c1
+Output.11 = fff148e0f577f973e8ed6e77bed7a9a5bc6ad2da48914513a2b4fc573b9909f4580868328771751815ce7d5a207260499c7690bf449796b167c9dfae4df24f86
+Entropy.12 = d6f49e526e35ff256162f17cc9faa912634f5ed9231a7a0af47d59766cd2bc83e8d438e70291b6b8
+PersonalisationString.12 = 02d1f3a6c20fb7c907ce6d822dc36b7ce17e1c71a307d1ec2406dfeb458fa0e8f27c1c39ae6dbc65
+Output.12 = 1f34b71b515b3e6aa67e45cac00d1d70e19c03b728d00013109b5d9811ee90eb7cf501c93265ce7f80a816c4d10a57250c082fc49850a2691520598084e34f07
+Entropy.13 = 53945c284c47140bc53f9088a5f0fd252e83ca50b78fd739e05452c50dcc39f215256d2de0dad0d9
+PersonalisationString.13 = 3761406105bf941fe1d98003db68d4132604ab59836b81ae1560abe0bf8f4dde22b6f4e98e5231f2
+Output.13 = 42b00b0bb3ee68446b1028c59a00909bd1dcf3ed67545652e4266e8ebb06408e40d20e2da94c3492d63e3327193d548133ade2b522de9fb0e23f41d5ee749124
+Entropy.14 = 0ac627692b28d31e347179c8ee9e508e2b3ffbedae4009414b3b72e76a3739f029278ad15dc1c945
+PersonalisationString.14 = 946fb7e5c3cbf3d198f19135b1a71a241ee892ac5a0316f57eae7076a4d99bf0e77fe23e81258cca
+Output.14 = 00007f407f75335a351d31d2754366f8f220ef2f9688a87e9d6aac59fa9f36be824b9bc7409ea991d3e0a7c411854b3701c84abdd7a696406dd13331e2785455
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 8db47ca284294daeb303e6459422e32577ca539c00fead8839d42946bad8eb30e489c6d858763a28
+PersonalisationString.0 = c2491a6ce1ef9bd13eb66a86c0f5be3d2f3239bf7f713e830e8ae8907a2084f873ed3f5eddf5b569
+AdditionalInputA.0 = e9a3f24180345a0c0680aacdb89ce7cf841c7ad547ef92dad54f8262445e2f0c54c8f8e42350f79c
+AdditionalInputB.0 = e2427b93738424c0fce14cb6c5f1d6b6a0532787157b6d907bc55d1c9a670494776212a643a9fb2c
+Output.0 = 494b1957ab382b382054f54bb62f0b5b464afb3b18492c60809c26e86e45b6b9fa44524dd89ecdca99c60e68ed107ff336be1591cadd6fd7e35f742611809f2e
+Entropy.1 = 09e7eb92da931219c1087336b7d8157c13fc4d9d649b56a49b30b038a1c8d0a42eb495f82c00144c
+PersonalisationString.1 = 20ec1e927133a2f39ef994e4f77537548fc68355d55491942cea33cebca759de516118716415b467
+AdditionalInputA.1 = 475b2bf5ecd1fe76d0da1981b075c490713ffb7b95733bb9da6b5ef515d53866e6dfd8abb0aa8462
+AdditionalInputB.1 = 93a3bfc0a80dc04ed1ae937cf07621c04e21b55add836afeec03b7125ea2e7ef3e06f421b8d7998c
+Output.1 = ac6806b5321f10b8a56bf3a8d348ddc73a3bc9985da716005777f6c1f81f946597af27bac016b630cfd9dc3ede7ff2a216c8fe1469e7d7242d161a4a2358235b
+Entropy.2 = 0e0ae6cc9edce468d90091a4d96dc3eea723df98b81614cbf29e1abd4757eb550855ee955b454fbe
+PersonalisationString.2 = c797584ddd4e66794e2288e16db05330c75cee8e4a6d8747274cbc76325df4f9df30f542391b9cbb
+AdditionalInputA.2 = 986a74e719d30477680660b65ac233002824f066ef83601c09e899a299cb3c5386b6f1e8c18b0877
+AdditionalInputB.2 = c3393321aacf823757dea39779ca9babbc733a55c59ccf130cbcf9922ca35dd28b0ec2ef11f1b474
+Output.2 = e95381d1002c7b5e94884f09cdea1f50606e2ca4b74c85bf79d6864fb46e4c08ab8ac3e584868a509859185b31ecf3314aaf47060822e491a6e87f9b16076b88
+Entropy.3 = e6577b326e6001640cc71e49972a8bfe78645e6dba9d29f845d79f350c7ecd90f34df8a74b70feab
+PersonalisationString.3 = afa80ba7e180ecad94de069484e7b8401b97b2bed9e8d9f300ab9b2109660d1f070eeadb5ea0c6f0
+AdditionalInputA.3 = 88ec9e476e65a6c424d0f250accb1785836b7c7b02867dbdd3cf9c0913cb11bf19e6a60a85d7e73a
+AdditionalInputB.3 = 61cc72c141a42f389ccf9c15ea31be87136444eb7dcf93871daca3c2aec35303cace86ff0c3c96b0
+Output.3 = 68cc047e83ea08bcbfb20f2c9f240507e4eaf2324d116c53c8761195ba255a51089851c4a531b402691ebfa4235a78863fa9d626956baa18570575a4d5031b85
+Entropy.4 = ed768d7ee7ee988be12a463e500640471b0f2141d54e38c9461c79a30b57c6983a398fd52ce039d0
+PersonalisationString.4 = aac56ff0a436b63a548e9a24410d61fc7c8ea0a607c90129851847623569b863b1267cc8fc3ef897
+AdditionalInputA.4 = 1fd614a777626fb43b2328eb67a632fa775fb8bf39ac610971b36b42d7bee6168119a3ddc7a9687a
+AdditionalInputB.4 = 49611c47da3dd57fa4ad966637e94da5195e9ee8ab7103e5febfa59b23fa0715785842f657e2102f
+Output.4 = 3683a7e4366429344550baa4e5278f0d9932c1658dd8b2d81f828c194c3310c3cbd7a21c9119af9b6088a41e1ac5928545ce5fe2ebdace32aa4fbb2070489a34
+Entropy.5 = 2c9ad8d0c4d28fc4be9b2749d284c48ddbd86a2ab471eed267ad80d0a6d35827bd90e8e99ae08af1
+PersonalisationString.5 = 0bf30ff811a1e15a6611a35597c3f348164adad4691273405f1f79e29cae8757b8a376f2daf665a4
+AdditionalInputA.5 = 1128599134847eb7e2d9541246768bbcc91182c857544a032b5bee56b062231fb6a00ff1530e4c5b
+AdditionalInputB.5 = 6222c64f81a900f197d7110223662efa50c0e1b5febf654ffdfba807c57376325e2c38b8fc32fd1b
+Output.5 = e0647dd7761f40ecd2d13195237041c06b1e921a7d07f1b04180ac47a99f27d17fbc4a3a50a1d1fd826a0e8489ac3867032a40517e1b5fd1e26ac81bdc8bf5c8
+Entropy.6 = 2377455bd34ac4cbf9c1f5a25aedb72bf3de725163735b06d938462c90156b9d5d003cd47d2e9189
+PersonalisationString.6 = 84e3205bcdb93c0a01aca386b0b48ab6046d913d3325c8c635ce02750537236579bfc75faa26bd34
+AdditionalInputA.6 = d350cbf526394a9b5925bb7ec8af62e3c2fc4433f671d1d7978e8b5ab4fcdd18ce972eb7d6058e2a
+AdditionalInputB.6 = 87f88d41095db3f468b332bd7f24e848299eae946d438d229edbea0355c8063d678131c945ee6f1b
+Output.6 = dccb3d652bd3583539091c6115996fb7563bae737f3f7edc0dbf729848ef606df09dc5e3c2b2a423668fc81ef0fea81207430ab3674d117a69810b2b0a92e7ee
+Entropy.7 = 80a1d18c87bb35edb93716c96c95779cbb24bd4f1b494cee3b4d3d3199f10b08f658cb2a08956b83
+PersonalisationString.7 = ee0afb9660088e66c588813a01a9da001b78be455c627a3720903ded5ae851d664e4bc3cf6b91b59
+AdditionalInputA.7 = a848726abbc0af04209fc524088f5bc53f1650d9ea140a72e043c3c7e107cae05fa2e0edeb8ead0d
+AdditionalInputB.7 = ad336869b2e22107060abe50f544b96c434307a645c03fd5722ff1168d518ff528d2f53c7c88b08f
+Output.7 = f25dd7eb2c7ab605c71bff4eb4924b05950570f54bd6ea6f85073393083e4fc404314a19a72f9ef51477d36b6613985ab02b68ac1d90cef80a9acd7765537a17
+Entropy.8 = 98dabfe2635c6f88f156a1b57d924939a8b58b5a9ab55d2a855bde869a9503891799c7a737d2c4ca
+PersonalisationString.8 = 91207a042e310d2d64e43dbdbaee9d04fe4927f3ae7216d31a09cd187b0e1bc9efbf6000ffbe8824
+AdditionalInputA.8 = 48de31d7d977e9c9984f3e03c471bf0a37bef7cd2ebeb8480847d0a4203d9d79330def0b257d41db
+AdditionalInputB.8 = 964c5b9e0e20884f5d56d5d26d0d4bcab0014c0f4752e5c8087be74b0d90fcf56e74d6ae0ebdb4bb
+Output.8 = b7b62ab285b50faa988695bbf06e19cfdb0ebbcc4b5303176b795526322f100e9087664df3e46e247e08b0d51fcf280bff7829cc2e46e36e10b8864337da8f5c
+Entropy.9 = 85f509f2ee6e8f964d9233dbf598756ec4147273fca082823b75e1acf774e2944e6fecd8da9fd782
+PersonalisationString.9 = 3e284fc7948742f98c612220fb47aeb24f387a46766f052475b328629cce3073f53edfd90a384e84
+AdditionalInputA.9 = a2e6c7d8dd2edbc5cd1f5a0db866149898695049a34f0a18868f2ecce8b270ef05dd4e40ad068138
+AdditionalInputB.9 = 12cc0a88f2e865d5beb563740162fc80dbb16a81627c17816ae681b1bbb7bcddb9b6c4e0de705f24
+Output.9 = b6423c53cae7a265b2d428247ce8fc0a6091138dc17e2f36423c590bb8b8e2ea2f3df417cf2d820d61355bf4316fe08f77830067c374eda50a92463bacd0ae7d
+Entropy.10 = f1de48ab29599b83bae0e27785f208fc31761d08c69f7e056c52d6595cfda8fbfc0e90966bf35dd5
+PersonalisationString.10 = 9adaad419c82ab7289ac28fa0e5a07845c28248cc8268fbe201847bee4191a43878d9df2781689f9
+AdditionalInputA.10 = c1c3bdd081ed9958b1e7eda752e14678f8190079dda04f042bddb20f79822d2e0c29c469cc0883ef
+AdditionalInputB.10 = 30cef732c1279febd857337e0f6c3bef92b248393e9c10795819a033e3218eec47758cfa889353ec
+Output.10 = 043771a5ac3833eacaa05bd6ff0dbcd48477070aec69d5c03f409db112f9f1c80e8c238d57becf7adb90024395313109db0829681d3a4207a25230a6291062f0
+Entropy.11 = 087669ed86c1b2776672786e6175abfab422adc4737cc8fb3976395d859ac7d37ec76e00a8112825
+PersonalisationString.11 = ba9abf3c499ada3b36569785dbe7db418322de1a32bcc403dfdc31c3b52f2cb57f900bdf15f38056
+AdditionalInputA.11 = 739e728d8e349bc74f2c82ec91131fa7ceeb5f9946814d676e82687bafca08e97da13f7247c68b4f
+AdditionalInputB.11 = 9f7e45f9019d469c9649ea3b88bb6550a04eabdfbc8c52eeccc1d92a8010b2b5f3646030604c9186
+Output.11 = 231cff0d4b977f7b1b6aa8c127a7c4c15c200505edf68565109f8eadc61e83eff8447c5cf634d7907a9edee57dcbbd38fad7b7c03d630735bfa5271f755c4011
+Entropy.12 = a67b1597db8e04c47c784c55d2d855c5f1da481bb93a604242c7f8cdb2d0febaedd9a7a1627a5286
+PersonalisationString.12 = fbaac170a11b0fac54ed4329f8982b2ca87f6e2f01e07434952039f16477e78cb462784613a6ff7c
+AdditionalInputA.12 = b16510cf03b141ec608982432a59b0c2a971682fe88fc288d5a09b64b0f8f338427e0f5f963e6492
+AdditionalInputB.12 = 6de941dc9ad632afe7aec75e906648aaf63794fa97bd8350e7564204cd6e0fe1ea5fa756d9aee37d
+Output.12 = c2a422498112e8e850ce43ce6ddbc3d15c6815b1f4a2330c84bcbfc3415e7fe02074446176c088a4b9a4c3e4ee55ecaa2db3980d9028d64fa8a6bbb51b8d2051
+Entropy.13 = 303637c037f712aa828a0d6ffb376513215db73d4bc45682a4c006168b70cd2eb3215943172777b5
+PersonalisationString.13 = 9cf5a18f1b2c2af96c63fdf2d65822537e907aa5e179e18897637b84bd9cb24f41fe01cdd31cec07
+AdditionalInputA.13 = 3c454628ff13a6050379b4d3a783bebd1a3001f70e0f20619f1d900e9eb152eac715d2779f165167
+AdditionalInputB.13 = 1693e93b42ad4108ef3caab6bd6987b1a7dc5f05968dd8ee6ffb2fc65c2516277ab42f7ef70669e3
+Output.13 = 39f0f221df9cf73cb48e3276f016507319f4537588f2c71fcb20e09ddfb19a9170cc3c8f76f349e1a9a053303d4c91195ded479e8bec7e4b9525414b38f90121
+Entropy.14 = 14b9c79622af2cb6bb65a8f0f61a8fc0e59f26dc69789e6eaee13f03ad306d93c7a35b9e69a2421c
+PersonalisationString.14 = b2e2517a5c1573800e3f5f3144a2c76f70bf4d36efd9e8626ad45e5cda7f009bfb6bde962a62610c
+AdditionalInputA.14 = 1564d70c91a7f72151a4483b9eba35b52c196656ff96875d7c59c6d116fffa3febf1860a3981d64b
+AdditionalInputB.14 = c2731fd38e65f8e724378ad4e01359512cb473dd9854fc2303e61c2d197caad69b12fde14aed66b6
+Output.14 = c68d3e5697f36c9db2535b05226aa118e00fdab95ca2cdbd37421298d46d2054e900b82ccb63227a23380e4a2e93327718cca3b9f5fc9c3949adabd723bd4313
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 0a3e45d92ca00e1f653e0f6b246ca6fcda826f3d7a8bc69373d1f458408bf2989985c89c2d039b4d
+Output.0 = 00eed860019b5a23b5d2f5a1e19cccf471f1ee35844501caf0b2efdddd69eed7147a0348b222b36e0ee38790afe3b9254b65fe9c09b90eec3369ff5c66634e0c
+Entropy.1 = 2c75f9243a85921c5db7ffdb7a27e5f68b71c176973b781ba16da14695bc4e814ea07bd2c7f42431
+Output.1 = 9ddf7e532f2e9f4bceb98173931def69a35f446ead44bde3176d8fb8170df6fe496b12e640b641810dcbea1a8442c503ce238939a0d199691dc9baafca4cd446
+Entropy.2 = e328e030bbb4b9ef5a7e91ec663e61a88fef4df9375a077889dafa7f19c878028e9dc429020c9ad9
+Output.2 = 1e5d479914f94bdf1994786b55ad0558318febd0caf254dc3b4470f2af01a6b18d01e093bfbe84807b7f28918aecdb8f0f5824dd9827bb7605bdbd81ee47e48f
+Entropy.3 = f60d85c88e8d61d67f8ab14dfd10e1da11f59c90fd8768adebb9a35bbe6ebea144b71f990a7f011f
+Output.3 = 4b66691288350633128597b245b2e9cc7efccd8472fdd0aab08edb0125b22b4ed8b33a502aca88c353b900e1c430875993aec14998a78847aa277dbb515ed60b
+Entropy.4 = 34ddfd1acbf348e17e7b5e133913a689cdc24e6d46801d70ccac49ec30d8c58fcc3aeb9f45700e05
+Output.4 = cb4e1f9c601370a23c78e7fc33dd619cb61742782b756c8cf979ae46a7d75158af706a03631dbf7b1711ccd6aae60e785fff42121ca756e8260075fc27c39043
+Entropy.5 = 00d970b93beecf7f9c64dacd11d4cebade39562422f0471467fc224ca370f465b769bb250249f21e
+Output.5 = c4d3b5d45a9b65e85288b77b780a6658df86227b8d3811bf710218b67a588b2b72e9545fc70acd7625d2c4b362725de45e833ef4b1e113f5ee59753db5ad74a0
+Entropy.6 = 2411495302fb00cbab99d1fb14df402c8e66d787dd527c4640a674cbf7ffd1967d7f69d2785dda01
+Output.6 = 679c8796919e10ce4466e7e449f765df821b06a97ac5b3c8f5a16fdc666f4b19ddda660bfcf78f5f5e39a6b6f26a2238c9aff69850cfaf6d8782851f62f18684
+Entropy.7 = f4e85ac5453f16ee6e268789e6f81ee67191f1fcc9c76ec3543630ac17713f70e00b6c54f63f9fe5
+Output.7 = c359fc26e88dc63411aba00aedcfbc928f702ab238a99bafe8dd30f38030e6d9a361b56ce34ce4230ea5751782f29382cc673badb1f6e7183b081804324540c0
+Entropy.8 = 97f86f7279a417ba7e655b8c8957626f255c8840ed0e7eacbfefcb3a6ee241e442461542075be972
+Output.8 = a58ab9adf43a2efa9ba092542360b547fd7755a9f58ccf953a5e92c8d14a81642e3d9f61a2143f3c950a89453ba58c399607cc3a452baa4d9a5f560139901cca
+Entropy.9 = 4a7e8752f866f6121538e48f845de5d4d9886be37c0583fcfc200adee06791a493c0571fb61846f6
+Output.9 = e706e2f59ccbb68abed162903333c7abc4144bc3f65a3c756ad6d0e4078d959d80840e1250fc691074adcb520375755c26d544a4afae3aed357be9eb244faeb1
+Entropy.10 = b2a02a26dec881672853eca2671cfba6115c4d5a6d39ad5573a29053e87fb57215e81957d9e5e30f
+Output.10 = 8720f73492c6d63f8e94a24c817574583d3bfe783b27df8eb6d7d30f2c65d6a0fb53173a4737f2ce305502850da8c3017850f704585d87860da1cfd50af2725d
+Entropy.11 = 9725599c6b246e22fb81cf9e4680e10f0b5f0840d841f99a6faefed987063b249dab1cda59642aeb
+Output.11 = 19515eac644a70619a17249d618dad875a294cb3e59ac8dc736aa722bdf71c6e6aad538e85cdb077185f4032e18dbff43b9149935b0838bf9e2c0842730387aa
+Entropy.12 = d53567fd91ff24e8565a79fdf7f81516261f03bd7e5a45afd50c7abdc8630b452eace649e418a687
+Output.12 = 064fa6a52c4a5e89f4b4d0436624fd403e849c10f2c0778f5d81c79a719d1b4b6800d9cf1d6019b57ef2a9e36047ef47379553fff54db4fba046b19df7890c26
+Entropy.13 = 3f8805f45c57455fcddaad8388543ce369f0e357a62bbe40b04a199061514638dc51409b9e4aca6d
+Output.13 = ba6649f527ef2d09cacf926d81abd456d4b43800dbf77de69bb9e2229cb6e3ac29c7c3d6b5f722d6d6693bdc99d0f9affa7885041819cd43e307f8aa418fc31c
+Entropy.14 = 62efa359ebd31d3c499353a5ab5f3b70a34c5f39c508231eae5f3ee20e17834b88fb804a32a268a1
+Output.14 = 20dbd757317220a9a5b2394b495efe5e12cc7b759c877bfeed6425cd64146ee90c455c50b2243972b43015f69a015f1a4953e84a089d38171f9a6fd47b8d4870
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5cd09f684e1fffa89f003a00955401f0c1c615da99c19123d9f23665c3f114f9c39d958cf762098b
+AdditionalInputA.0 = c7cc6f2e9f885ab5ad8ce924c9509eab89750321cbb572b280df8ec6f5095f2b42a5585f75ceacc2
+AdditionalInputB.0 = ce46b53d21b88e4ec90fe5816081eac5504ddb8ad33415fdf82ac6b97ba04af5213f3e1530b34cac
+Output.0 = e0ab1d4e2221027f91748436df0e290e6d2ab8c0dbfaf638f9755f2a2cf89158d465facdff74303f0b6485b2e609c309d765bbed7ecfb3c53410c6227336c698
+Entropy.1 = 967d1c602ea0aced53714a314d877cfea4b552ea2aacdef9faffa1f543c79f2ff6c060e861146efd
+AdditionalInputA.1 = 9fcd6e0dbfefd85781771f58677726a5be9a1460bd7c157ff4d60287bfd250f50d3c7a2574d4b859
+AdditionalInputB.1 = 8f734f57d49384b477a5d18dc2e2961fa5e555334fe930975cee93b6b38ebc7eaffa4380db65dd2b
+Output.1 = 1d801c5e3cdc15a5b6f6fc6989cdc6700ff003f7c7e301c57ce9e0d21dbbe58ce3dfd4bf461f5cbbe662fb8bd869a69ba0fa1cd3956d8ef6f19c058f0f978c85
+Entropy.2 = 4ba574b52463fbb3fe7e52a6b3cb80a552d2c0d6be81dec6fba12050ca6fca258a9ad54e88c49d92
+AdditionalInputA.2 = cba4034b3cf98fa66e5b00adda6fca44b05a7925e8ae1a21fa51bb110f1c9ec49a15c6550bbf960c
+AdditionalInputB.2 = e7e81a90ee931063860349b8797e29861efd6938c13e04002803f8fbea2f71533ebc24baaa8a9874
+Output.2 = a412207da8b856d66294d550dfeada328bddd1eda451eb0393b98e0969996293881bb767d011143c0a6d3048a835345be31eaf3da3e2665aa6e4bb2dfd35d66b
+Entropy.3 = 6ada670ae24bc53a238da58167922230721513b335f6b196098d36f6574f969c8d57c2281292b8b2
+AdditionalInputA.3 = 5e243e2f7fea659bd051dcd5095f7d1263ed80e9f32bc768266dbbd436bc8165cbc041697669defc
+AdditionalInputB.3 = 5a35f0aeafc5bf88f01979c6aa54eba10fcd17c3bf040dfed54a0cdf49cc1e88530094873c4366d6
+Output.3 = 922f07f59edfd5b6a36d4437753aa1b43090f0649c639673e0289baaf1aaec57306fc4f419697f21561873d1e428e4883743cad535e3f563bf1295e138c7d0a5
+Entropy.4 = 8b0663d71630ab64966b92a6ee7bf94b077fbe558988a50ee803276d838baf9aec73419269daa064
+AdditionalInputA.4 = 4782c2d4ef377d3698da710d75fc83f4b2448a79539f5d6552f730d23e47f49890d97bbb4caf303d
+AdditionalInputB.4 = 08cda2b639db419083ac9cd251adf41e754f1fc7ad0d73bf4a544cff1b8e5b4162d82d953df349a7
+Output.4 = 26e9dda585006c71cf9040ad2b1e54c9a8d0bc94ea84716bb49da1e47a910a6b5608a782651e3f388e7a2539a84d276cda5fd9c45cabbd026df5e1295d03fd5e
+Entropy.5 = 489364b057d9dffce0de0e92bec48643a412b095b79b611e799f57889a4b0081d6984b8360b6ca02
+AdditionalInputA.5 = dead848d39a2c0957335d5357ed5f9aaa43eecf036ed9a078ad7a946ba86c85a5f192f324f71c30d
+AdditionalInputB.5 = 84c6a7057ae6792ae9db18b429bfb65bff19c03b0384a6423743a6a2d5263e45aace0e5e6d53d88c
+Output.5 = 92742aa7dc8d76a8fc4a28d03fd11312d207e6b6b1dfeb166653112f58c3e39e0beb070b401397ab7d52e4b24dd5c390af5f36d44b7caa1a4e1b0dc1a8c974fd
+Entropy.6 = 1e64e3b4a3ddee0893687be2401bacb1b3dc1e140500f9aa70908c52c91b2c49f8d0d9c12cb84773
+AdditionalInputA.6 = 5358902905dcb0bc36999b65738b707f91226d142582d2b9d82379c07682b3a1e5419e32a8869d6f
+AdditionalInputB.6 = 0c32a5726dabab03307bff1be524c086200e855cf3ca7a78a5d61fdd62886abca7f8693816d226c0
+Output.6 = 2a3f0a6c581424d5761a32178f0e7662aacdbad739ce3f18cb5d04ba69dc75c545ab80735ae2d44a8e52ff3743db2de1534e55359202ec11deb067d91e7f0ae6
+Entropy.7 = e8dcf51adb2eff85a3be9cdd83c4cb3e4a450d2e363774240befa156803fa4e489b3249fdf94c706
+AdditionalInputA.7 = d8514908016a20acc54a98e8ee0903f62bd8df4d623c768fd6ee4384ff8419e82db7af124b496311
+AdditionalInputB.7 = 7634234f2e365e6b598dabbef4247fa2636f14952529c15d0a9a475a77530dde6394037f2b864bcc
+Output.7 = b8b51f717e973cc6f7361518a7dfb8f979e6aa7613215d3a72fffc0b805d654e1e81f43632acb7b1cacb9fe8ed5c29029e9acd7a397de83c90fb557531d9df37
+Entropy.8 = e718b5d8fb73260bf46f1d4b5044eb446930253fe69bc16e1c7387b326c24fd14eb57515e5394e88
+AdditionalInputA.8 = 978ca824c652dcd541aa5dbaf5f1c3167c1d020915e85a6c287aff4b1765804ab34925ebef77472d
+AdditionalInputB.8 = 3d594097d788699fb14b6926882f77b8387db9c4d943b70e341d738537c82f106eb45c25cd9b8831
+Output.8 = fcafc3d5967537b8ea3ace6da021d5cfbafe355659b9b5d14ced17e08f1f9c170c2cd945d6054da540efcb1c20e280ff602e436071ccce38474966d96f949f9b
+Entropy.9 = c85aa45acbc7cfd4099e3a79fb8c107cac253fbb171013912e36ae7318c30d4253099984167b83b8
+AdditionalInputA.9 = e343f33d7d305d36c974b5f13fbbb6a038a54b3dfc4c63d4bb35b9a1025363613afcb1e93f76eb25
+AdditionalInputB.9 = d3d9e198d9a1c71e124e470654ae8f8a4b0dffc5dc04815184c916b476cbb58e86ce40f31a090447
+Output.9 = e0547347024b75938486e46cef392d51936dc8e8350834ab9760d2d5fc44a67eeca4ccc66c88ac4a92ed748b778e55d861645126ae764f371a786b0a6b305800
+Entropy.10 = 9ba9f7511c1c6f06acd4a647eab822724339236a6e3f0fd26150c3a2127b49c6bee3b9c5b701d4b6
+AdditionalInputA.10 = c7d31bb61a454842a6b6636a387df96d163905a9bd2450251dbac9d99d858f222369ded39cba5fc6
+AdditionalInputB.10 = 832a615df5757a5a6a7847cfb67431f077f9cf28c597f1fc6d1fe90aca9bba616065d5cd013746c9
+Output.10 = 26304154a2198eebb79facab9a9672db809f2ea0ae3dac36928572a55caee0d6b6f32f17a931a6e7f096119ef317d1384d47ff8afa5c6eea31c6f028c70bc646
+Entropy.11 = 8beabdfbd4f5b16bdc4b94178026ed50cb1fc65dded218aeeaf558601bd7f5585f4858de7a98d4dd
+AdditionalInputA.11 = 1d95e1b5d077fc7d5d149755e2987abc2855daba34ecae5e8358124480460a2553803208d0151a53
+AdditionalInputB.11 = 73e6535bdaf079e4f1da57696c0a95c653ea7d738d4b52f01ee683189a6a3cf1cb22a328b9bc36ed
+Output.11 = 452a3a8fbb39121a5454769fa75b10de007a9ecc850b6aeae2318274ea3d1f91def59d58915e4339f8880da349ab962aa877ef00b826fee498b0629f3255a2a8
+Entropy.12 = ad730405c8a966f4d337fe0a2d3e27bb8933a79b201f0cb2c9432159d2cfd992d226eb1ead4e9973
+AdditionalInputA.12 = ef607d3c909c55be2fe87b1b72ee66332497afa394e3029022abbc0c2a9f752b8a9d5db8a386cd58
+AdditionalInputB.12 = 975525aa37a3cc6ae7ccad13f240bf4f65c10e2e8ada059af9b9167e0894cabb62e3a6b560f4c795
+Output.12 = f931824479ce47d21f073672fe81a37a17efedae5e87255c17d9796fc7cc789234f52b3a91643ac7f337828a776a242e1dedf01d99da9c6fa60093cbed5f7c61
+Entropy.13 = 7ab39caf3a9273f4297d93aebd0ae684004e667d21ce9f63f1490b491f60bb478d7173221df55b13
+AdditionalInputA.13 = 5ad54c7cae0c8055ed850c5b0da2d5d6dc899f10e9a7a30088e12a55386e96454aa272c127719ff5
+AdditionalInputB.13 = 9e79e2907c5240bab49700dce821c42d0189e0c6aaa20c656e83729651ccb49919a1cb0d4d9bbbbb
+Output.13 = ab40740150b0f8d3e3fbf3b55845a77e8f796bfff18842dc7c719d45af3c55c2a4fd2afc923dc79e99899c34b6b125d3ff7e5e789fdab7577440eb2c49e7555f
+Entropy.14 = 773444f54dc17a154bd31b69450a1397fe168f628c8013ce3a97a877d483c8c9797362114989131b
+AdditionalInputA.14 = 612b0fa86e20fcfaafb14424d1ea3092c9be131efaddff1bd9bf0c9f53cf038bf4744b980a73c982
+AdditionalInputB.14 = afc244f8c93dd4578bd193226d7ed321f96dfeafe8b491684e53a0fa7d5cfb95dc3cb7739df80279
+Output.14 = 64806feb8e212b2b5def3375d83075a0cccecf2a8f0fd38a8ff4700a3152d2044b65e555f5a6171b10d72b6b6139ecd29309dd09e132ae88fa9a6adb500a03db
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = be690e7891a504bce0316d6f82125fc9242e71f7dbb7774f465b0381a319b6dc965cddb8b929f73e
+PersonalisationString.0 = 3dd850efe890df5a26ec510538f6376521274b05e7bc31a3ad23cd000d3f760b16424cd257b96a91
+Output.0 = 4cce78b137ebadde8642ed2712fb6a80b634485a6c1dc4c93ef30d1a06f401a0f839615dd755efce00ba333be0f802e626bc8f1fc9649cbc168fe866d4d14229
+Entropy.1 = 3b959baac20b217392bcccb27dc5cda5c75926b57dd0da25c207a0cf308c385162ba7b5e87bdbaf2
+PersonalisationString.1 = 8a9a5649f92c0fe192d4b6448d066a006372e24cdf1de84277d7b3f1693c3f8f70d1088d17226f44
+Output.1 = 86c517d9e92e645aa2187fbb34c674dcb79a43ad2570f9e945d96ee76d83fd36b35c460f544a8e3f00150d129cd502e4d3ee3a772a1a3a7bc59d0a521bf8a0b7
+Entropy.2 = a0caa2fef55679917e5a27245eeb545a7ae98f3d2b454daeb700f9f3056c8b2f4a5bce174e60e41e
+PersonalisationString.2 = 2603313ace04dc1c8e7d90e9911db1326560b3556ae81f6bf79a5a761b2af27035875fbc9ae602b4
+Output.2 = 346ee86cc8ea9904ca2c1c2c61f1cdf734d69cffb146073ab8b5e668ad589d63b322b810ad4c87ef66b9177533d814a9d4f65e1f1d5b14307731cda2c51d9014
+Entropy.3 = ebd535904c3dc50d294a7d4622d5fc8d11453eaa4764090fc5b532e765df702fe940c7afc6111159
+PersonalisationString.3 = 198b395563313876659ee6f2843f750c4a4625e770481478a300b70ce772487a4fd3f171d0c6c53e
+Output.3 = 2e52dfdf1ed5532a698ac10a734a652c8c735c700027639070b00afd0b1c1ca6595057399738722f15f4234a7942b857118891e9c5000eccdaed68985e5a6b5a
+Entropy.4 = 6ac0c994b63c26ecc2035ab5dc6ab56bc3bbd811b2b95c49448f11fe5bb457882840164601e089c6
+PersonalisationString.4 = e9aa6c0564f4f8704216d94e342cb7e1f7bdd22f5da380544beee77924c7efc1eabf6289c405ba42
+Output.4 = 42a9791950f9ceb7a551edf32336467f122b09ab53affb1fc24cc14c8c22f475abbdf2ab68cf06a4edd2b8d9ac7c744460eb5480c11f22019c3faf368aba20e9
+Entropy.5 = f02ee985b433098662f252b7992d6fc980db584dadc385eb05e75942a4ce2e2a2833b9e7a3a44676
+PersonalisationString.5 = 36736902b07ab93fbf5d663ba2dc86a9229ec8850861697cdf6ea9bfd81c4d008794d3f2157fc19d
+Output.5 = 0ce76398b37237188454109a2fade5d4728b1935720ef34f92bdab4a7dc769cad7493447c70c9b17ac68188438093a8a6176fc4a49e73d6d1317157f148d5bd5
+Entropy.6 = e68a85bfbd443b0f89513859e44ec8d6150ec760a778f32bd60feba2a1d25c8e6201cf62dbf4fae8
+PersonalisationString.6 = 9fa1b2f6bc59f80763a32d6992a1b4f6a238b391db934502ac83776959ac952c51d1b38690283054
+Output.6 = bc4de4e5442ac6a39b5a4f141c5cb2e5a6e5d86ca66400cb81442cc12bcc586018de89d95b404dbaea1d828cf9a1a28eb4f43efc8e938033aca44678ff17dce6
+Entropy.7 = 69f9803676d447ebc6cbaa524f1ac1375538a1e77b4cc24fae2e515f73c2de76702886eacdbadece
+PersonalisationString.7 = 64a9fb0922ef02d4a11eb3238abd585d88cfe4ddc510c40fd31be4e7d4a2824c795b918d9a3eb662
+Output.7 = c6416b85aad6a1127c94ce458f3500a46f3b8fd1e607c7f4dcc96629b6582f2d78a1d10ec73fbe23b80b3fd82f604cf692ff4230bf43cd7c2214fb56214a63dd
+Entropy.8 = a8066ec1a896d3c2607e936a3a0d0f8a56c526af33290f52f8079a7ea2408e89af6ddc7d34c02754
+PersonalisationString.8 = 315174a86bb5038680afa6a1202ba3747d3363f7d00dfbc6d1e86b6dfcd4d5c3a67ebdeb5266a233
+Output.8 = 5623ec4efd2ae765f54c800c1efbe0c866e20478ec378e5fe961af6b1b6f91dd15d2f94db87e92bdb578188e0f771dad9eae47a2a1e7ebe1f4b8a5153d0d8352
+Entropy.9 = 266961e34f055aff69fefb99356735738f8dd9d092ba558913a64aea7257a50aa1518ca507e6dcf0
+PersonalisationString.9 = 551b329cc572ec756e0cb4a744488c3dcb8133847c6aa574d238f25ff95de83796a8005cb78ee2c2
+Output.9 = f804f0c1aa7869c61f69208bfc049c03bce7c149c2867fb96627860b701cf113f3cb8019f3636e78f60456827bab49332b894dd12b6253ed74163db5b2bd5520
+Entropy.10 = dbbd85585b2a39e9c9e9af9c5feb6c964833ed2b939730a9cd5b0435e5b228fc6550ef4c6ef12950
+PersonalisationString.10 = 0a5e987646ac867aa1200d492c325c1ddd53b20c4d0594493979f8d487ac2d7a1a8a1d7a90c295cc
+Output.10 = 9d381a77c7691bad70f23693c71e68f755890296f6ca785b0ad4db3f1486309ae21db8fc19ab9503667d958886262f0bf2b2feb7627edef03a6c20dc83705e62
+Entropy.11 = 0d0d4ad1e1f7ab027a8106eba4de0e77a5bce1b43ee865663ec24a5b94aef58e8556e184110a76dd
+PersonalisationString.11 = 67da8fca5f5d2908e8ee15647a861020dffad6fee215d3d52822a3d0ac3c592596a2ad5d7af7d758
+Output.11 = a1d5173b7681b10105853fc5c9ab0b8e448e9c1cd8ed0d4bfb1305731496de3c866e946925ef6b75af12a0dab9d01a3820e14046e494bf075995d74902e27b0d
+Entropy.12 = f760c2e6a623e1aa65b2cbe00c94eed613a9a4006840166ecb62ce75a0251f1f08783ccf63363cc4
+PersonalisationString.12 = b8e2f7179593e1f83c43ac3d1325215a2c898e1193d9732bf443ae4f10540d6760df972f0d2776de
+Output.12 = f18d002b00f80ae19cb951ab4279f44c3edbdcbbfbc680a22f4419a83c9c79a8997b6de624623ed6c8ae6924ae6bb0c5cd6ec558fcf62f86997837de5287900e
+Entropy.13 = 2ccd0db77caed9607bab8de901a1e81683d36d00e1f87d6274d20d5c54de3f8414a9965cdee9584d
+PersonalisationString.13 = 6b5e480c5bf782e16b64bba76383a2de7ab516ba43e22358a2ebba960972bb74f09c94c7fc893aa5
+Output.13 = 02754b470a5afd2a8600f83cd71fd0887beee49967e5268a73b601b8897f8e4fd8a6a0db3d5ddb6204fdeb96cd18385013c6e50cd8be4009b00629e20869cbcc
+Entropy.14 = a59c31d7354eec799ecaba8193466aaa928025b162ff442ad2a4e0f9b65409f105d728af3ab4d5d2
+PersonalisationString.14 = 7b56fc016f55fe0ba21f9cc53b962e215e4ecd3dff487af67b275a19cde4afa74724a747358fd1fb
+Output.14 = aacfaf0360c415de87b92d74381be991f4a41bdd61175bccdd7c8dd19cd3f7076b485e95b1e9ae60ffb9b778f6470e5fe3a54092c6db3b909a4d9e5a8cb96ef5
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 00eb69044b117af966bf5e17ddaa19991207eb44c0ddab7c2f9e2b7b993285130f430731b9b63c5d
+PersonalisationString.0 = 9a98fafa90fda59ed1b53127304bd17bac7544e0de4a94753ccfda9c39be98bc625341db13e86cd4
+AdditionalInputA.0 = 8c2ba40d88e9e3b50b0d3243fa38c2c5641863af446f0a3b9437319cdccf165c363c04cc27be276e
+AdditionalInputB.0 = ac7335b5942085f05195d016ff5cd545e808b7e6f9faedbe8f64faa132d4b61bd4a8e8dac96701cc
+Output.0 = 8992834deff2d9e553c10215d30933245242a4b706df1a3124c326ce4a6b67fc7fe0f1fa60d06b7ed1f606d3b79396af7dbaceefed4406d7a8c39a0bbec39b2e
+Entropy.1 = b2dd9f3ed9b841c8c64c5c874b3261be37157410e4dd0d6c35a61420ff0c9d101ef631c6f001192a
+PersonalisationString.1 = 58513b0ceee0b046f1338d1d0ce4db5050b88fca61c1bae8ad8c4f4c5b2e1a171afd0151317892aa
+AdditionalInputA.1 = 7a20632a0515532cffe19d24c55dc1974a338120f6d8ef6ad03a1e11010b6d6234848679393c4893
+AdditionalInputB.1 = 1b6c5589aff5102a1495aa9961102b8d9223a1a7967dc03b53a4726d4e80e0dd916af9e85c3c2738
+Output.1 = 1515b942e9940393ded2a64c62ecd85440785a33c86d41fbf1f562cf51e029af907ad4d8a7514a2b7e2e9a39aadcda05d21f056fefedaa4a3aa2d45039e9ddc7
+Entropy.2 = b259ae09d256b280db4959f9041868361b1e1ca6edf0a67db0551213a35cb033304de1934eb4cf96
+PersonalisationString.2 = a7785cbabc0d4320789866aac29c2bfa36a0095d072cc5badd019ee3433c426d4d2508960a0891d1
+AdditionalInputA.2 = 95cea71d06aa289f775fe38dd436d325120d7d0f5fa368380f75ecfa5d53da0f8f124d912f0f2f11
+AdditionalInputB.2 = a3eede21cc35deaabb9018b4622de925b6ddc68300d60c6c8a630a77993a2d03a639182499256d3e
+Output.2 = f99dc7fefe1de4a5a22a59285e939874d660e35a168190e27b51b21e32b713ad3cbc07562c91b388ae2fa5373bde74ad303bf616b0fc80070a71c7f0c4db2ef1
+Entropy.3 = 95a9a0006f675c6bd8347b3718967aeea9143c0fd5a56d1d02c36b28033e122940c616a42da030f0
+PersonalisationString.3 = c32d108e80cc7cd15e28f6aed962972d5070bbe33a04dbe82bddb3c034f3e3396b49ea69db6c26e7
+AdditionalInputA.3 = ed329f12d6efb80fc5c92e86674a7c757b6fad2176032e88e642d84b606a2966a5351e3d5402012b
+AdditionalInputB.3 = 6d7d5f885d8952e77b67e53105a74c2fc3d9a38d641536b1c245094b5b5fc37ce5e1b923d48031b0
+Output.3 = b48a8cf17a6926dd20f7b0bea06eafcd5d3c4d961b6cdce9b493d66bfd331d952f23bcc4846e6394ae1bc0bc183bcc2dcef25d93610b33a192ff0eeb885a5a64
+Entropy.4 = 3f90ce94ada934c83f6c6eab8c0eef4be3456bb675f1c835964e2b808f54178066f7f3aa0f799b0d
+PersonalisationString.4 = eb0f54f5fb206fa20dd01cf2140a9314ff91ec1c1bc031e39cbdbf8d15ef3d3d9c7fd7e25c355c91
+AdditionalInputA.4 = da1032978bd182392d75ef8e301b37d372d9f963aa5aa291dac941b37853e8d426e74016b5795a1e
+AdditionalInputB.4 = d975ef40491f4847041874b024827455618257b970489f972b24314450f73ac46997a4467133aa53
+Output.4 = 93230bd7f045384562278f63fdde51aacca0713a8445cfb641751f1e689d4e353da2af1aadc47a1a833f0b44c800c6552de18afeb1bfd484bb80d3c25e4b5c38
+Entropy.5 = 365947b94ce4f56c58422bb31350111b4caaf787f77c6ebe46d3978723133cdc3634e5a8cdfc211f
+PersonalisationString.5 = c2aa0524beca8171a1d080fac6b8be00c92e38ce7cc75d66217c138edd7fcae66d935029f20721a3
+AdditionalInputA.5 = b105fe49ec71ef6f8086ffefb1ed370ca17fdc2aafc7d2f1ddb1058468b7510527a9c189695dce82
+AdditionalInputB.5 = 5b62b2b7f98870a6f0fc56732fcf45b2b34da2083b037c87edced1a0bc57effb5ca6062b0a84fbf5
+Output.5 = c332f57c3b0b8324f80fe9d173b26f969bd4ddde8e15fdcabc7d2cf36fac239b42d895e8b5a9ad4624ec62d14cdd08f4738ae186361d2ead376ee1b064badb87
+Entropy.6 = 3612182e7d2ef29ec828389572c300b9ee2ced5884ba8f8b41af051e9eec40bef8e3bf0793a53bc9
+PersonalisationString.6 = 5ceba700fe74bcbf68f3dbe7d6c42ca1778e1745f3a68d4c0f52f9498681e9328bc57f76f3beceb0
+AdditionalInputA.6 = c2f47a66090b0877eeb47d45e06b1399d2bda01fc2be9ddc2508271d739b9e29bcb5a8afff16af19
+AdditionalInputB.6 = 8d5b754790b3979423075ed710433707aa88764b60d106243a407395a6c59ad9d0016b94d3c23bfe
+Output.6 = 6b1c411a29393301d730533ff53590dc684f81bd04428f3d265eabc23941254a7d6aae8585822e5ad1a4a8ac97e790b7152c66d2d03db6efc99116ca4672ac8b
+Entropy.7 = 1d5f823553f10ddf2b625eed6dea76d06ba8c919e18d250fe4f1e2d624c3d9af8a3efbce08a11fde
+PersonalisationString.7 = bae150d1c059ef314f478190fd8478a7d2b8ecbd74fd480a50e351129757864af827318af892e6c2
+AdditionalInputA.7 = 46c428b8f3d662bd73e8089acc48097d0de2e207026c44c4217c3b46c54e83a8d2d3576421c3132a
+AdditionalInputB.7 = d0ad8221e9c38db60b06352b77eee4d49472e6753cfb358742bfb0b9d13ebab4637dc355db8c147e
+Output.7 = 6b91923f9ca495efec6dc8dde0163f0511b074de766c44f388a829d506c0b31b4e09704086c31382e7b70cffd942e56a82b6aa343b4409498baede186a7665e1
+Entropy.8 = ed61661ab13fec2002156f239c962c03844ec21c252a13f788d4c85ea7ea5f2c87c76a727f77630e
+PersonalisationString.8 = 064543545e7f8f153cbcd0863ede5c9ce79087d6cc0e4c20d5ea42749f7564449afc33d8caa1c464
+AdditionalInputA.8 = 878aaec16ab0974547aaa09adeb3ac16ea5e924308f8299c4f14cb47f35f1d1a24d9e2546c5264e1
+AdditionalInputB.8 = a7a208624c9a69d516d271a9d11891c6c35e892a7bdf7be3cebc180124190b4ae7b2fc89ca86c756
+Output.8 = 220198875b6d8122c2aabdc75f029f12b8a6770ff0345dc74492b51bd242f988d965c787c240bb1e5963252cafccc86f93208b5099879d1a5652c21ff9fe2f7c
+Entropy.9 = 47a3cdd73577b4e7a72746277e4e64abea20de396225a06b0aa39faa66356d34a9a61625159d4f5f
+PersonalisationString.9 = 2aba79728806a9c22b56a2589a2ffb6f9ceb0fa03c5cf52b428fe971423883dc2965e9fc78b642e2
+AdditionalInputA.9 = 500f92f4cb0d38b9c9528cad5fa22803730e9fc6fea9f2a6a7d1fd4251e997476ebd4ae452d83516
+AdditionalInputB.9 = b9fe2c2ace5571426be7962a819074bbbf91fde2cc1216ecbc08e164d986624d3d53dd5095319852
+Output.9 = 2e427919b4c0403277c2c0e532375b826ce364be00cad2391eabdf8eacb5982c49a33e69da4985aa80f6f2e4f37dca3f3de1b43b0f73eae7ee65a10653af33ac
+Entropy.10 = 455aa004e9224eaa700befeee52f6a7b1a1df79b0bb21b7a71d3c532c37dd71b1435d9076a491795
+PersonalisationString.10 = 7806dc9b9cecbca2eb7a8fc19ab53963586e70af4872ee5c392498ba869adddfec44c0e42bc4e60a
+AdditionalInputA.10 = 28ac9b8e2273556cab94ff665a3cf060d47fe94063b76bafdefa448c71ba180fb737b3059ead3fca
+AdditionalInputB.10 = 61f81f1f2ab6db27f2e79ffbc247e3fb394a54ff2e4486e16b03d578bbf9c5c9740021521b59dd0d
+Output.10 = abf4d82871e2a9d5d2f7db1be6b2a1f23c651791d8731cef4d105c2933862f1616e195166137b14b0bdec93ee2988dac89e0cd5a79ea7e0ea3bee70aa0c0c1f7
+Entropy.11 = aa1244805e226d9bb4f08cc68d5a82074808ee5b718edc6564376548817a12801324fb9d48f950b3
+PersonalisationString.11 = d082e8d5766d36957a3f2f7ebe166c12315a28e56dffb8d2b4c86ab2439c23f4b7b0991248ccafdf
+AdditionalInputA.11 = 63fcfe9a286c7efad08e021c033a6784a89255f76f3e41d23cb0cf15b43347a8a1ae953c07bb6830
+AdditionalInputB.11 = f6a8a7c57073d28995c3412fce597c67caa8c8c07345bd5e42b991624fc26888f8edbeabaa71f63e
+Output.11 = 195b9b0a08ab0ee5824e39f92278ef06e4629d504515b5b8896be87cafd4e7ccf9a5b1844db278e109096d848da5a9f074d59355bea5025708e03fe6951cf7bf
+Entropy.12 = 0fa2cf0ee2a8f585fd8ed9dffc3975e71c2e3547b1e7a0be40fffc25e272234a61556d2b8de44f45
+PersonalisationString.12 = ef3c20a90cfe29fcb78cd7023badeedda4cdbed56e86777376cf26724ca17f8b1a3f4b7fceab465b
+AdditionalInputA.12 = 07701f10bdd4440151099a38dc34eb093229fc408c34d9b7a26548dd6d714fa5beac1dfb6e6dcb84
+AdditionalInputB.12 = 3d41f62852082cf17535b6e852983b3e64cc95fa51f864681969690188d0fd246010290399a6871a
+Output.12 = 611e253b085e5b300fdd373024a1a440ce7c7449d3dbfe8fa89d818cd04e7a0646cba5e1e4ab97c39a5b129981c2b1b3002ae32f0ff84999c1f7b5acfbaf8e57
+Entropy.13 = 08134820c6db2b5111ff6bcccc69758a5d750af0d1144ed5ab800555b631d0c1b3d8192e075aa380
+PersonalisationString.13 = b4da342961aa4b9b5fddd94905c31cf6f32c142c92b6de6eb82bd58cfe3f7d666a3f6fd74c2c8082
+AdditionalInputA.13 = 0e2ab9615b07d3eeb993a4ea1d34e5c16bf5c2877730fa32943cf37837a929d225479d0e47bd8bd8
+AdditionalInputB.13 = a50eb373391455e23382a8ffabcff11dd41b36e11a6a3645f4bfefd267a7cd80d37839c8f704b8c5
+Output.13 = 6aba01660aaccb5f5fd32fb6a541cb3b85d0aaba476c63962da489eea9447d7c3c1159608c0a647d6416485668ec3abc4b22a919cadf5e8c87e9f3590ac58aa8
+Entropy.14 = 41ff156ac91bb7ed33a4465d08a15f1046ea014262ccc0e2dd7a999e27632ead9677511d936329c5
+PersonalisationString.14 = 39b8ee59821858dcb89c0f9da6d798f925acbaad0dd2a90b1ae6334c4e4badd38043e70de746dbdc
+AdditionalInputA.14 = 6cff7528b843b2efb40336bdcaa9629be2720bfa509a330430c36d5935e6ec68569cb6459671fc97
+AdditionalInputB.14 = e0843ca3385ed55f56d51343dd718dbd1a3705d7b8a3a5cb7b955c9070ef1faf74382a9130a6803c
+Output.14 = 9052a75eb225ac7522cb141245e0592a334cdc8e194f5249a5843e6efb6398db1b8ae97a15829efa4685cb4f1435d022424cc7854d34743bb2d861866fff51c1
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 40978836f23cdb545a48893926a0dd810f7919f12214567bd89f2187619bae4698b4070027a3fda7
+Output.0 = e58aa7fa7f639a9d14c67abeb2ca52dc04a06e4ce8ce18fc71375a1aa217db17266fe0ebe15dc13d352af04d568e80f3ba76de257ec7bad0b125a91fe17e87d0
+Entropy.1 = 852e1ad07aa5d977d71ef37ac9350ed743532a2dfef5c4c696e6363122f84e13ed1d7ea1a1a04cea
+Output.1 = 7e9a5cf99ab4d436048639f54db7de467f04107aaf2fd58243ac573821236a81a06e0307d3455eac6e691be8243dbc83bbf5d5bb131e4c673193baf09381f63b
+Entropy.2 = 53139b711cd62970b6123dc40970f30cd03d9863e78a3d05ebc4d93afc92d66c4e67b6151264f22e
+Output.2 = c16d337f97ed4c445868ea0d63aee5a7ec748a22f16ba611e22b9c03506717a29e00bb56ac865eb196e2874bbce68e884ed97023a0bd97cc3fb117c91b55aad6
+Entropy.3 = c427ba92c6ecbf09ea502b8bdf5fcde3df79efcf80d00d31197a48e38dd1db043d44fe5b1b535e82
+Output.3 = ceca2b90c9421b716fe6abfd0865795cecc207b7e42eaef2d9cd61ec833b9461513a620b5808216f783b5645032c00ac6275bcbe609caa3186b1d4a39d5a9902
+Entropy.4 = 0838fa4228cb87a5d2556be94c257ffdb9bfa65290dff33d3b7fab9821684af15a06c283f0dc3ec9
+Output.4 = a17004a3e6092190729d86d8cdcbb9a9e8d5245f238ff693f66337e4a7b17ab8b13ca13c696fe4645573817e0540c5f4e74a4ade17e81ed812a58821cfdfb900
+Entropy.5 = d5f50dc6708bd3899739cfdde95d9f4144f918e4939a5d7a288f1b35733d5a968823969f3f420ff0
+Output.5 = 6cea506c3ae4f8fad36edb018c268e2d254de7fbbe32a500d4313529df168f3d15c7cbd2d980ee04d295242249c719e80d4e55b47f54e3140b23e61eaacc67b0
+Entropy.6 = 37181fd541da6c0678d058f486df842b36b56873a70880ae4af1cb586023e231041de02ef2a2924b
+Output.6 = 723b0521bb5348bf6eccbdf0a4d16dece472a2bffbf905035e0e62ad304bbb07c53ad44988c5c653603052f4d8d441fa881d2dbfa67b968e77a468f9fb66f78d
+Entropy.7 = 118f6ea32483132a5259b828c0f2999dcf3c24e50012e9d6a5ca866d15431ec7d09c35e2cfe2bbd6
+Output.7 = e994063d1a6683a26e213c6c2908ae8964a1e494779e30c977c9ee7bed60449fa3c28cb30a92e7f28771c6a672789caa739f05b581d718d864bd22028e419eef
+Entropy.8 = f187490ebaec72e6850ae2e8e940c069040f89e19b4d9193c227a81b98a4ce4ed00b2a3a9efd00b7
+Output.8 = d64c92c864dc6f7cfeab509bd51c7366ab546826a531ba31514391f11d9760d477c7ec3901c4d1541a703adcc25263257f3e5bbecaa59b618c1b4a1df882066b
+Entropy.9 = 9e264d7ee35b20fe274116920132167fd3b95ddf6a2bf836897999e875a7dbb0ac5202bf4530c92e
+Output.9 = 0f7982f54e43abc57511114f95d103b7bdedf4115364360d1c95df04c4b400837674cae0212b776c0baa05d3428d4fe3fba28aab4fd35a1e32fcc2b9278c11b0
+Entropy.10 = 2137f291e50fb5aa459a2f0017e12f4d107a030a1f14ff9ac33035d0cbbae0ce7910fa7e86d70cff
+Output.10 = 6f7850a6762eaf49bb93c12fd1f2b62f24fd217e0cb29e73ac6e9320b59c2cb5cd4b02a4ac99cbe65e3a122d69efd5a86f4df46668dbb84b145088ec72671f32
+Entropy.11 = c4e34beb50143a191d075d2b510ddfd9f807f498f1863c96ff08b41b0ce286c8f2180afe8bbf973e
+Output.11 = e19fbee2e7e5ed553c409e60998aa4cf6de65571a8784c0cdadc80de2f8b90a3a0b5212c8baaaab41c95554c4a61688519d759769cbd64f641173f51342715df
+Entropy.12 = 5c3ba5230bc713c491b7e1849550c35c5e8925ddc03640735966b195423d17bc73f755de483ebf1f
+Output.12 = 157dce318c3e92810d6434d02c43adc927eac5c0580d7444366a1a44dbe865fb0ad052facd0c6c6d475153471630b3491b818c3461de33629a4915e60fe7c559
+Entropy.13 = e8c24ba92ab5d739b9ecadb9505ac56cf5990f1450e56f4fb334f115c14948cb404e541a37bfa6dc
+Output.13 = 2cb651524a6b094c93e8d1caf33bef269d267eaae0849c359b52d34640f14ad4a7fe1c021fbcdce6650eb616aec4a05739ce3dd1d65e9f4666575e012c50f085
+Entropy.14 = 689f2f61670360472b24f8ad360fe08e249b59ec0cc4675b08ac0793dae6956db8f63108574ef0c2
+Output.14 = 0897856129a42d785b60d770836a68198bc76e29840abb0802ba9d471acf8b8bff3f02e1a1c34015ad51ce85969b12ea65236bc12d349c03f2031fde19cb22c2
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = bb1547eb674b42dfd1a56238e85f4830568bcf634380dfd046d9eb029cafe8e8b45d9d7dbe802a5a
+AdditionalInputA.0 = 452c8464476e0f34f67dd0108ba20245d7b5e3d82fdf954619026229624324f319b168f2f4463159
+AdditionalInputB.0 = e59a88db5ac9149be72fe0da55039ce2d08597916da2c35d900d9a6ade3723ca2e43510799c11fdc
+Output.0 = 426f286226067a1dd0d20e2a048020fc87b3bfd550093c90f49bd52301e23ec529ffe7349f7ab5136bffbcfc294a2a6d5d459d91af89367cd7f70a6bbc76b400
+Entropy.1 = 547742bf4198505e522a5e92f432871c20a169d0fb809bbf7ca3553d31546fafbec4c4dc43461e28
+AdditionalInputA.1 = 1416b9c0e4459801b39a8ebbd11b1cf7dae42456cfca768859530e35ba9a95ccdea56480446fac7d
+AdditionalInputB.1 = ab40901b3aa3a3ebccb01ec60fd23496225ea5cd6d6c0a834bb80d5e822deca013ca52af44866f40
+Output.1 = 232632428a8bbabd6148ea48f1fe7ef9a301cf39f5f40680bf846e3192b2eb9224262a01dbbbc66362ce7c11699e0fddcad578f06122a6d193516f6a4030f2b5
+Entropy.2 = e99e0b8c29c392d59608b17dcb5168eae5c4e82e0d13a16e68a548df41c59ec09bb2af619573bf12
+AdditionalInputA.2 = f51991a560bf0848959de7029a357cc1cc88d59c5e5b8da8249543b8dfc0eca68a392f10de8aea45
+AdditionalInputB.2 = c2ed953dc950fb8d669f3a0deabc9f036205ce67bc43d98a35af875196a040d8f278b979f9067071
+Output.2 = ad5ed94b0dc525f40aafa5f5e958fd78510d8f503e4516bc967906ad3b32066e02262e4990e6e1417ed021e425c3c7daa26049ce23cf28bbd3334c6c9524f075
+Entropy.3 = 742726fa37e1616f661f71cae259b6e5025d7d9dfaf2398895ec4be20040aead9a9a142e702e9ffd
+AdditionalInputA.3 = 13437aa48e4aa32d875b7d5dd0c90e52cc3972c0669059b6a23dd0479d14b77760b149f4ffdcf3a8
+AdditionalInputB.3 = 9423cad28e9a548ded0b0bcd04a6fc35bc4e6b03240e2cc33754702ece84cab9dfddaabdf8837a44
+Output.3 = 496a31688beae147d320b7cf5f70226a765c53e0c2e60cb02bd0aadfd36b75dd8de21810eaa86b7addfd8626a0b4a547e21befd20e301ff599013a95f826e77b
+Entropy.4 = 34cbbbc0b0d17dfa5bfa5c24f4b5946599d8ad1c2a97cd55d4679ef0f291bb12cb528b54139834ab
+AdditionalInputA.4 = 48204fed9e52e25c9d44236400710a1bc46c402b685f62bc9f74c81468be4f16b77609fa2b267381
+AdditionalInputB.4 = 40ca8216b99c044282d7c4055f23903943b4fcce60a59c77ebf6526a506d69e7aae667759f2cc4b3
+Output.4 = 05d04f039712329ebc09564835c9585b510432a3136341d04f9b8a46f1a4fe4bb091541318367281665f63c12063a3a91ca53138b9756b8d67a77a35824e2ba7
+Entropy.5 = c0564cf0e87634ee0b7847f023af21b3d3d496ea2e1938924fe7ec421f3aa13aae277208dca14035
+AdditionalInputA.5 = a0f9936ee1e92682fc4342ae2374aa2590cbe3c624342cac01dd196b4811b447ffb694b30789f823
+AdditionalInputB.5 = 6f94eeec1761b84780866b403213948ccd106512b0bd09d210cc9c2d6220072c32b060f5136485b6
+Output.5 = a0a8961828dec59b3b0f8b6317d3d1722ef705aa327f5249eb6987e5df07f1df2d9051b3e7239352490e01dd778d0122e12e6e51ab8cd0d94c6524a25841ad96
+Entropy.6 = d0a32b50ab627fbee161a579ce3abebb2bb880baf2d958dfe52e3f3c15e2984339f28a5383347584
+AdditionalInputA.6 = 920a6a0e74c9bc275dee1018989e87cfd703c30f1b4b8892333e08f9fc50be874bca0a40ac2e3be3
+AdditionalInputB.6 = 53d7b7179f3a50f627c5cc1813d04c8132cc92d922d21f607e41b682d01070263ddb34721f878946
+Output.6 = 3b74766a5c882776e7ea622b06096b8143978002883aaa64a18de1597e83a440271655c771cb717e0f804d7f6dfd8871530733cc55c8e20947d72ab3a15da789
+Entropy.7 = b1d593c0b07d76c3345e878429aeaa600e5c5a1eddb323d141b7a7a0faa6d6938b96634250d62779
+AdditionalInputA.7 = dc641f51fc6c762aa891f1f6d5605cfe5ad08c0cc8e771da254f69121598a35de619f52703f11672
+AdditionalInputB.7 = 48f2286a84ca0621b45802e67b54a3a8e18a647313cd45e3f00cc992413bb06cbb3d598f7ea3b978
+Output.7 = b24fdf5b204b8ae7c59dae3e9e773bbc292728983805c80568e2bd85fe0e3d0a52efd9c431236e32d28b7c0d2f7e8b0b92ed518f3a9330162ea3acf973f7ec6d
+Entropy.8 = 65bbe40f7383cc24659c02d22f8cb6297d8593d51688eaedcd85bc59d9552d7e7a00db3bb7ff091b
+AdditionalInputA.8 = 7a51ee232fa7782041c0b5c58e43d7754de35d51eca8779b889d9704ca7ad88f085e2be491f7c331
+AdditionalInputB.8 = a22d84c02837434fef33e60845578e8814a979ee493daabacad88203dfa05b8e03b6a3ff51180983
+Output.8 = 0b129a150217cacc2515de01a7d5f7a9dcb764bd2f579583372d373e7fe91ec5c8cbb2f01ccd07f327768300b8b75392d05bd8a41127bee193be2ebabbe2f692
+Entropy.9 = 47f29417b07b4a21f8a90c4d32408100bdac0d21c938c44f4f2d03650647ef6dea5011a199ba1279
+AdditionalInputA.9 = 9f672ddf59d1f11f9550c39da5cc6c3d7879d5a61d90163b6da9f81709e1de6df50d46057c27f8d0
+AdditionalInputB.9 = a0083114504955ae43e79a31f19c6bcee61c6614f990bcabbac2059f2140f702c56c23e904798aca
+Output.9 = 5edafab717dfee41bfdef124607f4c9ee450e0ebd477b0b36fdfb17aaf8d18948f377a94f5c878a6046d4dcfbc78e788dc25ffd1623edfcb038fbe35d8e163a3
+Entropy.10 = e315b3b27dec3b59c26d9c1ce422146b20621e5d67749a7fa08619797fd4de0ee53283a72a9c655f
+AdditionalInputA.10 = 5d3c0ec0a2344f72574e62079d605168739d37e9a2eb9e44d3d7e4669039219a25ce58965ddb1ac3
+AdditionalInputB.10 = e22f87e99977468e23126e5280a77506a9903cc42fb36c004e67d1a723c8fbc89c30bbc74f2b59a4
+Output.10 = d0f8faa55299685274ba499de5bcaf5819dc9a5ee40e89e941082ed102c63430274dfc60f2dc25f804958af5a3dc95576e119c6dc359bae73bde1d2e2bf44fce
+Entropy.11 = 9b6fd598506360119dd1cc9dd9e0663da15ca6015b17269c6a385ca122a9854600b81d598ae2ec9c
+AdditionalInputA.11 = 4ad687bf3963545bd577800d11c08a3eb06864306a07c3e1605d3bf09e61f1cbdb668856dd56cdc3
+AdditionalInputB.11 = 9c6e72d6fb4d339abdfa0f78dff259c25f79712c8643afe37460a35dc8401d11273c64b9130ebe85
+Output.11 = 5164f5f3c4ab122dd2d8b6fa246dbf1eb25b12043a0f7a66e811f4bc55582a3137a8394bfa05e8a53d3c89e56f77f7321d4a7572bd2ebf0886bebcd01bce3031
+Entropy.12 = d876889624fa9e0652161d37a75fd933fa981923d16bbf3f2a54ea0f6005210ef438d36feac10d99
+AdditionalInputA.12 = e726582762053315ae88650212b3dc8325020594eba0c562f34abb811c8c272fd10f254739ff2f33
+AdditionalInputB.12 = 6db300b36d44cc2d5d7e9ffc1c8fb8da017f66f7d5f415a6bf66fb1d3772b5adbd4bcc7be77b6a4c
+Output.12 = 37dcd83ca5d495e632e7b011ba80bbf353ff5522632f7333e802d4ce27c9170f8239c94860f811eafd0ee44d5043723a15eed2b62426afb893caaade08762fb5
+Entropy.13 = 29cce70c6c9ec19be2ad2955c0d8f027dc4d25d5fe4f66c464272347f7b22b83252a91f037b66a6b
+AdditionalInputA.13 = b61aad7e7c4d3d83df69207e5ba75b5cd268cb4b7be52b76008fc8894eb079db4b4c0b3a5a07f409
+AdditionalInputB.13 = 8ae0b17a28701192efbc60b3755f34dcc8ca8d47d35e7148e2e92a64944ed2fae670e57d90aa2e81
+Output.13 = 3731041d501f71b983105e48a0fc604041b57fc41f07ffa6a6c8881038829cb32a962f96110dbf5e180a284ef6a5fe7a12a5381c6edb57b0d9b6f6efe80a51a4
+Entropy.14 = d55f35b4d2a0b525fee74aefbc3c001cba7e4c3ee47c5a0f03a155a00479c08156190a001fe6928d
+AdditionalInputA.14 = a0c8fb5bc632cec6f7f7a385587f27ee3ef3dfeb5aa13d978049c3d4a8e2ff9bd36d0eacdf5029b8
+AdditionalInputB.14 = d2c1ec49b1b0f810ae9a71fe5d93ffa4004e05cf8ffb1e1eacc146c37b3af5258b4e46222cf33914
+Output.14 = f3ef4c192e85dccd2df5b1c5f791daca65363d5f79bd490b7d9232b19c6059aaebc494dea3615295f407aec1af3b867a6d94abdcc41f68d2d9afbee19647f748
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 73bc77faae575f530091726695a10fa8f376df0722d56ae5a2e9d7af20bf52e86497761aa947cc04
+PersonalisationString.0 = c2d278f6bb39d34452afe6a7bbf59c8effc7ebbb9b45c129590a237a7437542a4c72d6cffb3f8040
+Output.0 = 412d6165d5346bd5bfa019cf25773987d27c9a6e6ad26747aa736cc0dbcbebff6a16de026bd4249e69f0028e2b7e0a7d0d0e438b3d6de27ff66753998b5c334b
+Entropy.1 = 73060e144ba664ad49fde5c2a5b67c4a4a394955c84fbbbe96e1f45f0ee54599795f9b98dd548bb8
+PersonalisationString.1 = 06878e819054f8228d66ca5b502889972c6c5e5edb9ac9161187f9912291f7046569e7d90ccd0bee
+Output.1 = 170b91b99908fc54f349d08c25c10ea32bc53e857e660a291cc72c4785cc30b4574c4888ead8bbbb8825494870c7e856da12dfe42ee99a6b5590196857139fa8
+Entropy.2 = 0c81bcec3366c0229f43dbcd232699cd3884bfe5dc939885f937a46371d1f82198c00e3471e5986d
+PersonalisationString.2 = 8b4e902206747cf35a7ad64b77e856ccf12d1870ff8243b6783c708ecd9362775a26f4070e8b7164
+Output.2 = a42c8cc33d7b866be1d830aa97cbbf05f2887e9e5bda4f4f9f08d175feee72d5e266c06b23e3b29ebeb14e25a81b8536645726fba91f68f834796223d8db94ec
+Entropy.3 = c9d691fc04448043ae1375356395119de1c6b8c09575ad1c695f231bb42f4e17f26336c32cfd225a
+PersonalisationString.3 = efc86a950eb4f75f3df0361099ef05acec57d7ff365616133978525d114cdf7f9179007252b13201
+Output.3 = a76f381b9f379d9ec17a88d4bc42a7f44e94c8f0c4d6f1ac9d230e174b0156cc56a1c238550597942695476b26af2702b59c24205952155a2fa000f4809865a2
+Entropy.4 = 8386ad924579edd80c5d7a6f40ad2e6a42967a0270e67d80d431fa15b37dcd0302044c4be2a61d25
+PersonalisationString.4 = 2edb37bff0faec67dc149d345f64a9c0a1db6e6d5248fea5501091c5ca64de9643277834d738295c
+Output.4 = a42d0bc89f106f61bb3dd0a27e305cf4dd2a84b45d506d552fd57026bdd735b930c0133ca1d2ee7c7f9e3a81ae7df5b3c10b34ecafabfacd5553bd8b75209e63
+Entropy.5 = c1f8a8007d632fa0cd3edaf18dce55e870fc1fd2fe1ea332103b4b0cd8bf5591c258ab8b46c6a88e
+PersonalisationString.5 = 1c251c419e7c0b9997d8e7c86613033a8f012bddd4bd25496831988fe99d8732510d4260763c0e52
+Output.5 = c70a9f5575fcbae8f788976b5ec60f2ab35e5b0d2e30affdcbaeb4c24fc2bd261b44202257044e50f3c5c5e411ebb2f07900d978f4fe66885d36b01ed927dabf
+Entropy.6 = 92680cdb8e3bac00ca0ca25e988f6fbc3ce2a6ec276d8b30b9ee5d7933decd3f90b339f0861b493c
+PersonalisationString.6 = d707ff0526dfc0c7eafa3d76f5ad0e9d98192ece0855ce09edba0aefe819b940585b5df8ca437ead
+Output.6 = feab4a78239663897e66157184bfe8568e3cc46012908e8d96f21cdbeb7941e430581787e08dd9198bdaf58ff884d834c0827bf931113c00c34f988f1d7b05ed
+Entropy.7 = 7b53fe45e5b61c130a42fce92a66a95dca417c17233b68e2d8ba7d18a02acb574da2c048bc29db9a
+PersonalisationString.7 = 1463a8e63064f6bdf4f42bfa7c7485ab7ba6ada5b0e5e87dc88a36e9bdf39f70a7e995d2ded3c2b5
+Output.7 = 09c869ac97efce0378a878f77642d502725048c95052c8220f25f03bd9bd60a1198e45d49940ae35c2571a72cdeae297d023ec4cdc10472f1112a8796fa25326
+Entropy.8 = 8adfc04ddb2f8a3b13def4128d1029a70276c53e690ae21a1ee9c36e4a26f8928268a4c5a8bbc9ea
+PersonalisationString.8 = ab5c19857ad9104fbe126bd5941db31a611dfc5adbda9b1b772ed2b08c01536138f083782df6e222
+Output.8 = b562695dc1a088b1b7f5e3ee69d6c9e767a6c76f8c483c8cce4a8ef8e588e53aab1d2ac4dbab124f307def491bf843d6168c88b528ad4c417dbfb616cc0a7ccb
+Entropy.9 = 3994d921e9b24ebeeaa2b3f15e749b00353abbb4f05838e655956653adbc27c580c09cd6eb8cde30
+PersonalisationString.9 = 71eb26e61112b11f218d016a678684b8aaab6519ea41af21fc713c4afa14f39d49a5a7472344def1
+Output.9 = 59de04bc360249617d969ce7dde7b638dbf0d104e0d3c9ce0a63a4a7376976a338f9e5b30608c2e1b881d82fc6dd5ae25184d6f07cb0dc2f5d9989ea49100c01
+Entropy.10 = 2a3d16a96daac4b6c9a6474729752204b3f197e9396180c98551cd36f0fc68b7fdf533115da6b2c6
+PersonalisationString.10 = 547e34340065fdbeb409fff49f2d9a97c5202aa148aa7e8519610799a682de81c503bb52addd50ac
+Output.10 = 21561c15d024050a5cbf8d31472cd52010ba0a7385b5f6f0ea03bdbf523a828f7a75de8586feeea98adc56c915b5cfba416dd3661c2cee54143fee2287bb3f90
+Entropy.11 = c9db6c559be9aec8e2c46c575eff25753bfa9d886e934b8c2d226deda6e8c8be8bea68aec4015374
+PersonalisationString.11 = f563deb70bd65873b833b2caba746f7897394fab8b13c3f984c09b33bdbe8e9549d94070ddbb9534
+Output.11 = d085ddff1a1f8b9d38d413a66c92444de14f5e762d77127c83038a7753f0210020ecd64813f0f88dc6a714428ea6bebe9a9e738e7afbea474c1ff7553a31bf8c
+Entropy.12 = bd598fec98b355c4ca8b8f129e71179b575c64933d04b1d72a3e57d04f507c337c64f728e76cbdda
+PersonalisationString.12 = 7de3a84920d4bee4f33e18f060ad9a00d68decd002a36cb85d9b9daf4627127531eaefb2d4dd406d
+Output.12 = d198dcacfac472199de02a74fd1a09ee9412eb31f006bf9dc7767fca43d8dfc83c9eacc3bdc82f2a083a7aadd8a5c71aacd4aab69e1160cbb7558fd1b37fb1dd
+Entropy.13 = 7555aa70039f912142cbb99fcd54b6067a551afefc827066e2ba03816f76b0fdbca8609119c21d33
+PersonalisationString.13 = 8c3d8c10184d417ecc7bed2832946de1301f3a281a73fd60030c748af7f27995a3be31b79e7f0cb5
+Output.13 = 27d729eb9a22d67bf8308b2edddb4dfb2c22ffcd17ef4045bc63dd6fd9f668a74c230b44277d9ee504556b6fa9da96a81b204b74097866b5fa62ef8e873c5547
+Entropy.14 = 2d0c45bdccac3a972fe401601379d5e5f6173edea823d53186829f343c0d1c843a6d7a8255c15c9e
+PersonalisationString.14 = 9345dc1ee7c428a961f2b787e6f9487f938062afd5fe3b3ceb04ba8445b1118a8e2e30b3f0bcc299
+Output.14 = 3d6f9140fdb46cc1a04ae987dda91a18a7eb59240c6b4292f64c8445f27f1f72a2d80e8463da01409cbf28416986ed8a85e8b9c4caa4541688aede1b6905b384
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 86a637cfa2627d5676b6921b86a9661f8203c4d9606024803f3688c887e091f8e16440e6fe92ac6e
+PersonalisationString.0 = b35bbc238f158b9ed45dcd7cc3088ea4effa0449296298854598b6e312e59a8308ac801974e3806c
+AdditionalInputA.0 = 478bb69c78eac163496883c5b2d59875cd8a631903e447de5434c774d721e91a828ecda60fb44b7b
+AdditionalInputB.0 = 75a8479feea4026e4cd10cf58274f75dc838894c44cb22c2efbce5274ecc081e6a6876b6ba3df86f
+Output.0 = ee9d75d123578a17a57deeedff093e6d69f5418b7ba3581ff306eebf299271168ad0494d6f7e456e718bfe5ac79329d3204d56e8d29b6dd8898fb3103eaa4b08
+Entropy.1 = d70c9e27282011811502772363efab5714ad29d63afe46709be54bb75e669b7cb29f059a1477bdf9
+PersonalisationString.1 = 684231b31faff4406c5cee7efd7627a061005e94f28e7b33afdb65645137d48e9827e43e80361d44
+AdditionalInputA.1 = 730ccad6119f8aeda4c36a1101aad4f15fe211420ca35387be0eb36fa85e555df25b3bf0110129c9
+AdditionalInputB.1 = e38a65711b71d4400dc3b90d742f301ec1469fb9bb0e9fc57ec23ff125b8a7e526ee093260875ee7
+Output.1 = 76438403d0e5b9cf0a6f3ff3dbadac9a5776b5be635fac091ecbe6d5c3005b54dc9a34e3bb1bf3c246484a9134c430604e3080a0570124fc9e5e6f4d977f59d2
+Entropy.2 = 71b19f72af5d76776e373691e19aa2e3c9e84eaa2d7d3350b77e2291c000fa4c50e1176b01c01839
+PersonalisationString.2 = 2a6f834122bf08fbfd1c7ca31c6aea08da21942d88c41d445280c1adbf841ede1c942bb0a165e6fd
+AdditionalInputA.2 = 5a8030fae321162e2c42b1378a7bfd79cc7ab60afc498fe85c39ef3c5775c12b755597a172bbfdd9
+AdditionalInputB.2 = 5c23fda8f8ad32bd6bbd6e4987a4de877754c397d925f3d699338a9683db27502de5d5ddaaf9f8fd
+Output.2 = 445d7554ae0fc08117b13e46585df342a034cb7cff5190eefc1807c0aec3d479325a05b18e0c65c0729178c13fbcf4855c248ec9dc7fef3cc3a88edfe82ab999
+Entropy.3 = c0fc3d627b4ae0df05124697249076657a4c62af162ccb9fdba65e61e6ba31165afdc1d17efd0ccb
+PersonalisationString.3 = 591a3194f3a3471887245d33019ddeef093f37b2827ae17a566eefe624811c9cc6794a6ae78412c1
+AdditionalInputA.3 = d539de74652ce1ebfab5b40c1aac7155f69674ea89cbf2b3b83a976c448a61430cc850ff7532a555
+AdditionalInputB.3 = fd3d71c3411303ad37edcb96350c36a72253326ffb1eb9b06eb44190f5c6250af5032ab8bae71ac4
+Output.3 = 847840edda6ecb543e6c2581d1a326279873822978788ae0863171259cb29bb0f768745dfe41b9b6ae8c37769d950c614c644bd043655400ce53417552724d78
+Entropy.4 = 9eee03bb2430de56ec78d412fd917d1bf3d108a7b07268f3f5dd6b3bfa188d4006150e69194a0168
+PersonalisationString.4 = 232d59d3f22b4ea530527a54bce5c04f44dc25e1c68a1459e2eb14e87f49694fef8790e0ed2573a2
+AdditionalInputA.4 = 840a90b05b852f8d8e330cef55bed5a40e5b4d452d77ee4d5f8925e54c3b0dd8f10bc85de9890936
+AdditionalInputB.4 = b789c503f63c4b4875c9fc291694885a5c2e16976201d181fff394a4695ebf8dfc44191807583d3d
+Output.4 = 5a6912eb82ed76afbe455b93bdd81d7549eaee7b992c922a63356eb3242624ec01d14e642385ecaed50a8902a96c9f5dbb92e26891a97a00f8191ba61881aa20
+Entropy.5 = 503e6fe0acdd4e64eddcf59c886c7a851591590e482346f38c461ce5bfa3eb1b7843dc9b3d197d06
+PersonalisationString.5 = c3c07b2cd5b31207dc17112b27f7b7bed188c52c0b8ccb55e962b751260430a55f63d92dcf1875b7
+AdditionalInputA.5 = d8cb98d2117796288c616b27e0a366b939eacfcf0c9a0ef8146ded829813cfa377c1446779eeedf5
+AdditionalInputB.5 = bc36782d3a7436783f071ed81927646aa7dfda1c87cd1fddf67b59d3c025b58cbe185263547d3537
+Output.5 = 1af7f9c769c2c6a96f80872025220b6cc5ca2bee6664a01fff4762b0720ee2a98432cbc4845909f701d8109345901df537fbabcf75f46cc3a18a7c0760941105
+Entropy.6 = 99fca55c7e8d75a54c2cbfb83ac57ef2664c498270d37bb5377f1e8f075b9bba8ea0cc3f9221cc76
+PersonalisationString.6 = a0d75987bacf99f2bc061b8b7d7e319d6849bd01012a05f0c263d56ff51d1a5e62e08816b5033d62
+AdditionalInputA.6 = a29c006a4e8cb89cf10e2a13e7a794fa8d9ad63b184bdd59b2f4ed81582a6abdef1195b53fc4a266
+AdditionalInputB.6 = 827e3d24b02f0de9adcaca7d224bbd8d6df50d18cf414257b6d553a42b14e83f2f54e2555e3fe106
+Output.6 = 67a2c448488a1fc1e6bc64a33871c15d8981914f4b063f781c9dd103d6f9282edbcc1497e4bd1ab370adfa170e25a707e1e43e0cbd9502da6e6bb8e4e455d1c1
+Entropy.7 = c53442f679caaabb9c99aa019e6c63badeb8bf2daf984b9e9cb79c2b025a40d208704d7386b07a8c
+PersonalisationString.7 = bb1218beb29cdcb68e3872db28682d45913afb76b6d35d8b2b9507bae9124f81934d96aa68f190db
+AdditionalInputA.7 = ce35399e1f43b2611d41e24f417d42ec86fabe8f253b87bac63de817ab2281f67ae6888d7a9dfede
+AdditionalInputB.7 = 0a278a9a225cd0ff6f2e971578962036f5efc7ebfa24c2d035b5dd2875ab814408da499b98fe316f
+Output.7 = 1ec00d83fa60f4874389aca54eae3dcb0056276258dc0852de9825dba10497dfb7feb319b28ba1dc5aa40a5f122eccc6743bf2f124cbf282ac8a899f85f1a7a6
+Entropy.8 = 1bd80f2e675d87591c6089f47889d0720fa7a8467c9dc298006506579e9de725be113b0e219a9f67
+PersonalisationString.8 = 901b4491da7f8492b6ea914630af93e7a1c1b29905e1484d6a1b9a043c22bdba3a02bf6ab1627cb5
+AdditionalInputA.8 = cf2c3101dd6aaf0684d1e498fcce47a835d64b9bd15ce6069c8ace6fb17b3692c476dddeb565ec0d
+AdditionalInputB.8 = e58234d0d8826705f400feff72641cb42c02079cc4d9751c003778bed45f2d50c397d699c653003d
+Output.8 = 744d1fca65af436a0c555af1970017e1ba4c37f085f73bf4e66996369f5a6b52bd93a5e0684ad11cae5691e765496c3508bc1e509037c2be8355a29c6b326112
+Entropy.9 = b55981be58a1df6c69fc9105a5475740efe9cf09e1b3fce249aadb461f1ffcacc1acd8290bff03d3
+PersonalisationString.9 = ae5333fa93c532da503e5800af994e0dc2570e5a32a802c21206185a79564433b5811c4271555594
+AdditionalInputA.9 = 98cb860a53e7b6e64e874b07f31b3644ff37994a676e31e6245215e3ff0d5f34dd98dae1535c965a
+AdditionalInputB.9 = 37679531c9fdd365514f578d0edb19c25ec61324234b963f9b0facbac3cbe383edaab2fd8d0afb0c
+Output.9 = ec491de07588f75b9a88db02b4115fbbe3da26e8b753b86547c23fe70885f22a0ce07a54a3cac1a26f82ff8458b820b6d60bc3b3e3ba82f210ddd04d9517e97f
+Entropy.10 = 92a29d6e9dd78256a6f8e53c805d2cd60e56ab688be2ae3c86c8407b571a22a6dcd982d4d26dd9df
+PersonalisationString.10 = 5c0d2cfd68cf33f23b5392778d4f556222bfd8289acb458d7cdbbe9ede2944ee80db796c0d24b6e9
+AdditionalInputA.10 = d8ede82f042299feb1e7f5febd1e1622d46113cf3fc1acfbb8cddc4b499a359e14ccc94fda1da83b
+AdditionalInputB.10 = c593799d69dd851191d9c9b3ba00bddb5083160b5d32cbbb6ddce76820652b04702a80fb8e11d384
+Output.10 = 70208699102b6b7fe9557c31f802c1f5a9b94e4ce403b91ed8b109a84c88606130ff5d29a6d3c987afbaa4d773030b29c6c620473114a2ff9c2ec3f28b211fd7
+Entropy.11 = 5b029c4571fd643b7e9046bfa0b7741c4948125e1afc3adca443a510a2800d4cc2ed4e7d97a71f27
+PersonalisationString.11 = cf92f9c2010acfc6d2d8f151c835f096d5c8aa20cf9f84e15910f7c91dbaf1d2571dc21a578d020c
+AdditionalInputA.11 = 310e3fcf5603a51e8a7530ed5c1d9b4f668dc20f8d2fae752214391f42ba7cc533d94a20c817256d
+AdditionalInputB.11 = cc00f2b07622ad7b40aef56442eefc100c68d1ddc4c47dfaf78046cd6f5e2e0919e1ffd40406d90e
+Output.11 = c7a0f302c7005c1010f3797875fb4daa0f441d842886ec14e838fc9041364e4e8a315564df671badef5fc65e13a3b8edce4c8921eba448247be6ae02acfc95c9
+Entropy.12 = c641e9dac408e8d699e895500194e0d6e2f6d520ae0067662cc4951376e549a2c5585ea13d00715c
+PersonalisationString.12 = 84a585a8ef7585c5858d4154b5a64bd12ce2286fb953586d1750cfc1abbc32ac7cec7701464f2f69
+AdditionalInputA.12 = 3d20447e1a80a8240c91f3b7382f61498cd8e084c74b1888ebc98dfdff3ee7cfe112e720488df24e
+AdditionalInputB.12 = dfb006049ae7727d44baaea53d6f87e735806b77432f0b4743daaad749ca737ec46e92cd1593e582
+Output.12 = 9abe0d0119b7f3ef7dc17b18a41ad9334c9189bd1d512f7564ef67b868d5f88816812d8f58544559fd0f4b4bc67a6051f32505de3824cb577d215e516bf91d6e
+Entropy.13 = 36f4a1b03004f70706eb81f387a23068b8dfde8dfec87dedc9a5c7c996496962764d7c8fa71e64ef
+PersonalisationString.13 = b349171ab7bd18e28f612be9955c058e6a92d38928620b09330d2a7bcfea435fea1154943fd0a889
+AdditionalInputA.13 = 3d84174d192ef02cbcf05765228f21c796cd09f96890ea6d45879a11991ee16aa619c855bd530787
+AdditionalInputB.13 = 68ac7f7b5689683ab347398082195fc4181b7f3a51a980bf7e21dea756ada3c902044894951b964b
+Output.13 = f430da38eca95274483beac03d6ab7c97821982f9ee5d56c9cfe345a38cfe584c4a289988a196e80272c7cfe8dae88da76534651780947d6fffbc31e1b00d51a
+Entropy.14 = 0f1afc90bb04e27df48e0af7dbdb65ee688372be1b7e9dabe26f034db1bfeb1b14da6280b288f595
+PersonalisationString.14 = 4cf69baf93948aba55fb49471c79c7c4b230dc061c28d4b51134e1efba84c12402c2d24a1239f03e
+AdditionalInputA.14 = 28cb3cecec5705c020d8a3edb8079e004050d480efee70faec7e1b00e256d000207e511923cedb93
+AdditionalInputB.14 = bf2d138b18cd6f6c698901db8b605b598b0c3ec9fb0b14f9b586b791ab6976717fcdda68e42e083c
+Output.14 = febe358e4daf7e1938d8c0756ae39531b1bc497e603f91c7aa2203327604144eb442ad2efee1fe9b1bbcf33a5eafa94c3c04d583631b91fe550daf227d5cc05d
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 57baafe6345db09f64a6dcfcd015026727de8d67bd6e908abdde11e9ea07bf037c9261fd0fa91ff9
+Output.0 = e379a1008a571cc7fb1f71764c1c1a7ee8e0752df4c038b2b162e0217c56de4e5d2a52b85b988ece21b21101bb13f23c382f812ce3110d944a594bf6831273dc
+Entropy.1 = 1a586378c366af5ce003ae0c0b970ba8b4cf981817d50124cb47b839da208e929f59272321980ab4
+Output.1 = dd4f02fe69efb5cc0076da25136f73673cf2ba38635b5b1dd79babd621eb4c2b6be3e9debf43a7a2a747f4d6d6861ea1ad32ef708fc98d7bcfe1dcd3c715175f
+Entropy.2 = 7ffe0a1a9d05e3acc9698088bb034d6ff79a4c45d23a1544ccbf94e4d4e5be2b8c902d63b75ec976
+Output.2 = 097845f09c3e70d957aa6b211fdfbc83abc4e5224d0d40123ef8c9443af46a273b6f9985b90253744f37602c9b7166458c370abba3c9701fec7ce3e78f340e44
+Entropy.3 = e9347596bbae3b2b2f8fd1d9efe8a166e299f37adbc2cc0b3cd632da860ef7be44aec3f25a74eaa8
+Output.3 = ab53f7ee10f3d8cd4d475035611ba5182f085671494c7150bb02b1e59ef4fb2a860f72c4de85bc68be372d727433a3e2416c431f6fc53bd5cbe3d2679d00e1d3
+Entropy.4 = 34a6ede9f5bb071152e94b84b368b4d0d62a63acd72ae56a42402177690387a4bdb8fd82bea0d171
+Output.4 = ee876399e8c241508a8ffbbe5153821707cd064894346ee7fb88ac30fa62d494cdd4f8976480e507c6a6c948405746c96cc4f00d041be9182154e8682de283e4
+Entropy.5 = fa58bfb2ce5f121c5f13f2991d3fb0736a3ab6ec1cd7ecd0426672720cb0b07d1fbbd76e5ac931c9
+Output.5 = 47a86ca530d6ccaefead5a7ec0d019832c99e3b57aed50af0cac75195f772cde34353e965338f1d60fbfa0a7e0b3816f84c905f7bdc1fc07b7b0c428350d4da0
+Entropy.6 = 4eb1ee447c05844a85e770ad9478fbd7125ea6377561f5e882470c2eab0307ecc0f089d9a59a2f6e
+Output.6 = 2fbecb749c54aa7ebdda64ff253348b98180b7893deb49d18a0f9a162bcb0e3fd1eac4bb8a6bb5ffef8d4245b1291fd40d4ece23e02e78785690d63987879f39
+Entropy.7 = 776165c87cc4171fdf11016f3b5b7f0acaffb67892cb4815671fe6a7766efe4e1c9f2e4e09017ef1
+Output.7 = 9728973ec62f1b4b3b2db905f0c19915795f9baee47a36cd0aa02f02dd9b4dd910b2c0a9afef7b290d1f7beea3c6f28b5b276e2f45c03ab605a3437f6e398981
+Entropy.8 = 13d485f361e68caa91a9c27fa4c8372db3b5b8b95c44c40c8d61071a6d9eb0f82a7aaeb11d76d940
+Output.8 = a09795c74650dcbc1a75072b8787d785894666dd24d8f621912daafe7d3416b9d76d7bd5f9acac960c037d00d0d9703e4f8a2b191a7e283c0db9ea57ba8f6a6d
+Entropy.9 = c0ebc257f6d3f56f86087bf1eacfec3f46481afce792b07b7fda4d19cf0e3da71d52318a50775e9b
+Output.9 = 102db8a2338c29d017beec793bad93738e250a43940ddbbc30c9f0cbd05342b47cffe03fba8ead1381ea365f4eb614eb00af4270f8f741dbd8b04f9e6726f7a7
+Entropy.10 = 40347a0b9b626f0d3753ae0014a0dec01c51e230e409ba6bc3aa016872e751b7aa7bc8a2acf6e551
+Output.10 = da36b36e21ef4c31b16342991b807cd61b739427a50def5b0b7735a5f1aea3e8229124b67d31ce62d786c913c285bb3e1baa393716ed1cbf0ca19293c1055653
+Entropy.11 = 6fb790f15d63d4fe492dbe2fe17da1b709e6263cbbb943aaabe1372d1be2345c4e566713f5d8dbaa
+Output.11 = 8b345af7a088b4e24553c7c34cadc8b08d15d6b14542002918a13c4d63998fcadae168f2582d481112b0bb0c89c00dc60e6cc3e80189e57cb4cd82ed00487438
+Entropy.12 = 977c1f931f8ecca7d00f61a14f50a38ab918f566ce4a06a70a584a423f70e7de7533d86428a70170
+Output.12 = f1e6ec7f2b20f3d277c49048c9ef51ceb93ece9130886c9ee9343020a3dcd19fdf62de2435dd0ed9b4a4728a1dc56b725bf27e33bd9013febca445c407dfede2
+Entropy.13 = 5894f4ef7ea2392927cfa21f61faa0e1b12ee4458c76c380280e0daf3de221512c87da31df073bfb
+Output.13 = 0ad3c8e5ad0cd1f3308f882f9aa0aa5f290d93b4a2045ceb867991f2640c5276156bfbccada57031aa8e271321a6ff1eb25fddde4f40a106c6875a99816c4a0d
+Entropy.14 = 1f5f78458959b3cabd57a556a8e70c364bab260ad5572fca41fc2bb64335fb888a31cdb37deef5d1
+Output.14 = 0c4436f75415d0eec411f5ba0d96fe333161c2d6faa30f6d806dc457b4123b7b2b65cf7bd8f4e699c563ec0c6f45ee37c31b3c6c11c28927b77d53053b0057a7
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = cc74ffbe7e6f6fe7d1b62b794d6808ba2548b508719d096bc1f95036044100dd1f212157f2c90604
+AdditionalInputA.0 = 27a74678607266b12b58119bee78d29a75e78adaf01044375ec0b28b167f0d6b0ab58b29d98d4c4e
+AdditionalInputB.0 = db320c06ee06cbf33a2a6a1f9d076a874e9cccd8d52712b09658a90ea3ca473a01e3a647dcd5dca0
+Output.0 = dddc9dcec1f2d311ef2bf48a7ce07b91f86e5c6e1053bbd52613f05591985ca86445b57d68b0b38c234804b80a0b837745254d7b09e00d4552d0fd8256fb40b4
+Entropy.1 = 545720e8caeece1666e312f03d1d2d4735ef88990134304054f2a837ae12fd00543e740c184bb600
+AdditionalInputA.1 = 80c387388cac8bb690a03f4fb95f5adf07905df885dc100d839b221433db3a06dea5bdf8fdf468da
+AdditionalInputB.1 = b078fafcb5b13135c8281fc9a3c676445487f2e8f2359bd9b052b217b4bc9bcae8d8ab499c7eb564
+Output.1 = a51dd06c6cc5dfa8b65b528c458174a45df073e2370aef580bdaf30ed59cff7e6778cf557669eb8955381b0227fdb31dac2b8c9e5c9b734d36153263decb8eab
+Entropy.2 = 852e3056591254ab4ef34b76d69d64f25a0c93f0e6515b8e086cd4de08a98d6ed8c3070433c9b903
+AdditionalInputA.2 = 43fee083c3c436d5293db7fbd81056787f9c0874d959c2ed70310dbde628cf347595a48db8c468e6
+AdditionalInputB.2 = 6813759812b868941ef944ef6c26d5f7dfc8088e9644259658ee142a216b39567958bd75509ad3e4
+Output.2 = 4c1cca3673a09032c82529ed1a03e444a5e18f39190745839dfe0ebd0a5853879628853b181176c4ce25c2ac6ca43af50cf31e5fa86da3a26c9774f76dd38634
+Entropy.3 = fd42b0dd9cfdbfd4657c0cd3e07bb9d27207e15585213c2870047db0cfbf951d074e061dcc9b74d3
+AdditionalInputA.3 = 5b579af643e80e6fcdc4d0a26b25489c5336c692f2f81d8fa79f1e05f25d5090e11ca39c3949d103
+AdditionalInputB.3 = 6a1d8a4ac63528c9de6f94b2f2805aa03d75ee57198eff33597b44eda7b846ad6f80f9b69bacf518
+Output.3 = 9c0f52c5ece0ea753373ff21de631caee3f1238e294d2c2378655ccbe7b737f760dea0fd5ab7e87616ba4fe47fdcf43911ffd2662b811cd90a034d65b070c8da
+Entropy.4 = eece18cb9a7508084d22d7f21dd5c6b60279aa4520343e2f73cd3349fce5d39ee054bc9f2240a097
+AdditionalInputA.4 = 067a5f0d24b93c08023d05df318677bc9e5a5de77a234714fb90347e057dd23d4e06902a9b742ec1
+AdditionalInputB.4 = 1a653e472bb3c62109a6cabb84da8e2ffd1466b3c56b600717d764c2a36d45d8a3eefefc81b04fc2
+Output.4 = 3bd4b4b9a61869e2a6215e62bebc151aca2789491d4f46d196ddc48429335e602bcae297972c7a275e24f0d3282aeb1dcac0190c1cfa2a39abb78984c3268981
+Entropy.5 = 7869c8381d5b5acfdd650d247fdd92ad45eb9e73425d6c0785a382797ca06f0385a75f61b7577715
+AdditionalInputA.5 = 1bb9b77b0f81999e234b83417adebf5c881c094ee00c6130b18e891a3b2ae73a727eec0a609939a6
+AdditionalInputB.5 = 69433acbcf7a4e4e81f62874c467a433e3e70c0eb388910f690bbc0ff2d0e031f24cf95cda4019ae
+Output.5 = 79a032408cac31a8ae172f3e5053067270353adbb86ab09fca3ea28b000188e3045088d9935514c20e45b062a931c3efb26bc67527ce45102297643a6132dbc5
+Entropy.6 = 6ed54582e1843bf73c640a8c2c21555e53d3336b907261cddce6416d7c0f30c0172d73b3ca075888
+AdditionalInputA.6 = 621d44c3647864fdf26537c9c3ccfa673dff50dc12dfc0fcaf2595368b9e981a8bff770b13e051b7
+AdditionalInputB.6 = dc20fad615510c670f050fcd2e8dbb21b79b5c8b23211b38b51408de1d3efd6c02cddc376f2a6466
+Output.6 = 2062e160a8058fb25bc3a7bdd3e779b3cce1023182ced492c2fa723cbabd187e1dd0a16f909061af6cb27048ab04e742b01b8d73fda2b5e762e0e8deaee4799d
+Entropy.7 = 201fc40bed94041b709e1569d9e56b7e09937e902a98141e4b39231ae62921e3afa598064f1c211a
+AdditionalInputA.7 = f1e78c5c601a0affda21357cb7a5f88f433c39c7331f29a95d838d34e20e1bc8942830ef49738eb3
+AdditionalInputB.7 = d57b5db4cb0ea1e69aff38e300efc9a0ef0ed971a3fd1dfa5212a3111678d9dfbe3e2fe6b1889163
+Output.7 = b7e4ff93e54a4b66a3ffab378ab29bb0c8dafbbb92bd228f503579fbb75c0ad6d3b56286c6d07f194d53b1ab89f3021bead480665006bc489aa946548d8bc8eb
+Entropy.8 = 5f092c7a9ed3524dd41934798c773dfb453e3b85b9a99777dcd501ed86628a679c19071c2fb4af61
+AdditionalInputA.8 = b951d1acbbf15b5189383107261886e11f29394204a7b45fedc9868f529221f060e8c08b10952c3c
+AdditionalInputB.8 = edc575380c88c1ed0f73e89c99f531a9ffc999d3029aa5804cead2bccd21177fe40ccfa2be7e9db0
+Output.8 = a4fdf4a0ad50e629092c75c70d5b5404ddbde68772d1b8bfa4e07d271aa0f640cbd629baf0708a0c43543f48ca98e39cfa0cf3f5f7f2ebfb34af46475df52c36
+Entropy.9 = e7e4f76995b062988284a5534d4388022fe755c11f4bafcc1673514102c126f808a09262ea160cab
+AdditionalInputA.9 = 6aa43b7febd3dfc99942e2c94e54dd77629b92181228179d6d933bd05841fd770979e80a929b6932
+AdditionalInputB.9 = 41262abbb42a1db32059209455fea441603b5a1abe50b03da6777fd3947e096cd21f920eda4932f9
+Output.9 = e4ec77ed649c1093b8416a67b63bd22ca88300016da5f18d76197e06cbfb84c05425905c960d6bbc1f127c183d41236f2a68b33b722fa0627775ceade25870fd
+Entropy.10 = 6480a0e584515033712bed8be6429705b5c8ef0f7d3b15c2c51950d6d7cc0a79cbcdd7104c19171d
+AdditionalInputA.10 = 4a5282fcd80200c949c1dc89a5827e06cc1760db5391552c4112eb4f92f34497ed044d213eb79021
+AdditionalInputB.10 = eb4c2d77f58bf8267c78ea8f856aff8957b46f30c7a0fc8b8ccb6050e515c3e6b02b05f33634aeeb
+Output.10 = ee37117ca5e14c4ea5a819b173757a53f8af9c4afd8e8beeb11046d988f34fa07bb0ef4a4ce4d20887d183547c597ad2a62137750c07e5c78faafab102461786
+Entropy.11 = a28b2722c092e5c045c64b39d9b967cc78ffedf34df74b46465767b37f263fec5b31a0ef98677151
+AdditionalInputA.11 = 97946f86e4fca64f74aa0e72b45eb3c1675599e73eb6bb0dde326a3a2232beaaa9c738639e9814f6
+AdditionalInputB.11 = 38bf98b3a8db1a6dced808c17e80d6df5f063ef90cc66ccc12321777c4eef925758d266f8d6823d4
+Output.11 = 1371f04c5941f9a143d3294b032daa20f1475d26d17ae513db95a6b51ea8c2720b5cf6b947b93d4e475277773bb143655726c22025e6e88e1db2bf2863dd8dc5
+Entropy.12 = 00c2fe57d0fd5e19416038294a850653e4b06b099fbfa7382f17aed4369a2f6691e6dbc96ec4742c
+AdditionalInputA.12 = 23f4d48e7274e878edeaa6c0ce1945a553b18fd95fa0bb697904b13493a0872464c26f7e731bc576
+AdditionalInputB.12 = 9310a5fa970860fdac7eac5956bfdfe55274762f8632df4ed0eb2699ccbcc40198cb9ae54d3db29a
+Output.12 = 158a65e386fae7fc7b7e0219ee4b649c19d791c087c5a4ef7cca643eccb792cda970693ede588b38527257eab8d5c06b177ff5c25d6b0144d3b74211569d6401
+Entropy.13 = a58f5ec72b92792d7402a68f56e19af28ab91035de488caa6b604c21bfb1a28df5eb40fa920fad89
+AdditionalInputA.13 = f810865397d90143abc8ba97672d3c563be3ab43c6dd2044522b482c92d7a4c3f85e8d5f089dfd2b
+AdditionalInputB.13 = 4c4d4315392e711fbc97ddb0b189ccbbeb0ee71f6577b4109a624e5aaeaf90f9d8619e897fbda46d
+Output.13 = ef3c1b445d237be95885362d70ec03a0576b4bfeb6336f203b0f02b68eb74101d358425af50b2eb0d7d3defef2134bcc4651faee751bcac860975868af9bf533
+Entropy.14 = 78d123f6524e528de8ce801188c08d85f6f194c9fe546fb440714686965d3ca81480b521b48d0c90
+AdditionalInputA.14 = 320c3202d710d62b04bed6cc1d45b6a3fa306522b94cb7037ae7ed660978fc3c05f6c269c806adac
+AdditionalInputB.14 = bf6b78f3552fab90333117fd2fcfac3af10c5e4dc0dedc581b0b15b6aa579e576fd8b10a099d05e1
+Output.14 = e9690cf3a6a69e92e56b8f793c2a27d2ed3c321e61c2e59b99b8aebae74aeb9f810348529386037ff4f1a9f525aff494f8817b087d67817c9a7547e56109224a
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 56e7810909436856c92dbf07d1269ca58783843d264ef6842fabfd3db2f66f37451586e0941ef298
+PersonalisationString.0 = 51b6f2e1653eca3b36d76fd889f7d02fbfd64cddd40447f84ab2044f49b0fa5c1ece0cfca466ae49
+Output.0 = 4f61101eb141f484c699779a92953a3629035ec2bdf104532955aafc140bb1f377078062084d91e80b7fa9c0f171e5fb0970d1a848704ff9a0edb8ef84a7a104
+Entropy.1 = 7819fa7eec40ed26d4a1e8fcec1c0c57908282eff666670af8aa3085511da831f12b24afc7728c1d
+PersonalisationString.1 = 95562e4c1a1b8e1d022606357cf13d6ce280a525315e899b33efb5d6765cb1eb3da2d7abdcb01658
+Output.1 = 81f9877a41371baf63f7e4deeb2da10985fda9f5016f9f4db08ec6def810846381183fded877cfe41112774512c2b03501e7f3daf6d3a58a0cbfd740fe02432a
+Entropy.2 = 89121d4c10a89d4392dc9b0ae57055a5df5b9bdedcafe1c7374fc4bb17b5f068abd22d576882eb66
+PersonalisationString.2 = 3c2f0798ee6761391129eedfaa483db1cd3c18c27f3806334f7db3c10222bb8bc5fcaac238791941
+Output.2 = 7ee74c8b6da5464748801cb5dc162c40713de80b810f5b01fd63b0a5dc2710f490f241f9fb479c70512cf779bc57ca02af85d95603922ee579b9016a5434fe71
+Entropy.3 = 72e2d63d87994b5d55fb2577d101ad23b6447cfce6b2700c0370f77ded608092c8746012472fab02
+PersonalisationString.3 = 0e5f579a1aa4fef35a701a7ab3664a4fd083e137d9cc13bdf0bfb0eddf0b09525aa15d147f0eeed8
+Output.3 = 63f2f8591d710db0da153fda01df95f50e7de32ec2ea06f89b119ace8f2824a5602c65f8225a6436efa310a60660afee3e602b6cb787249b3588f63813b5ed1b
+Entropy.4 = 07972b0b37646c1222df2ba0d85181f652d40113a6bd5a283b7b97087aa391ad3e9a2c2947d261c1
+PersonalisationString.4 = a94ccb58b7dd4ea19d327199ba1a68597757c518ff968e1821a741f30ceaa4e0664d0429b609ba68
+Output.4 = 4694465cdcf2f6bce87f3891309d203f2ca734c28a25efc09b733bd5d777fee9c0bf6436271ea20e61c859359c05f0320fe9b2cce54478883ddef701a4b75564
+Entropy.5 = 7609af59f97a0cf9c0119cf6104f73fd697d50ca3db124f2c58131b9fdb9416978d1c8e8ada4ea2f
+PersonalisationString.5 = 6ff564309ecb6d90233f8a3bc52bdda689e50cd4ef42d48dd93a81c55bcea42cb8fb73024a20de2b
+Output.5 = 175ca6d0ea7c123e7f0e1e2fedd56a5afa3a252b9e2d8fc45bc327e24e601e7d4c00fde7c95f7513b9d641c1382687f907940fcfd26129c6620df4f59c552b35
+Entropy.6 = 7d4a89b5329964f3a4e5223ed6017ed53e5d7657de24ad8ba5049c3f5792e01623a6526e61e9468d
+PersonalisationString.6 = edd4cf254ad4aec6ae61b5b9e0cc322a5824a0ec0fb573f76010476d1126221fe0b8f2b9406b91cd
+Output.6 = 8b923d8012f34edac5e46a981b0bd221bf040d04c17d01b4fa5bc2fccd123825a5e17008ccff415a1e4f2c8c521c8ffd8d3648050c9c89671ffeeba518a2c1d9
+Entropy.7 = 787edd7aace306ad6d0c6df8088f32742bcf5f321fd5f7fed9572828259fd06c9121c78dd1c05b52
+PersonalisationString.7 = 85ef86d298feb95f723577d5d26fa22bcfa616981e0e9e1ac1d544ec3df76570ce7da8c4e4a958db
+Output.7 = 1e8af0d212da566f133a883722d8e172d6adb1f88e29d6efee447c30fe603a63017e6227ea9dfaa8de093dc17c81a3310dfc86b3211d9e1981e853b0d347cda7
+Entropy.8 = 01146f8c697ddcd7f85a59adbdfd1923f0ecfaae889c488db43f9d4c367b626b337eedf917c31977
+PersonalisationString.8 = f678a43ac05383dbca9267ff2305052e57064b6951c9e7e9c826ed868a34fb0d0b26160f063c5804
+Output.8 = 402040348372f9de0ea4478a52deba7cc55caef57b7f193ba82af529e0bf752fbb283dece68766c848db0dd5c49a2ab1ddf625555a4fd1c3199aa1f402cbc2bb
+Entropy.9 = b00a9060861e78f823d03f319292b612b55a4c90a1dcf3c45deb9455cf8d2a423cfbe7bb24a5df04
+PersonalisationString.9 = 611f2d5b2d0004617a8bb02c8e4b083abffad6b6bd7556a7c27dcf5c7c6c8330ecf7a9e883cf49e1
+Output.9 = e051872f5ea13cdeb7e61ce04509ce3d4539b28c0529cfefbfae12a750870b68fed89b31e87f0dc3d589f9d1a81ac4a9d4b356c1cb1fdc14f03a2b6758cd9db3
+Entropy.10 = 3462a92cd9ff516797b6470da1eddb45adb86b544916211129b8ebc7f4406d02214675d4f9b1b1ee
+PersonalisationString.10 = a392361e6115baa4a581068a6e37665bdc12d45b8ee656fc3b90b1ed0135b7d2f5076b680dde61b4
+Output.10 = de08a5acb675a79abdc306da7cc6b7d48d88930d7792c2ed35b07c4f9a4d3a6dbe770d4745691c7600807c78b06c1cf4f4e0de88552b74c87c37572d3f0f9fe9
+Entropy.11 = e867360a53e81be2ae58c46d96a3ee7cf7bef4b1fad35fa717063537b400d46918695fd33cc4d34a
+PersonalisationString.11 = dd54d982b763d9821611630f506a20216b2954a2032e31ffc6395679832e9b3f568a8229d30a1cb3
+Output.11 = b5c904ec3a17ad53a75c50eafcbe6b5f6ea0aa87c12e2d2f8f003f536e63c1b043e0b55a7a5c159fa39cc5e460def5040574a468c5e42036b5a0b576fea6dff3
+Entropy.12 = 8fd94c6a498e59e0e0cb2f3c189cf6a05aaa3834ebb19fdeaf1c902539945cc6ec6b2d941479962e
+PersonalisationString.12 = ba96a9071c2152729f7884e9fefb1f958fbf328377e25118d6f9cdd90130d41b5938ed5d5e826fb4
+Output.12 = 58e1829dc531af06c32665bffa77ff9a71093c17681279a7145eed5490bcc345b330ca5dc3448249fba19fa4a928175f2bce815b56c91ae965852b09a99b015e
+Entropy.13 = 27d6ff3a4fc4698a9ac240f0989b3d590b752d2ffbc5f33e2f495acede1cb9f1732f538b51591c3e
+PersonalisationString.13 = cbd776e07dbf3f918f3805f39c8cea89cb7ad6d20f511b8b2ad58484741288c4d2be9654f5b67912
+Output.13 = 958f9f61add6bfc98509350b605201426fc83fc45b5383a58dc84e3ef8cb911cae5a3bc6f85563df0c216fe8cbc8ea075379421860913cc6cc5cf81ac5706710
+Entropy.14 = cf9477ba033c5d2324dd97b69cfe59d66ae7f7327aa928ed1ad36c2d9d63be731ff2de9b29aa87b9
+PersonalisationString.14 = 215a3e638fa6a74d91592b07fa08f8d4983c6ad0820a908ba735ac5bcee68c3f670f6fcf4d05b25c
+Output.14 = acade190508f25724a3c7dd4d960bee088cb6152f31a537295a8ff4b85af94a0ff006be9ce2f541b8237f6a7fc62a4bb8e41ac6979a6f112b57158aa6eca347f
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-192-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 657507b8ad5939ed5eac214151fa9c0d644f2c6ff7cdd933e3ee0dc5aeb9a364aaa09a3526cc7db0
+PersonalisationString.0 = f2f95ebdbd47d0621263b1215cd107e37a772dd991160d40b8288d47a1a9903514499d055b68aa6a
+AdditionalInputA.0 = e8e968d249e165f410c757842ec1a6bbcd40566db58653b2eb4502e75113d81d9a20dc099a2024ee
+AdditionalInputB.0 = 4645d7326d1f39d04a14fc395acd19fda6d1aa755995476eb96a192b8963c5890798bdffa185598e
+Output.0 = 2824059c8c55c6484144142cdf7f5fe10ca7ba04730ed324166aacad30409718418355328ed6f299d1fb2511bc0696ba99d1305e94411d8f5bc763b57f0ccc8d
+Entropy.1 = 3b99ff3cd72eb3c7343762a4497558db4b61624dcd7e08b446b1a67ebf602246018d88cb30b9048d
+PersonalisationString.1 = ee5ac165d9cf679816628bd9b1d844b6f7e8135f7dfb5052737502644fd770a9e61375e6c352efb2
+AdditionalInputA.1 = bf593e6dbe9d7d6db29d0ef354fa6f80b876440b280d78d742556d647e6ba8920ba2a8a34e93511c
+AdditionalInputB.1 = afd1311c6c6e9ba3db070dae8c672159806dae154efcc7096c57f775311916ab5b86de1696476e64
+Output.1 = 4b069625ac3d765eb58eb2a3a5068dc1a1aa7bcb1236d1caf99d1b8df927d411a37cfa280219dedc82e84d73caeb5a40e93833331f1f7d9de69b5c15f915cbb6
+Entropy.2 = 644e1637b67c745b013798c14365df4aaa55a19640163c401c0e1ed5ea37e45ebbd7430d5dd29c54
+PersonalisationString.2 = 7260ead1ea11bdec9c34b2594b614f916c1eb207a459808eaadd20038cd8d66a974e151030e7eed6
+AdditionalInputA.2 = d1d65242fe65a034924221ca0cfdc9412ece33726b20f57588e6f4eba162461ed29ef3295e2e458f
+AdditionalInputB.2 = 1d3af36b4a386fdc6318d16057ed5a1673d54b96bef3de9b62b94307220848b541155d7c3e739bbf
+Output.2 = e0afa3a20737e40ad7c76ba18affc2e737a66246f61668b705da53f6d3ee50414140a423145d646bd1b84967867923e6c21d5750a9796260b9bcc20dc5c8a04f
+Entropy.3 = 433c28d682ef8611f2227ebb95ff186104a6d6fa725b9a44ab1925ce6050efa26c94196baa71c31c
+PersonalisationString.3 = 9ccafe8155a2f7936eab145937d84e268eceeb1acbe56bc050079c000ec0a323749fb046b3b7e6a0
+AdditionalInputA.3 = 3f42e84a41917cb6fae04bb7d0f7f15be78bca187b9622d7bd578ea2b45a0195eaef5a4eaa34e641
+AdditionalInputB.3 = c3387a63b7c7def0b63a3c4928a693943b184c719605f61da5275a4913f97c39d19ad14a87271e97
+Output.3 = 9b81845cac191550cbf425b990988627e4f7d4214372780ffd4fc90c4cb211f145e38a687943065e59e2715a1d70730a804eaa17c374a6569719321236fa5a67
+Entropy.4 = 5d133672c896c7054ddc1b1e460e325e4f405edc2b188a483ba9455f0c556e9538efc7b75b871f10
+PersonalisationString.4 = 4d07833bf8a63efd78217110cd608d416b12807bcb379eed985a9db4cde85745391d5e29799a8ce7
+AdditionalInputA.4 = cc43f820e2538bd7d04e8cb646632774af1e33396dc816118b7d06ec5c564d7925e18ad0020e9705
+AdditionalInputB.4 = b5d3258ddb84b30ef6fa82d986c729540a844378c532bd1e2e6ec2970d0e61103c635743ed016719
+Output.4 = 99e364b9dc1041282c85358aeb6afb95ee622d6db471b9e3a922fbde4ba289bdc79bc71f7730b9df0d925fd9b88f4be8347b72fb5e6783041a8aba5da565ea58
+Entropy.5 = 8b51e47e97fe04ec1854d098d85353202ea8d5633516565946d5977b6287eff5233f60a5f1ede325
+PersonalisationString.5 = dbb35b3952ab971ec0dc573ae0da644b2668469e8e6b622161d6e1983f956e8117a9724ec318f257
+AdditionalInputA.5 = 75922b8cdf29352c084ba0764e0afbfb51376b6a9b62fdb71d850e72fd00d25c2f08c946b5f28874
+AdditionalInputB.5 = 9e641b0d6011bf4eeda6c938c2e3b2da242846ed7ec47c54a16185ecd48106fdf4c7b9f14292cfb8
+Output.5 = 99138655ec9b5767ad48acf3ab180d1af1dc1fb19119eb30dee31e31f8b5f5e0327770a1b040ca547584ecd57ee2a459e2661d23d90bb99f20731ca642a8c782
+Entropy.6 = 801d684b981c8c77351b885f52e68e026f7bf1ce1f4183fe787e852431a764479076729ce581813b
+PersonalisationString.6 = 1ba2223258a29fa5d7f193925dd26903816306f33007b6d6b9e066bc96c8c0b022f9cd9f881210d3
+AdditionalInputA.6 = 525dec25a293e590fd8f776af22b54027a8d809a35ac3a5e4699db1d75598c1fc0c11f9a201fa173
+AdditionalInputB.6 = e008dab184d7eb4b39eda3845f2cf6f23969eae1fdef3433332c9d6f3796e780a05c3927571a4124
+Output.6 = 895cefdc9fd19c50b205ff5b6881fafcc0892a96b6f73e1a4b74c706153b8f5df518ccdac28d38b82fcaaad7be828ccf9abbd5b5b11c8492121e8b63941737ed
+Entropy.7 = d15714d5d3f80e19e00483b29ad655a368a1d0e557642f81f84ae0c3673b741c0b313ed3dcd475f9
+PersonalisationString.7 = f282b32be807b5787d891e58fd60f4c29d263732874e38bc34ee2846730385db06a1a4ac64878e26
+AdditionalInputA.7 = 8adce445cb08c345f99c1196437434dd75c21979fb448459f7d81b0f2e21be1f48ce46241bea4a37
+AdditionalInputB.7 = d93f0c5179b4481ba348f37d7c320befd209b74bee451d88211c997602c9fb6c3b2f77a2506f5fed
+Output.7 = 34707ad1e493e4a8132e1c0e4d36d690168a91ca797f249604c2d1b3204c17715293c367bcb8ee009b3f1a65ef8329fa137a129b8f7ed6b36dee08ad8d7d39ac
+Entropy.8 = 08331c1c32f0b3e87a9a0e092e923a8a5077a7f0a97a8799b864587e674b1cf65bc5c928dc9e5557
+PersonalisationString.8 = 87cac9117f0677eb958770893ce2942621188aa95a1096f6f37d1beee1c76ca40ce953eb733f819c
+AdditionalInputA.8 = 2b28715efd8df936b396bf9e4ae643977534dce1a49bea8f1cfd5017c2825ae21fa52fc85255f4be
+AdditionalInputB.8 = 9cc6335edebc664131f7f442cfb51551e3cc7f6543d2ac1573cd77f4fd7a5ca64f945debb460be1b
+Output.8 = 26ceb5a486a32fb5bcfbfb6f4948357d9ce7b763b7369a676a0e82dc08d38cfa5501300048cbf3af880b9871f79ddd4265286068ea2617e9ffc6c2ddf0d8c21b
+Entropy.9 = 9b4b5587ac119fc85f332ee3b93279da42ddc56e45dbea0c37b7e8823f1ad640aad498ac8c829ca2
+PersonalisationString.9 = 3092ceba2cff80ae300381c273378e82f4c094c85a3ac482eb71933a6dd7ef4892e7b0527d921bcd
+AdditionalInputA.9 = 99a3a0356ad462973155150cd9ad8332ad30a601504b289547202f9c3dd3c5484b9e395d50528b8c
+AdditionalInputB.9 = 02e87c363ede7dc9bcac1ed6c58d26b1e885bd2e981620b57251205fc796e8ed85a8ec6253f5dbbf
+Output.9 = ab072edfc83828f1716e8220bd5b17ac684e93e4aa2257e8992105f994851e1142a0bc08c076f0cd1649ad4474686474638d8ff5082b9a49401d479a0c41af9d
+Entropy.10 = cdafec5639073ae73340e08ad9b148ddb396a9cdc5aa369871046c1d9f2f3921343cffe86e94ed64
+PersonalisationString.10 = 36b461e5efe053b2448b5b5a35c0e9ef537713156c4c2f3e6dbc533202d5846258144fb2e2da5921
+AdditionalInputA.10 = 6f16f4fec208bb8f382108f0a13730abcd61d7fdeed53b50d662bf9a9723f38c62bc3a23e76f8f4c
+AdditionalInputB.10 = 393a1d49233edafbfefd3c51971e0eee1c09caa22d9036060c70cd8e9fe0c304223ebf88144f928e
+Output.10 = 49a5e95ab4ad79251a7c393b50443bcae133fd30cc06e6ae1469d2ba83b5a20ca35d91224c0185e4aa6e524ab7ec9164e3b73dd06aa65c99f957ad56d61c62e2
+Entropy.11 = e4d0c3058cea48142d47fea3f6f0261f3f572aca439a0c7405b7d23eaf0753d93f6f98535d818d3d
+PersonalisationString.11 = e797910ff6fc402adfbe0c0c44220d77fa752a8bdd3bec9ad3088f4e971861e95351268ed66845d2
+AdditionalInputA.11 = 68e9c99b097a9e1c12a98f6ecb6bf0c4fcddbe774029e55f95d14199f9d7b4d2c12dcf3b94eb8860
+AdditionalInputB.11 = b12f831fed05567c7ca308a96b0be354d8b30f08a508b1ff10ceffd325284b8c6909dcfe1683d06b
+Output.11 = 056ef8bb574119832040bffa1947caecc56c4b57db9d30567b195593d77fa8b507408b365a1a0a77c4ebc14d55e09587494183e0bfcaf6583ac881005b86aaf9
+Entropy.12 = 9aeba41a33ed683cb8e69dd3c66b618669ff64654051b0b7ad3d8099c0698b47be3121d0a16af8f2
+PersonalisationString.12 = db20db8d22bc9040023db376e0050a4c08268ebd22a902511e5e7ba4d00ebbfe20c41cfd6c5f4f22
+AdditionalInputA.12 = c5b6d7c5a15d120737ef091ed79e11cdef501ed44438619216caf90821fa9878f5e7612b892fbd14
+AdditionalInputB.12 = 9c9aff5f6a5da0c06721862b9e04121ed22f390284f1fb6985a495092fbffff200011871aecc3b38
+Output.12 = 301b7f2f5ea8c15f7f648a979da2a81def9ed48bcdc68c7397d69b24744a3de53285f4d13e41a56799018876500bda8c444df10384133cd4cf6a8e86e6bf5c2d
+Entropy.13 = 74973e5420381da316dd04939748232b61731495f26f92bafc84e273f7266ec3e3282eb2f69e1dc9
+PersonalisationString.13 = 830f27cc55579377ffe60a73198408eb69659e9fae444fd59ac26dd4049d657c01c9939457ffc772
+AdditionalInputA.13 = ec4660a8e4f27fd9e704cda788bdb599564babc4474e5fe6aee7b4937059091832b4071955a31341
+AdditionalInputB.13 = 47cd23810f80eb3bcfd07a4b224ce481f4ec2a249173d398265e290e3766eee0a5847d919ad99c48
+Output.13 = 0995bc6018ab4955d4e662e7335b9e1c8146f3906065b3f7214effe123cb0fcb3c925467daec156435bf7ec8b2ac3d988b5790db3c960ceaf700d74a0b8b38f0
+Entropy.14 = 524012bfc47bed3da7a35488e826c42a76607c0d980ca021c9ea9ce0cf6dced5c8ea0c61772e4d64
+PersonalisationString.14 = 3a27c25eb5943028c01996b5766af339061beed2c8d8e773fe08bade728025d473e27339b68de5e6
+AdditionalInputA.14 = 8b981ec9ca88b1493e7ff3b90c02da6f478bfa573f5a0354941dfedb863ca9d05efea9d8835459ad
+AdditionalInputB.14 = 829e75a58edd00d86269ef332e6744723b289f7df8f1c0bbf70222b542b9014e2d0cdd6aaec8c194
+Output.14 = 8c4aa794af3d7d4d684006808c98c11d8146b11fd062c69cac019f1913c457b49d423b5ec683f19143eab372079a6df551fc686d9d6f9ce5f64ef619186f816b
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = df5d73faa468649edda33b5cca79b0b05600419ccb7a879ddfec9db32ee494e5531b51de16a30f769262474c73bec010
+Output.0 = d1c07cd95af8a7f11012c84ce48bb8cb87189e99d40fccb1771c619bdf82ab2280b1dc2f2581f39164f7ac0c510494b3a43c41b7db17514c87b107ae793e01c5
+Entropy.1 = 3b6fb634d35bb386927374f991c1cbc9fafba3a43c432dc411b7b2fa96cfcce8d305e135ff9bc460dbc7ba3990bf8060
+Output.1 = 083a836fe1cde053164555529409337dc4fec6844594fdf15083ba9d1001eb945c3b96a1bcee3990e1e51f85c80e9f4e04de34e57b640f6cae8ed68e99624712
+Entropy.2 = 0217a8acf2f8e2c4ab7bdcd5a694bca28d038018869dcbe2160d1ce0b4c78ead5592efed98662f2dff87f32f4835c677
+Output.2 = aa36779726f52875312507fb084744d4d7f3f9468a5b246ccde316d2ab91879c2e29f5a0938a3bcd722bb718d01bbfc35831c9e64f5b6410ae908d3061f76c84
+Entropy.3 = 37d851fb20ab3ba73b1d8d81f323901a55529c26a8f753d32980d6d2aba3da278b907400a19406e255206e1d0858f384
+Output.3 = 96eabafb45c77967b14a6663a39238306ce58038a3dc0b8aecaf0231c404ecba50f1ab0a17b1894cf6acb630fe165f8a9d7c5412e1bab4eb4efe9ae84f5b4a03
+Entropy.4 = e62eab30b9338593076104ee9c148a6c22f796daedb71bacdda207b19768b5fed5d20c9eea12ed5ab959c143f773cda6
+Output.4 = f5ea040c670f83c26ff2c38f66169b572fecc7283e902f0f4b2f6a4440f5b8970807d58ca01466cec7fb68b4cf952355e780050bf48ad5b20c17c78aa0fc0352
+Entropy.5 = 6245755cb02ae883911c0d82009035715b2304f78ce2a0d8fa22d47e7e1e394fd9a7a13862ef2393bb3818ec49cb70f2
+Output.5 = 3cd590a0dfece30940c11ff243d99e552b531ae11b31a454b42ed04f2c77f2e2f58f9bd1cd0a36480f845256bc82723c2de5c6d15bc8be2040e5ae8b5331516e
+Entropy.6 = bc10b0985a1da8d0bcbced029cf52f0fe12b6d6bc500ddffbaf37a2090356cf1aacb1bf30ad948f87f899c544d115716
+Output.6 = 8575f0f1f959589e2695891dfac56db72b79981c6077de92154c5557c3e89ab7737827069ecc700de18317b5a1fa38c11d675bbb9ba235f153c4f9899bc4bb8f
+Entropy.7 = 0398b1bb37f9673a2d88ef418b4cca3d6009950fae93f08095a4960283329ce75312bb21c30d26b0ddfabf296006065c
+Output.7 = 22816b8c4bcf34f8d54257c217b529cf038b6f6fb1863017a343d50c883696d443fa76c259daae46a763382bcc289de55b224f8db99d46838c951b3e18a9fc26
+Entropy.8 = 4bfa09839da460e5b088411eb312a3c89a858ee88cf3cb2ad4f8f9896bcfcae72fbd28f6bb428811ba34fbe4f8c8f518
+Output.8 = 46a574ebbd566861757680a5a3a050beca92fa6993ba72bced22bc0a46ed00584e61db698e352e31c74af4f5711b0aa1d9d41894ffdb9c8837c38b1b3782e381
+Entropy.9 = 86d115f1d3a154c50b45562a02c955e307c17febecab4d13e0d5b6c7258b4bfeb91e316ad0f87bbc0ae1d09d4d60d31a
+Output.9 = ff0250e026ef966434062c875545bc436605bb5d02877a1bd3fd03ab8752b1963749ea208df53f6c51826434f5c6e6d991845c6154f6b2000de640d030288965
+Entropy.10 = ce4c6c498e5df8b61debfaf1c24c479109c87c7d38782f50bb60877127a5480594428bd7a9fd71fff2fe0d1db3ce6e2f
+Output.10 = 1389f2a6134235e08e7a0b41c4a1b5fd77bce469fb6845e519ccad385d74649f2207c84488556741d27d6435437ad088d11f52265b882e47642402d1c0882562
+Entropy.11 = c1dad0e376aa2c350e0d89fcd24040992c08c141adc373d4360786a08812d2919329b4f5a5fae4016cb7699b0647edfa
+Output.11 = d38991536fb03509531ffae44c7494f05a73030920c2bafd833be1a8c7f6d7416077d0089bb651b96ad964c26f11b31bb0364b4f5e0dc7e11504054b5110211a
+Entropy.12 = 75173e81ce87e7c8d0345761ee59a3fd1c555f37f7c236f7e3aaa5f5ddcb8089462e8edbe4e19aec2467684a57716788
+Output.12 = 58bbc5ce5c2d8b6330c5857a888ee6b3d74b2ba009c8553cc7b8adb51793862e9c9c933959ea73d720786e471dfdd2bed572e25f683dcd6f7e729db0254f74ad
+Entropy.13 = a7c57c5af28a258926838c39ae62194005c93afffe5592a685b150c9de3ccf79c223616674d676517f4bd1a2fc3bd6ec
+Output.13 = a0ea3af0cc95103ba3e89e5e4a6b792bfb19eef9580255ed76e71ed0e5325848497d7757eb5cb319475b77926abb6a2bfb4437ccff0c8356c1b5705d85842d93
+Entropy.14 = b7f7e4e68356b2ac2c2c0075c0ef5ec6f5a6f225a18db00830261a95765771eba739a7cf8a1126c58994c43b2d28024a
+Output.14 = a15e8cc437a600a51dcfb778afa23d577d0e56b004f56eeb286e6c949d982bdb9353cbc63d33d7d397ceb4fea51a6df0b4d6d4cd32b9065bc4110d790c610e44
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = f45e9d040c1456f1c7f26e7f146469fbe3973007fe037239ad57623046e7ec52221b22eec208b22ac4cf4ca8d6253874
+AdditionalInputA.0 = 28819bc79b92fc8790ebdc99812cdcea5c96e6feab32801ec1851b9f46e80eb6800028e61fbccb6ccbe42b06bf5a0864
+AdditionalInputB.0 = 418ca848027e1b3c84d66717e6f31bf89684d5db94cd2d579233f716ac70ab66cc7b01a6f9ab8c7665fcc37dba4af1ad
+Output.0 = 4f11406bd303c104243441a8f828bf0293cb20ac39392061429c3f56c1f426239f8f0c687b69897a2c7c8c2b4fb520b62741ffdd29f038b7c82a9d00a890a3ed
+Entropy.1 = 933015be052c117ad3d38dd2d1d52bda42d7f36946418b006c67aad49d8130e5ec3f0c1d6ffb0b6da00270f77ae18362
+AdditionalInputA.1 = 0e5eccdf748549f94cab63d649145d4c3b84c74a2276d5c188cdebf417bcc9f5f19d4857e76823e00b8f08f8d583a65d
+AdditionalInputB.1 = 12a0ed9afc1a7456f8430d5aca4cab30f75e39ad7012566c32d8c753ae6a9c59e8ee87832faac3d126056bc9554793db
+Output.1 = 0615803d2aa28823445786a7ac9951b14619f2072e8de44acfe00674a3d40feaec07aaeeee947b71c7531c3a93737f3415fcce87353c85258e2301d2842b408e
+Entropy.2 = bddca8a3127ed51edc008acf989f5da82ea0a85b7bb68f66557eaee708fc3729a56eb8f45176b39aecfccafacf2abc47
+AdditionalInputA.2 = ab75d2bacdf132359012aff36ec86795def262c8f4b23c231b267707d94a7a50132fea85702e7a64f90517b40414da24
+AdditionalInputB.2 = 7217ec497a68700500bb44912066c2b2c888fef101e00c320e3c284eb1d49147c8644a85fbb5c1cfe118ea43e5d585b6
+Output.2 = 61fc09567d2977e518f25e68e398b7bd2f734bd5e14e75d1e90ba186c9e478e980c9353ebf2ba6506a98e2b728a205e4070be2a2372d68884cb90008cb6002b4
+Entropy.3 = b214ce72adc2dc030852e8ca0df4209d26921cad57a67ca37ad5d79dac3ad5ca3b649684bdfcf1c3d3945a470818288c
+AdditionalInputA.3 = 2fc207ab0fc309bbcff4314cf41ea17fa104c8849dddba8ad70f3b0193b326d40db33afea77b010b7d3141b58bf9368f
+AdditionalInputB.3 = 8dfc72353e9710b3c55c8385e05fdf992f4799f80762cc8e705713d528df27b2f5188d79394c7d659e27c811daf7c3d2
+Output.3 = 4283e9de3cfd1b995413aea27478a3305ebb86c25b91d020745a7638f404484b8739450f00655ba83507f8a5bdff729134f15d406034a4584b12655a6ea4d69f
+Entropy.4 = 65c208b73ddb55509a4c5001920256faa42caea9d787cb189ecb39357fe890d6be982bb95da4a6bd6b3f92c9baab3537
+AdditionalInputA.4 = 899a22a768fbe6473e4bc7048a1c3e733fc461ade471693724060b774582faf2501b006ecd9b33ee464975da57e8e349
+AdditionalInputB.4 = 51be2181d790cf229f2468b83daa0f0bc72c336ff68b45c2b222898e43dbf86aac379f7509252f735738314b6e85dc50
+Output.4 = 24caef4025ccabc2b6385befb5ef17d54a590c6f0814dd59131da6d5b83d08cf8eaab0b3d510a42658d1e89e0848ef844629c79e62f68cce765b7e9a4d636079
+Entropy.5 = df9dcc7a7c4278423113196d3594406055caaaa88bd1e488f030d1f942ed1f4ea40e40de2c90c6da2ae3d5c540c80cb3
+AdditionalInputA.5 = ce1c87f0fa74d2602cdc750fbdafcd13620e4c70f6e81f095db0162e9559d20046d5f310e094c679371403d29462111c
+AdditionalInputB.5 = 03be90c8dee4b3523c46cd70db0273a508457954e7583011e5fa3ef12cd1c0b379aaba7136b2755ff63382993f4f91c1
+Output.5 = c386034192fc3692a344ef39e682e05da1f583591250416f74060f2692005eb9b69aa6a82dc2148d9c74b889ebfc2ac0111379720a3dd88709f56ec6deb9778f
+Entropy.6 = aa708c17139de7478cc316f37e25d75bea23af27940c0d60caab4ccba6d2f90eaba8157b09c105719f0db550d17848e8
+AdditionalInputA.6 = 07e3649649641f560f3256fd0ecaa19eeda4c051f9dcd98ce0b14d0dec813042d97c0f8fd39b2c8af25ce94caaa1239c
+AdditionalInputB.6 = c21d7af79778b33db512719c54c1fc3fd516f0173fb8716c2bd9edef3c413c3446f593c578b42c849c9fcd4b470e9ca6
+Output.6 = f8bd6c9e55c6951a193a1a694c6e151179ce06a7ac9c50c2aa33a5730e472bd62ca48f523e96554d4eb79697525c409561a516d3b16fb516658d5157483b5492
+Entropy.7 = 4dda7c888b978baa0da81634d354ca963455ff7a7a04baf5e666d618b3b939748c5544b233a73a2a3606a9f43a7995f9
+AdditionalInputA.7 = 3510d964ec19c0959949cd4ca8927589f9da2327ea48acaa880ea1e706cb61a6d00ac597f18123c8d23fe490c222947d
+AdditionalInputB.7 = fdf3d5078fd46c8fb658e7edd66df65da2fdca4ae38aac9318d94fc631221986151969cae002972e6e611574dd33dd2d
+Output.7 = 9c83ba1880a757870198cde86e0252aa9389ffd97dbb3c3fdb2902ba9028bdbf75cfdf348bdc8071ef33b264e2bb74c1613b78b76e5633126edcec296194028a
+Entropy.8 = 3831ae24368fb0da37a0c7e96d4b931ddacb4b46b489be10ff71f61ffde5f4d76c9f17a34236e74cfa494e1fd61ffabc
+AdditionalInputA.8 = ef0ebb9f247039f309f75466b498ed67a4034024be382e0a420fc346d6f4222e87cbe080f75f2382d76fb79b8fb68641
+AdditionalInputB.8 = 5ab786c46319d8d9d6b74ec6f4131d4837b7ecaad3cee71407f1b8697116a173ab1764098be9aa53ca9ef2ee1c6d5563
+Output.8 = 1d6074d634ec13d5f8a084205a048b4200f1edb2a154219707c2cbdf64ab77ff9dfab0bab1d2ae141493115053031fcfb42ad0158442a4632d76f696142c98ce
+Entropy.9 = 1387ff2f0c250f601baba3b604ca92c608bdd8edb62ae7fd57b1fad746343ae723735dc56ca1542c9a943bef58aa6fa6
+AdditionalInputA.9 = c8c2549fe774ea883835b9fbf840d387344de91deee6b5607af72ced771e76609c4620d3fd788775d1d2e16ede8e49a2
+AdditionalInputB.9 = 57e330fdcacc7489e5da1e7316c046c5c3e751a312077c0ea17c2af927e0dc874b456b5d183f0432b85fadd6ba5abc8f
+Output.9 = c4e9acd5ea34e456eabc8eaf7dc3b79f5760209259d0ea69b2ba9147e8c172a4dec8d2c215e4093cb7699b68c7f8b7a5fe5471d6c517f1523b10cabc19d281b3
+Entropy.10 = c40f66947a04128abf9142716628bb4384b15c7140a410f2ee30e2d855e1153d8eaf6fd4ef24aad93f0f85e17bbea530
+AdditionalInputA.10 = b657d5f9617bdbd26bfa6830a8c1819cbaaa4a95532cb7be6bf2c3242e3fb0124cec3fb2a98d0d4dee0d521faeefb0f3
+AdditionalInputB.10 = af437fa236256f5dfe2f00587724d6ed2ab70b630e7f898ea15f7d40b2c71975417348893a5dc62f8a43a17a16cdb198
+Output.10 = f5916930e99f8a2607b103e4721815f564c794b7992d178af99244dc6d421d095de1ac72146bf374d96f921db56dff7fcdcad9f59e4e8b1fc5b1364645e65c4f
+Entropy.11 = 9c218d826caa827ad2e48024380bd6902dfb09746f3adb8e1261a543f96ea3ca9c76ad1b5effd05808bd75dba0f398d2
+AdditionalInputA.11 = 1b8b552e26256b8f6bc67d71a2560c4e4074ff8b569e5f354e0ef522bc2d63203c8b2e52e1149c68d236a26af0fe7cb1
+AdditionalInputB.11 = eb8e4df9eb7a70bd9996fb92dc515e2fb105938137039a70eda84bedb65737c9f2175ee6a50e6a8bda9de1f042e28fa5
+Output.11 = faa749b844e5942496b8736ea7739228bfa8f24a91f4c4055c0b550193a6d65ea98180932f593e95eff355bbab377e30cac1510a38a87f0d0a78d49095c73051
+Entropy.12 = 4f518c594283e1f03f22ab88c3525b1eb93b7c00228bb5c15b900f358c347098135d846aedc3c4390d9b09a0fc2e3e7f
+AdditionalInputA.12 = 8fe664e901bb9787978001c3a8f1715ff9e3ff6b52fa9dd46803fdc1163f6123158e6e31e9db4f6f9eba42cbf882ece1
+AdditionalInputB.12 = acacdebe5eebb9156072de7e08e12c802fd01bd2ac14642ce9096b7c6c11dd5a5efb59d908fea751eb111a27944a0199
+Output.12 = 0e8c6d1ea328d14e8f0d6632d4b4ea719fa508cb3d340b184fdff23fa2f24f71a695475ec9219a763b1f3e4f59fe1095a204cbe50db8b27d29adb7cd2db45ece
+Entropy.13 = 65a03617cb0751a26a23656ed9c4ec35fb29f170be8d1253b20b2aa500dcb6006ea67789f2c9a6975252e491cdfda1e6
+AdditionalInputA.13 = 5d1e05265d4ff743fa62a8c190664be583deb73e180bba997477d4ec6ca74d234693c377677edbfff4496c7d7987d1b4
+AdditionalInputB.13 = bb6e805397cce70a171f4efca4272c80fa9467dbe8b85dc7d1a54376abe53b345220be90f2e528eaf9ee8d54717d794a
+Output.13 = e39cb1a9430036bbfaf60c207eb5356ea40281ec3054678a0aa811b7c19064ef98da77669b6f64929133126514f0cbe15efe44d0b23309e2459e40b4674d7e78
+Entropy.14 = 2dc35e798e7cbb05d14437a4d85f529f813e8846e40eeee2079c023ad228b84a7ec911a477710fd18288372b3b4e4d71
+AdditionalInputA.14 = 67cd37e14222e5966d243bb44aabb32b0750220f75546953981631b9486a373bd69214bfa1da283cc730ec66af1be6c0
+AdditionalInputB.14 = 1c0f67ce459099f3993bc8ee4a4550d3e7dec1a5225280ecdb00ac68e17c7cf40afc5e6794208e5742c0012e87d5711c
+Output.14 = 26167ff9820aa23ab61f7872e007dd25d58c7f82eacb9474280731a550c8b899e08074d910d576939f87e90018987e0bff48da03aaabaa9b7faeaddd65fdf5e2
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 22a89ee0e37b54ea636863d9fed10821f1952a428488d528eceb9d2ec69d573ec6216216fb3e8f72a148a5ada9d620b1
+PersonalisationString.0 = 953c10badcbcd45fb4e5475826477fc137ac96a49ad5005fb14bdaf6468ae7f46c5d0de22d304afc67989615adc2e983
+Output.0 = f7fab6a6fcf445f0a0434b2aa0c610bdef5489ecd95414634623add18a9f888bca6be151312d1b9e8f83bd0acad6234d3bccc11b63a40d6fbff448f67db0b91f
+Entropy.1 = a5ca32ff18305555d32e270f170529232c458779eaace221ac4958b4226df8189e42b0844fc765751a6291a60a35d8b4
+PersonalisationString.1 = f42a3a32dc92a3eeff658c349eb2e181564458c202aa922ec4364e3a93b2ebdfb58ef78fc7237b70d8a261bcf30bd1b6
+Output.1 = 00851cac3204326d97b5f26cd0bc05feafc34f56b5b7def2640bf5a12da0090d85320f3132fe7212c86d65f3b938366eae25cd9233c0f9941a70f99e795cde4c
+Entropy.2 = 2e90b2daffc3ddda438c38c1bdd6e07d78c862225d9d10b50a4d8e3e32cb63e28101c06dd20e2d174d0f4ea1bddee40a
+PersonalisationString.2 = f349ed3b779184b8048f833e79751574c485de0b8f6ec73bf08b3ea4b82eeec4e736ce5a8093f96b4d7c7ce80f5cf606
+Output.2 = 847f61148daa5d8290dae7f7291bed58a1a4a762c81d73eabca91542a5ae2200e18afc9397a1401956926826f65da3470b40fa9147842bb49d4e0d83bf77cd31
+Entropy.3 = 8ab4fb1ba83e1e4e7f8ada8475bfa326315ded596e21ab804a90d50b2355d4b96c8d37ee0628f8f2c2a0245255a04bc5
+PersonalisationString.3 = b838dddbbd18f37c352df301a07986fb4cce42d8f914547f49db31721a8bf4a4d45256f1a404994d3088ba095ad88c92
+Output.3 = 0d55defbb1138ee33557c7f92504d0cd325140c088035044b3fb1c2f6469d8505e97e51d0dc97798d55b35f5b77e8ad24dd42bb9d76f9d10227ae4f05d09a010
+Entropy.4 = 297137ef2d5704ec08c8f64502aadb6920027089e710b3de3174b4aaf756b7a0b1087195c71428f34112730d10d3156a
+PersonalisationString.4 = e470987f1799ccaec5d2e73b0c2df260d1c19ff075bb97a65ccb8cd7dc94637ca7a9f46948afc6cbb5e450946468d79d
+Output.4 = 557416003e926fb5fbaef50bd48c265f74bb85a29502fd0153240b88ee5b95badce5813c2ab26deeb3a5bb9d9f01852223864b55266210a4be24e4e9c02ef32b
+Entropy.5 = 2c3a24013a7c8b64238507f45127ddabf638dd69c89f268bb41f20f6edbf14157488072c171a1c99e7e05fd51541df31
+PersonalisationString.5 = 88692bbedec9fb0fa2bd857341328a0eea7af184c79990e0714d41d84a1197155336f89243fab6a30bc9e34aca446a6a
+Output.5 = e957b7171779c4699ff4c3b74274c28526106946be77a32fe696ef41aa89735078215aab201819099d610fd5680b51982ee832df561ae97cca2564f9595b4c4b
+Entropy.6 = 2558704be32a8df433d8768cbd5574c24dd09de31564b9a0f4495fc1ee551e448df4fe8b1459d6b2b6144e1f4a1090cf
+PersonalisationString.6 = 442c2e1d96fe08d89054b63a05b7122ff7936f837f4ac95d8dc3a1aca3e3680b56abb0e022fd0be9d0c11f5acdfaa8b7
+Output.6 = b7f5d4862b47419974ee09a22c1c5e0ea5b0bf1f2e1292321e864d9d2edf3e36712da89ba4557cdedf03c6a396bc3b84c4a6e664d6cb8d94d861fbe472f2ee08
+Entropy.7 = 04d8aca25424af21b3e4449638d31e0d80a3ee4572788ca86640f9b87e4e07d9f755fc2e666c59b0a95fa1ee7dc47ede
+PersonalisationString.7 = 0ea4210396f98612261f80777d3ad5166f7b60c0bf821fd105ebd161ef1c1c5db911bc59bf29441f13228e800ad1099d
+Output.7 = c965c621a3ab4b375854d4c2d52f28debc07f7cfb7600489ebd9c7b64b4275577474be070950fca5628f128a8dddd9240a435373951d9a6252b52023010f6bdb
+Entropy.8 = a0a51c6e8011f26db53533e6be8758dd7cd3c6cd00ceb4f429acd40b193beb1889136618c7826acd0b7ed10eef0551e5
+PersonalisationString.8 = 102cd6ed39ce048b3cac4d535989bef8d4b51311948c86cea421e268d36bdb03ba1229026081783f8c05e2e73cdd3e72
+Output.8 = b5d44cf219e26fc314728695cf08313c2ce4d05c9cf7d446c507550b462c5d313b6ceb2754e2570d37538df9be45d71f2ca9c8e24b8075fe6c1a44ceede84a5f
+Entropy.9 = 13e7f80bb83f94453bb5859079206d7c76441488a3044f20b0eedc5d06d3d8f8a633e80cdd6104d8ae5154cece908475
+PersonalisationString.9 = 0abf501a537111f992af58a110749067b2b4765d37f0fe951cfa6eda03d410027df034e37398dfb64d50da515d3868a7
+Output.9 = b4b41afe5acd666be67f9dc45209f62b0a450a16f39ee2fb28ec3628b809f707f09e5e6d7badc1a5e7a2c5ae8b8fc57588ef110aed157c8d84c8b4bedb435451
+Entropy.10 = 597a5ca7e1deb5433e0a7c6b188530e2166f3c8c16ccfc7578c8d9931d70b4a333a536abdb0725b6c86fe3d2b2974e17
+PersonalisationString.10 = 80c2283df1561974506872ffc33bc7320ae2ac2d31e32d9c04bb75dd8a8cfa4c89597c9078622eb4d2900466625c0c9e
+Output.10 = c1b9226e7718addcdddba21d7b5539b4464775388034b5ff17f8b512c65725ceda4a20ff9435a3af062082bcfaf29ec1ab8f42c72856ef59d881df85d465c14a
+Entropy.11 = 32758241cc572bb88219e9c8280c3d99fdae0cd8e878f8c0cdf112f17cccb0121fbfb0859d27a0734da2e8c6de4cd80a
+PersonalisationString.11 = 628cb67176e187ed101f9f72a52368c2475b38e692297221c24ce95f2801fab1c29a4085664be4f751b5a64d787fce29
+Output.11 = f6ff29504dd7ae63d6016a62d77ed01486d022e14e2b7281956aa2f9d570da3a3eec8a744529564f55608905b09a08fa781cda39836207f6f5c165d27153fcdd
+Entropy.12 = 101f19ed66587416179baa901d8b888b75770ffe679117f10f25b46f659a570ddbdef085578ded5e0d74fada6837fb5f
+PersonalisationString.12 = ffebb3da7565946ed38a4d5c850c068f0cb10f6ce503440006f972a366dd61c3e9e1b00c6566baf8eebe0fc868ce363d
+Output.12 = 7f613844a6e10636fb27d8b146257d10932c37c7616099893928d2d458f294ae165def19f7175e798c0dced4ab7d96def88cd653b3264f41e756a043af6f39c2
+Entropy.13 = 224809c43bcdb46c52fe3098cc2d88d0d26c34e76e58f97047027adfe93f8bfa01c55d5b3c267bc60289ec82d2fa21bc
+PersonalisationString.13 = 1bde6bbdcce020ece37fe2931a70a88c5c36b8d29cb07590c9dfd23f8da8677646046dfeefeb17b45a09e621e263d406
+Output.13 = 48a51fb3c35b313058987bc10f6723ae5df051e180bf9b5b0fd8b4c4f12ee457f4d17681381865797b2f761fb05f12e6a9eb18b1f95d639a4af5b1613168c1fe
+Entropy.14 = 4e37ee8649a86dd0bab8785a1e3acbd2c3a57ca346d0e31476490e49b588b928232dfa50cb1d96078f7068561b97e2f1
+PersonalisationString.14 = 61334cdc8735332925221a6318987403a4c1c936c0a8066cbfbb1a84510bac2bb37ea52d6ba9f4e1a93269473f4566cb
+Output.14 = 8bf9c263c12a19c50525fb70cfe56980b26957e5c295f7546244ce6b7b1b90b24ce3cffc5536e96d973b192a77f878eb5e6987e1055475a0abd00312d7a65dd3
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 0dd4d80062ecc0f359efbe7723020be9b88b550fe74088094069e74428395856f63eed4f5b0e7d1e006f0eaff74f638c
+PersonalisationString.0 = d2aa2ccd4bc6537e51f6550ab6d6294547bef3e971a7f128e4436f957de9982c93ee22110b0e40ab33a7d3dfa22f599d
+AdditionalInputA.0 = 0b081bab6c74d86b4a010e2ded99d14e0c9838f7c3d69afd64f1b66377d95cdcb7f6ec5358e3516034c3339ced7e1638
+AdditionalInputB.0 = ca818f938ae0c7f4f507e4cfec10e7baf51fe34b89a502f754d2d2be7395120fe1fb013c67ac2500b3d17b735da09a6e
+Output.0 = 6808268b13e236f642c06deba2494496e7003c937ebf6f7cb7c92104ea090f18484aa075560d7844a06eb559948c93b26ae40f2db98ecb53ad593eb4c78f82b1
+Entropy.1 = ca0ab9b22d0df4e680daa8dbab562c594bd079c394647af39dc1c616a6bd85c58f2d52a02f4b02435bbde80b33d405ed
+PersonalisationString.1 = 1695f83ec7f4f1742b7f13eb62cbbf17804965ed0acd3f0fba0cafc3cd55f306800339baf2567bb84fc37ca30ae2205d
+AdditionalInputA.1 = 6f88faa9304a915b2b1988d4089bf0da10bf9f4dfa2fe3ccb1cd21202c06919c142d41324e51a5aefeefd05a664f701b
+AdditionalInputB.1 = 135ead8f090344d1e967e720cbd6756d3b11e390cf2078bcfa5344944685a7590faa52242a207d0b9f33e2fc14c5a61e
+Output.1 = 7f7e6f089722a06b741b385cdff7902f04f2e72dca7cbb64d6a4f373a9f693ec42fff76d11488ba86a3acc0395c02b7301249d02257da94e60f8ef9a3d844307
+Entropy.2 = 74571789edf9217a135f61747b2a756dc8310ec0f44435fadad527b3d43ce0a4f0361bb75a907744d3d95f65b0428bde
+PersonalisationString.2 = 4d127c5596eb672334325dd5bf2c6c2556d4ea13b2cd263ea60d74e8dcafa6b11700f9f478428999f5762e365b193c05
+AdditionalInputA.2 = c5767c7a29d0f434ca1a173084a090867bee9d18215a79d337835fafd308d1116f1dcdd1ad5d80ac18ef15d61b800c35
+AdditionalInputB.2 = 5ad8a5bd2ee46042ba91d9ac9b911e7a0a68eb257046415b471ecbeb05edd16cc45b03593de910b0a046dc5c213e6288
+Output.2 = a0df871efb02ebe3db392fca4106050a61a93e3bceb4405ffa3b0e71d14d5e3373c8f49c21f4c9b66ab4dfb1a5c66a58f8c5be9ac1788602169cbead2dbb18d8
+Entropy.3 = 559fca54a1eedb1f5d364a10364062044904b331a209f0d4172df84b33abf77894f4b903d9e2c1a461ade11aa63df9d7
+PersonalisationString.3 = f539da5e3c535db1e788f2188e238f2f1c76adda243608f8bc58d9906fa9c62218d049aefa1ddd0bd6934d3f9772dd02
+AdditionalInputA.3 = b178317dd48f36fca0e805642f9787e7ceb64a92a098f92e02ab25476059f664a0329c5076a7431e460d3c7eb2dcc9c3
+AdditionalInputB.3 = b645f0dce8ebe31b7c05061bd5674100e4ffe67cfa86430aa80019df0025dafd558777b5a1f732af6a27c26ca68bfc7c
+Output.3 = 7b9cb5c38b071e5c2c18952d80731925c32617c80eb1374e42f9bdd70bb60c1d3781d0a3589009528caa11188a50924623bce3d145b014ac64fd1d27c9611d33
+Entropy.4 = e584932d661268625b51d11cf859e88153418d1541fd7266f27ee18e4c3ce3ccd615f321af1b23efc6f36d0391511492
+PersonalisationString.4 = 00aa2d44b1f5f81729e40c3411e475cd2f870d1493dac951f367bc9b8ba28ded34e1fcc16c29bc6313aeaff1e1deb43a
+AdditionalInputA.4 = a383a65c121ca59b9c0314dc9fbe46b5708cb78f0f8a1acb77833f1928f35d70d37797234035c962b93874dd81f7053f
+AdditionalInputB.4 = 28b71e47a781cc86afc5661c53366cc5b1e777d79d46a97a4c16077ef3004ebd813114d71f76a448e3196d98754e1658
+Output.4 = 90fdb719a0d6236699ebe7e537be114003a9302aca9827bc7eed73f90a3cebd5199615506163e08a8d2e296f17de92214502505c8d2918b13c217703f56843dd
+Entropy.5 = 8725bcbe3868dc96f6f4f7a8c5ee2f881b7a4d41b9bad332fefbd6797588705ed03def3b324067824a6309f42cf98bda
+PersonalisationString.5 = d0b3012fed0540f0246d6fd624da5841924bae4a76ea59463d5777ca8d121f7ced9891caa92119ec02c0ee8ded2b265f
+AdditionalInputA.5 = 9f3601e0df1953d8bae700f3983e479e1fec443d6ffa12d68752cc68a66a2748f7c6ee0c32a6dae3a486153c0cc45b33
+AdditionalInputB.5 = 3b32d86fc3cd88dd6e3d7fb98a0c773aee1ae481b5df9154717b223161960869533c0d1600bceab0f6641584aed6d4b0
+Output.5 = 9c5f4dbccd21eff927600f3fa837189a81063425d3162a40604d3fbdb07600c5ffc1db5fd7e63c2046640c5b42dbfb85fbf82450ae48f29567957faa7420f969
+Entropy.6 = cc7ff344249733105d316adb1154f5d8c731c93f84b78eb233e6e8c7a12f6cf7f50e19209d6d06f73848dba0cb770ad5
+PersonalisationString.6 = 30ccac1e6158bcdce5d1d4bbdbf04fe26b3e9288d006a194503593fbd2438e4f9b12bb39cfa18fcf20955580c4afcdd0
+AdditionalInputA.6 = d68847e5fd92dc2c2b7d2afec13d251a268f3be6de6064b4d76bb9493869a0e9a040b3d1c0df437ebad78613963c0cbe
+AdditionalInputB.6 = 3a4c852a7f9e0e9ed681a63cab1d94aa1c60dd4e726b39012e38bcc3289c1f9229bfdbaad08d39c7383bd004ffa95b1d
+Output.6 = 0197191d1cd9666be7003bf7ac77b9f69a91889eb0f7720f8ba47eb5a9c1761ae6fc6c7cef13819ae08718a9a088e9e99512b9c16647a8b7df47d4beaefa4ff7
+Entropy.7 = e3371d3b3c264e10d270f4cecaa09ad202ee91ee2ddd14f80ea85d3233887129a415809d42d368eee4c941e4e9354582
+PersonalisationString.7 = 6895792fdbe0f02ade396a50d2b9a7c3d603092f354e46674a7d412050dcaa39deaff4e05da84aeddf37d2583bcf1a35
+AdditionalInputA.7 = c218a0404d234cb1ca5ea2ebf71d829cab7ad0715013ac133308172bd4a7cd79a70ce0ec213ad898e50b0adbfa39394f
+AdditionalInputB.7 = c438731aed46d49a542d2f7c4f0904af49145d21f053d74d0fd5991d3c09cc93f2b4172f34ebaad873ceb676551b90ea
+Output.7 = 8ef293ae0cd3ec81ce8d7ff7c89b3d221123699dc7f468649227eb2ac2395a240562a125c73610c66b739e22498b42ce35ffd018a99368dd4dd691f873fdaf16
+Entropy.8 = 6ef9e738c7ad4054023100e6984cc0639ce079aebdefe7c226ef2e5ef2187c921361eaf4548f69d4873e62e557096ca3
+PersonalisationString.8 = c7fb7743f2ea10ee3bc9582027196c58f94bde40074ded73d8456bacfd7540f052a265911e676e7aa8de1e7ee974b2f6
+AdditionalInputA.8 = 2ef8f45359615e6136adf272ad685d90c8a65f1764889a1102e218f59df6e98fad7d8fe3f084517cfd8a7a7088490538
+AdditionalInputB.8 = 02f255fca22b750e7196c84a4821e7607b9d0957d62ab91d82a84f2fd36303b79006f7c3ebd79e3671ba33a27ffc7259
+Output.8 = 12be8e5eb5422a3b2cbb951e043c2bb4e2c8f362a1d7b62d459caed4745c1df926f6d5acce2d7480e04c83c5b15f6f9e5dcad6769975a9af0dbff4bb34b0eed9
+Entropy.9 = 00800cc4761fc1ca30982f4dc2f703ca4497b8251fbe727104fd0c0f5f9c7dcea70b1a3916ebc19d1b68a4d2da4f1031
+PersonalisationString.9 = 373c0dfe249cf4c9cc73c24c170f707865e3ec1d91972ff3fd77febea8b6c12d2dcd9d4da7cb653dda2fd1ff58df2b8e
+AdditionalInputA.9 = ddd0458d6490b079351eee998b88d1d01a1719dfa69c9b72a3605de571e59fdd342e856a090a132393e7e5616e9590e0
+AdditionalInputB.9 = af7adbbcbd4a1dc1b96b8883a371c4314042a286d40232ef2c98ace462c7cea29c20c6d7b6424c0c4536dd2f8990f632
+Output.9 = 3ec18dd038d1fd714723f906b251a172a3d3ee308fbf51b92f8f0c1674383e8ce851079596dd6eccfb4facde7a2359575137079a9ff57d6ee7f8567493e8fa02
+Entropy.10 = 2f94c129bc75e9835adacf73b731b66248f969636fa0618b986d0e9eb622b6c05966fd1158dc1bc5c1398cd8031e9960
+PersonalisationString.10 = c320435cad099dcba1aaed51623977bab70671d934f6a02c7e964484daeeeec2d1fafa3ca7a3c8633715ef7e9bd87691
+AdditionalInputA.10 = fa415ef8270758c8da17248bd3a6b119be74f6a42f284841065783fdfbaa53e3facce01285c10ee1c5c9fdb89940bb47
+AdditionalInputB.10 = fa58111b4c6d5f7f2b00422efb5ed9832cf42f3cdc83130aa3355c267531998861e4067bf3fb9f28be36408c2c515601
+Output.10 = 8970a20b8bfcbf45f641e3ba8f28a08bd1c151ea8f5f09eac0ab715d2a52e0609be1fda13be31816670e433fbc38a843701fd935e2cdcdbb2cc5e20454e56381
+Entropy.11 = de2c94558adabfb286c95138ab25304b8e3d15c89613528802b430cd14d1685d098a9282eafe096827ef4f8bb702e291
+PersonalisationString.11 = a4669420acda7a252e8a46d3cfc976e7d3baa6f6832727e4280e57e69705132583313574bd975dab44f22c10a692ab03
+AdditionalInputA.11 = 7be3d03400ea138a6f398bfad6d0b71116cad9a0c59327c7622de0045b0a1e206cf17c91f336a53e11425a24a4a3ac92
+AdditionalInputB.11 = 1b17943c883a5f3f2a76be46b6cfe1e1674e06bb087d8d60ca28132143658c76d959b85530a88fe0056ccd16c5f9847f
+Output.11 = 5e4489671c6d92b19e939de87ebe03367cd0a9486eef0a46a72d5f71d20c387355c22858ac4e879580b4bf0e149d4c5b6be091bb3a5d6495ba83f47c1bcb4d45
+Entropy.12 = 776f8e34cac2757e83e95ef1075410360d8b8520b87756650c4e4e261684fc4013cf6c9304d9e8100ca9e26c9754b3fd
+PersonalisationString.12 = 14b434b12452309075693e6e5d563e5c93eada6becb2ba9119e7453ba0c7673fbe82c619a3172d2978ef5c5b938287f9
+AdditionalInputA.12 = 51da28229dfad46656b28920e590f849cb6f74d47639940610e470c5d52090e1ab77440a4e495d10f0ee9fee8e65d9d4
+AdditionalInputB.12 = 4460cb1e890bf34e94f25ce651710eba56eae585fae28534a9d04b9d2bcade08fdbd04c2b363583f94b2437a8c7e65d2
+Output.12 = ffefb1dc316c12659d33c3ce2d90f96303c47fae688431c14b392b1896096a5f2999bc3106b963dd7a7f7c55544f72d37cc9a3d2767af5a8eb81e322ff5fd605
+Entropy.13 = 7f4fa1bfa3a0301dab9c0d9d93fa67e96b7616f28321b681ebe4ea002e88ee58dca76dc55b2324ed5be78cd3363fe447
+PersonalisationString.13 = 8f6895f81f28954e4f4003b3618874fe7d49709c4302a8678d29a67ee5bea6df2c70bd938471be770c901adfc9f69051
+AdditionalInputA.13 = cd7d83ad85f23794108211b9b0e60298b86b9a84a111077371f045f6692fd0b7b9072167b46862a83f67ad5d02fa3934
+AdditionalInputB.13 = 7c640ad1ab50560a33a80fe612f3dc8be1570e5be26921d92ebfc72c33ed3e939f1223c495ebe278c04363b74fa78dc8
+Output.13 = 181e2d61f8a62de853c9d405fa79123f26dbac74e58a71d546487e55ee76e9e26cd182a7ac4f29dce7af7c399a855f375b6f6151c4c68df92b7fc73f4f7c134e
+Entropy.14 = 5c3f7f41e6875683fb25515a0877f1c385afc186d1c7e8dd838024f9b47f8bcdda9944135499907ced45833976767807
+PersonalisationString.14 = 055ba29f50e50135ef629d2a9d3557296a29a07f8ce9c4913c2e552518459f9e462601b4fb909640de1dd5cb2290f3e2
+AdditionalInputA.14 = 781c2441577ac05fc069f0f988e150d7e983bbb49810eeac8b5d98fc5dac18344663e46fde48f7f2cca096fb2c9db57a
+AdditionalInputB.14 = 7598eabea8e516eb2d111441e94a98bb37916f291e3107dd991e7798ed896dc99b1a405443f7c781b98adc8ba9750696
+Output.14 = eae935bf9ea3174c0d7da0359c175cc6bbb91ecf9357e7748011fba02fd52205df0a87a44eb4ccb6015b266ed3bb9be4d0d403838bacd42757cd34216d71989f
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = fc7f2629c9d88672f81229bbcc0c7e75c4b7d8e5d9380702ea52dc495600a56e4ae5f0a5c25fb5d7e31f5aef4712bc19
+Output.0 = c6775c9c64137c018418c4f001d0e4d1f2dc4411d379a678f1d71eee0bdc28c66eacbd38f76be45bf992a709af14d146c35f91702d27a1f4176332ebd903fff9
+Entropy.1 = c32cba5ee64291ed1d7dc51f8ad3ad40ae24c8fd2f78943593c8f0a0b5a5380798242ee88ceeba0d875b35a2d4fd8d19
+Output.1 = 157366fc8777f6f0b76a12f7be0cf0599c7a2a399d54acba606426026e1c0a11b43801fa9f0f470648f7cd2f83d258c7ed7234ed3ee9c9f61d93da578a070a4b
+Entropy.2 = 879e286b7de4f4898a96d999d18dba0155738ba06ba9d44f07559a14cc4f984b7d1e3e93d67154a46bcf908d7f79e3a9
+Output.2 = a077465e8c7c665266fe64319c01db663474cb16b161abcb3da645f62b468f5e3bde2e35d1cabceadb801a151b91f5fbc84b109173765b1778fbe4bc1879242c
+Entropy.3 = d2f95e3a8241d501f0fa38e8dc32f15c71f775246b052097fd02beafc878ce8b4787d7432c654adc9770a03c6f6f1c3b
+Output.3 = 733d5bbc54fad327110aea87b923db0e3659c076df36a66373d6e4e71ba01ee682ab4a87e9103c78e4ba7689d353c7725482f29ed211f105bda9cdc3d19dbc7b
+Entropy.4 = 08c6fb633a9c44f5b3b87833940ac0ebc34c63c3bcef7e600a09b53b479c1ca9ffd14cda6b6253fe97430781d30f6db0
+Output.4 = bfb960be98ac12dfcc9fe454e46b8c0231171bcd20eb52fe86e450649246d2b42c8f9018407a232488d164473c202fcb2da6fd207fdc7af927cb0372242b03cb
+Entropy.5 = 88eee40679e465dff3841a2f0d2249d7508b1eb2e3009f93b92b628bec52e9baa922b60eef9d26a48b33637010f5a762
+Output.5 = 0dad2a6b438075c4b2dc6a2ba7bc31fd543372d97bd409ba381d481cceee4e81f698bb8730123b54ca5cead02268837bb3b39879d9ce1471ac0ffc33c4d4f8f5
+Entropy.6 = 6af8a2d482139498f9535dd32875ac4a1111f24c99233b0e0aa0d6c280329b5da42d81eef54d716eb295f97189304e9e
+Output.6 = 5a41dd0eba5e6c37b4050c3f8f936a3202e33c3e4ef9df7549bcf411204b4a8143979bc9f9ca7efeafa4feb21fecaae04c85c0c7757cc6676f78fff14267e726
+Entropy.7 = cbbff57bf98a6cd428cbd6610d543be6781680ea2919ca90fc78e74d299399319dff36647b4a6a4a8209be1f783fc19d
+Output.7 = 5e2e2fd2e6fa9a7273a6c35e12027a8ca67fd91fd4a0352a05bcfe708f56d60f2c944b69a108eb2198d36fd6fd05ec1314b4060e1a5b52961287a5af0a0810ec
+Entropy.8 = 06b4c606009bf11dd4b86fed544f672c12ee0d1ab7d999f492a7c137860f28026ab99e1f19c8aa4faaed8610a2d89bf5
+Output.8 = 118fc4bbeb0e589203c568ca65f536a89888b2fa6a9a2de61212b0a11d0655ead94cfc30936656117af2feebe5dd07f19ee16ad05a7b4cae06b44e5ec22d6397
+Entropy.9 = 30dce1112c8590e22514e6cf570304bd40c962f36840b52913454766df4d0d745600d652005ffb25760569973f2fce28
+Output.9 = 75794c59a479019c0c66a426b55a73501732d53a1f58c906c877a73349be252bb991c4d113f2f44f4121dee90d72c2887e49196a061010881855b6cc092de897
+Entropy.10 = 80cf2ecf96d180d6a55cff12d335b5524f08e06485495a21eecd74b6c207b086c7ceda693e28fe40d1c7c0b7ed5ec21c
+Output.10 = 3ba373b5d727ceb0890abd97073a4f5b49efe14264836cef68e2984e239d3d292aaf4b1a28c90922554ec17b6fb32f92f8c52c152f98049a7e804d4451a6841d
+Entropy.11 = 1c77e9b3972909a40e22253a4a8bcc25f0b5f14b45efc10c7c0ef7d97494f0c25e0ba96e0a65df07229cf2fb41a9ab72
+Output.11 = 09e74c99839554be800a3ebbff12dc6be15cce425d72055238ed94c3acc0afc1674a3b295065d29cff73c8d18c9d9e7c2ffe36cdede718426d4cade0015840ff
+Entropy.12 = 1d43b82a5545f9a2378fedb86b530fd2fadbf97f2bc02f877d1afba7e4bb8c0c29d434fd565c8d1a262bb8694da19a64
+Output.12 = 29531ce77a4f47b7da26ad6fbcb0995bb33a0f702ccb7c5b091b1eb6562a7ff3c8a4aae73bdb247bf327c71f16e5bfffd82758cf0b82cc5896017ab851ab52b0
+Entropy.13 = 375dec29f8a6ffbeb71cbe3a2a3779a371496390d4cd5df1df872b632f14a91eacf8da77f624ed0323c803886ca8da09
+Output.13 = d39cb66ae64219a8de99b4f63daa8536defeaa53a055a66ec3de18c41673fc926b1a246c784261f02b22486887858ca1df593b4ea433f65d0b5bb85287dee8b5
+Entropy.14 = 100e176574bd55438477f0153ed04b6cf221bf6c1fcd7141aba10c80d71eb2e16bc8213aed689f44ef57807334dc3d12
+Output.14 = b4315cc4470d4c50a15836f218b21c96668d32eafc1649cf6c92b96f0716aa54582a31a1c5f597b80f62102622369e422d98c34d1498cb9bc01d418a4d232074
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = e9cde3f9ce0366deb161c40b1621641e583bb55114d912c40b7a7e7e2ea53e50665ca133a50e934cc1b4dbbf89c072e0
+AdditionalInputA.0 = be3dfbe5c9079f161b21b7a0781b607363a653350af68d82e21ce149c2fc3b98cac39e72751a61da13a0616e31118e96
+AdditionalInputB.0 = 7e1627e98faa462ef6314d45a231b7f1a14a54ce8615500d144474a92d259fcc230ffb909853c168bd93531631de25d1
+Output.0 = 2f265fbe1462014843a16548e172464060c41591b9adf1b76a79ae51c9a45223e6ef39a1eca2613ce9d682545d967d88b34808eb4d9a8e42cfed82eafc334d62
+Entropy.1 = 06ce9461e3cefcda7a9da3c0f040bac08257dd4135848a0aa052f6276a3e18f0ca8817070a63ccf2d9bfc1565c99fb10
+AdditionalInputA.1 = fdf895d506966621a01e96720f9e21b7eac2758f06872839366d97fae1cdfb4d01902128fe8c618e9c7274cb5c47ed54
+AdditionalInputB.1 = 797d1d08cac4b4d10a999016c8b148c58b1dacca0a8e2111a7ee5ac2d1125620f60ee55af09b920e8716feef7c057285
+Output.1 = fd10da7096bb831e968a5dd4b551da387405c3fcb9a3298c626644b66c19fc6de8608c81a7f79971da390302b21f34c9cd3adeede871469a4aa557a4eda54e74
+Entropy.2 = 9619f3e7038dec4ed56227a179d9b24002678c167e815537c4efd501eaf6da932d772066e2c1ea7bd066169b40b73787
+AdditionalInputA.2 = 93eb4715f874c3f4483236b1785d6ba90adb25ded4facda24256d7db4502126e00bfd0119dde797f1db87550d0e58ef2
+AdditionalInputB.2 = 39d0523e8aea73cb0584d9c3ab11f7953fd15d4ea953c6f7924a8f989f285c5162bc50abc0fa29d2ce7002ee4f6a3b16
+Output.2 = b3ffe4f60acd484ef331901d9320e497486322557c0d2f0588b9becfa97d4e36aed91be3a4ba900ffb126f52b512ca3b3b15d60c1db443c84bf13a9c9e9c3dd3
+Entropy.3 = f9f4151bc7c901726b44044072b01d79182dc5a190e9744b2ef822e80b8cbbd1eb1814bb948da66eb1c1d3a965427379
+AdditionalInputA.3 = d57da7b60233e35be50cb7938894668308250a46d032deb667f6bc014189b95392f61c73e6fd191d7aebf12a9910bcf6
+AdditionalInputB.3 = 235ff3d2cf24276ead6ce96e7d3644ab93fed7fb5ab45a01168ec91750eb1559fcb2219c5ced59e5d72e7ba4a69049ba
+Output.3 = fc444c8f7878eeb5c7cfcc48dc0b9aaa45c89f99a8a62eb1b2d00dc6da06dc8b1f18fa1cc921859966b36b6c6454876c49b006e165838c98288347159a9aa2c1
+Entropy.4 = ecf14d2ebb58f91f45adc3babce2e60ee4ac24bd799072781b7f442509fe40e0553374a06a08fe652d75a0d5254bb656
+AdditionalInputA.4 = cf269f6bd6d2880e622d1ddd3ebba21a98846228d40a7f13669b964ee956d95ed9ce41296afba05d0cd1964994d1b5a5
+AdditionalInputB.4 = 559776738f7b507afb030b1527049ddc7213d5d16bb9e8e15809e67ea5d89f5df4f4db5011ac4c5f2d196196db6fb601
+Output.4 = b0c05661092260ebb3489699d61d59c9755182de1c5645b7575e0b623955bd04593d04a229349c6da915b4524b51a55e8ec35f303bcc426a62bcc6f0da680125
+Entropy.5 = 1cc991be7433c12b899f7a0757711e27b659598d586fb2355ebbe6e7e90f634654eec4eb34e648c2f3e68660d58cb3a8
+AdditionalInputA.5 = bdde527bdcbcb23e55c41a9486a4c53f8c646876d067f83231a7dfc6744f5ace3e691e9330ee6f85179ec753d70ce6aa
+AdditionalInputB.5 = 4af64442ffa4e4bd61b4f4527f60d72f33633caca48614f2eb26281b2d545e1fea3e46048e6cca0a834eef19240e4bf3
+Output.5 = fa4e89141d4ac28ab57aabb187657743985cf431e73f58d709518d66cfa981a7158fccca2692cf04aab7230e770e7fc2ade24079a94f750b08d7f625fbcc173d
+Entropy.6 = 175932fb8d936ba3ae66f9b9b33c23ac929dbe6e7f42674cc8969bc93ac48f613e50cbec793dd8970fa4a991aa917133
+AdditionalInputA.6 = 17e2591bb95bc514cbe4d11a65068004a925c7485dfb0f6cb40e25f2d2111220e5341d5a169045f9c8754307dfd4a48c
+AdditionalInputB.6 = 8bf4efeefeaa24009577a4173a797c5b1e66a8a668bd2e7cfa94f8120e1c0020a974c96e6b2ca12b21801aac14105e23
+Output.6 = b21abface15f066bcb7efec202cf83cb1437b64e8bc73537dfd8e0d890cff385047bfe8ca66d7fb3a80f4af10ed4ebd3fad50548d9a389727926574f8d2c0e38
+Entropy.7 = 0c17d21f3a7dfe38656c4b2b490e50ae8a7743089adc740b0cc37510449d3b02af17b228f31b3be7d7e73f06e3b4ede3
+AdditionalInputA.7 = 8eda536c00e12b25ea6464dfae5751487c551d8bbd1d3e3ffc730c4045d4127dac04759d8a2ef48860345620c8b5ebf3
+AdditionalInputB.7 = bc9641a14311008a0969cffadc22e1e74661f970481d5c12cff637278dfa95b82baba431bbe2558babeedfccd71d96c7
+Output.7 = 46cf33450311d9701bc25f512ca5be2dc6068f99a8b5e7076c4969227b7e73f869c2eb015a09d3f6edb1d5d92dd3b6d46178bea2c5ba7d381424d0e809f220ce
+Entropy.8 = 7d45114f417b3dc1eecb0080f4d883a41c2f9b8d486e951e613a9d0f2515d148155fa4e3ae1f159edfbae5811fc42b22
+AdditionalInputA.8 = 3374cedc43206c36d8672735d4ee0eca7dfe5398b0c11e6c1e13b3e795766f0ca1c1c63f0fa68c8f2b25cf98340fc4c6
+AdditionalInputB.8 = 9e63c29fb35bd27f39f420be1505b1ee6de9f6919c0eba3df1e8357a9708943f7f4365e285ae1254f3a63ce226c64a8a
+Output.8 = 946a8c99ee1edc87770c8ef10796bf14201f58ebde3fac71ae000fcb553f99c890c228e7a18027f225a5269556e5d40f3485e6dc32a697f1c6b78635d7f0a572
+Entropy.9 = 821716f89fc9f3188734fb4b933882eddd36a3b4fa920ddefcba2fa6527abbd8ac8feec73f71d03fcf2e07f5c7900d3f
+AdditionalInputA.9 = 9fd4f983c4a05612268d76417045b6cdfbcb4e0f255399ed51b1afcf9e8a0fd2e956b3d734250ee3324f67b6ccd6ad9d
+AdditionalInputB.9 = df89358cf9d7927aab11e7226ca655a83e3f05897cf72691aa5fa6c27f846ed5123f47e14b9c2aea5e52a2d0967279ee
+Output.9 = a99a41633ae73bbfd68b549370df8bd010e1c0a7c792b8329bbb1c66916591cc406fbd7a549a0430dc060378e98bd3eb7636f635bb9e9723cc394a76205b628a
+Entropy.10 = 0bccc9c0d26c49716d22bdd832d82150f20cd0cc44a3fa0a43dce8703b87e57252662cdd1f8fee2962c30e5fc5c866c1
+AdditionalInputA.10 = 1e4ed591c1c7337f5701299075f6d6153a55d13d7d34cc1817004d9e0c16517f788717ddb137e1c7f1ac7a2424b0953d
+AdditionalInputB.10 = fc36747941d6288579f2b6a415c8971890b66ac514b1e49446dd94fd00a2a2222eece09346788b392a8ea826e5e194b3
+Output.10 = cf51be2e26620567cb358d63808f9cfc18a0d7e5495d8ec4dc0c3aa9bf7bdab0ae09b8444cba577f19eec9fba5d2d0285e923eb2492ab808a4bc73da25d8195e
+Entropy.11 = 044024fd379b7f0557632f4c8e57f80dc943735def34d05ba5ff35237873877773ecdd2d07c49866a7c64192b98e57a0
+AdditionalInputA.11 = 6e91351dd5b58bb19f210d5125b3aec7f311f1e2ffb8589d49e0a04bd9ba6c530aecb94b38946a162bf146d7a9f7b1ab
+AdditionalInputB.11 = ab39a27845ab09e577b6dcf9ed4ed77699595d359a78948fa5a8cc6358e3ea8e9a8877b60b6ae0fd7dbf37c93dbda88c
+Output.11 = 7f64911776e2c04e4a08ad90c8dbbf51ee34bde4ba6a3b7b2983520bf46924a9bd76e7a3141d8b4474b5d2e573173fdd90c23743a90a1aef81b3494fefef9834
+Entropy.12 = a0539e0a454464251d9ecc4509bd7f54a90a261d2e625b38bf76ec901c142f7c2851ef003aa1a7be60b60abef02de384
+AdditionalInputA.12 = 1e794d6896f4cc9c2a459e98c2e0d452782b072b4242e6eee1ec3b86b6404fbf3015959d8006f263f682d0281190b7bb
+AdditionalInputB.12 = ca573e98cc43ed3e4e59612ba50a6dfe62c3caeb955ac5db60eef2ced5b63f39db9189efed8306b64bc7e01104c7e847
+Output.12 = 71260cdb486094a1416fb06c4de7b5fedf0737acdf35851297d1f10df15014b10304de05b7cdb84e59e90ae85365d6fd1b2f6cae102650b6890ef54833468f06
+Entropy.13 = bb405376987e5a73b9366b265fe64c38322cec5cdf59ef04561077f56a3be573e89439da5ac852350520ce2b88876ecb
+AdditionalInputA.13 = 7509015c0d4800394a47c6e0409f4786f176a495d0c7fba14b2407e292b84594b602a48a4e017f96dff93e82484e4037
+AdditionalInputB.13 = 8644546aae7bddda2810ba9dee8eaf8ae50fa4a252de5df17f6a55540875ab73ced9f920483f5cc5f9f76a94b253b4c1
+Output.13 = 7113a5710752f3b262771f6523747711f8402c36ccd37dda366b46d9e7d7830812e0f935b36a15164fdbd4c3b4e46fd1fe43ee25e83c4d9409f70dfd4b851e06
+Entropy.14 = f61b23f149d546db95f2ee333468debcf2e444f7119577b4232c031731335697e07685610cd62bc838338076536ec355
+AdditionalInputA.14 = cd4cb3a8e0f1f8a67577d71339e6c4f40a291cdd22d5a19aafe0f7c99e2b85789d16b63fdab2ff5627353a7351b653e8
+AdditionalInputB.14 = 0203e75cce2d2e81ec441ba73b3129c6ae5067733bc0031614cbc8fc92d599523ad30da2ea253c06c48293befb14ab71
+Output.14 = 927c1e64d9f3acfdd74e7afeb9ab2280f37ce9c1839f8cec8c32db7676fab057620144d34c8382bcb904e85af45d348e10bb2e5708268343595ffc08dd258c00
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d8078f99d5da1b312e4512acbccc198930453975d3d50fb5a13f25fdb11a5fed1a246e6bc153952a16623c233e13e241
+PersonalisationString.0 = df1b8b21725ff886af4c647af1a587b1339e0973782e95c93f3b40bf421d5d03cec2b0b41f9058d730eb0fb53568d00a
+Output.0 = 5edb9b25287f2b5b1e5fd81f69771ccab3b9876bf2ecdd644c9c6c5fe8dd988e0d7622dee902366449f2063e3f826df99743806b825fe8c85946af3b4781d6aa
+Entropy.1 = e5b00f721bbbf081d350433592f6d2dab362217f0c0c49515d1f7f45999cf5acd52b0e816d102d60634a2461f4300103
+PersonalisationString.1 = 654a935d0c43affca9280ac152a34242fb6400d20836aabd13917719025c1e0d65a96af75614e05867d5194aa8e71c72
+Output.1 = 464796a7728ebc3b14da925ac9073e2819b64930b9ce62954cf9a04c3b7dd2a3c35780a575d7b92e4023086aba0b4dcc267197dceb1481e43edf4cc030d545e5
+Entropy.2 = 0ee0f3eff01d6bf3cc5a8140fda7ab2621e5cc7f1235fb43110e46517fdeb0a29aa179c55b8fe5607641e7dfc3cd24a0
+PersonalisationString.2 = d1f7493ba4ed0db1235a5efe38b8e68ff03f718d84071ead8ff4eb8c2e06365c4c11e78691ce176c2b2dbde03fc73f3d
+Output.2 = a1fdd8a359f5e9dea81fdf83c700cacf04b4f83c732758e265548aaf1d79608425c637208968968b3b56bbb6122f1271e402314ed9cba24acf71457ff754e85a
+Entropy.3 = f43e4b7d3317ce494b0a68cb6e11e611bbfe7b61bc37f6ef1e6b45b3bd6d6797d39552abb490929d0dc967ea0470d3ae
+PersonalisationString.3 = daa5b616663c91054d583888e683c6fc9355d5c32ec2b8632a63ddc4fb46dd936daacd86006f1e639228b0e30a6c2c08
+Output.3 = 99573cd5e7ce4a0da1d560fb5e992f0be28736ad9c2f1449f721261dcf3df67bec1c3d49a6e4f99ff4bc9aee0ecf4d5f97ed0d37d9776e7f63edb8cecef72c4b
+Entropy.4 = 11ecf10f259bbd817b2367ea8036ec29e032e4869cd9d9e4c53055b134434bbdaddc327b137a61e8ab60f0cf296f2c35
+PersonalisationString.4 = eb0719f13b2dd9f08dd0d06cadc459c31b4a1536c79da5d25eed5373d9a46cb0b5ce116072954b77eb6f84bf94144322
+Output.4 = 5c4a426ece1b6ed0b5bac759a4abdef1b62b839ec474f426f6a5386b04d110e13595081e7db1016489da2d2e3fea04bd7fc37daf87ca9864f3430c005fccad26
+Entropy.5 = 4217febacbbc1c2504c82ef60f20c74a61a0080a12444970f9e6c17cab0b5604d08fe8daaa66213804ab08562e13646a
+PersonalisationString.5 = 08c6075989dd932c516160740710f5d16c38d205fbdfaff7444968791b6e9a43ee9a79cc5eb3e58ea2921f9c1f13dd25
+Output.5 = e4f5463cd4d77da23bfed0f62f2923bead6a464d166dda84ccfddb0fd36a32a0e8c0dccfa1548afaf29abbd853ad8d37a82f3c16b29f5b6793eb3596e1b35c0a
+Entropy.6 = 80f710ddab86a0d09ba9ff8098512c41e20c54878418ae7a6700b7780cf67a4e30565efcd6bd50e0ae1a778d5a18fd2d
+PersonalisationString.6 = a030e8345fdfa967a184413a4d481d887fa647bc46043c6f4057e7011baa9ed115f39688a4fe5cdaef98ec518ddb040c
+Output.6 = 3bbce7041fad988f055969f4b53a2fddb6e4d0410c080da3dad05bce8eca10b7ed4e367e8611b8de28484fe642d575daf254259858aa22b8cbfc96299605820d
+Entropy.7 = bbc1915e623f50ff17685641ebe7b1d55bb8b6f2d96e56e82a013ae42263e707ec8fc73db458860ba47649332bc4bc26
+PersonalisationString.7 = 3fa642ef2b0ea938ad67c4f7a198d1bebb0689ec5d9065ecea5906a4cbc6d28e6378accc67f5b08110b453229ce6949f
+Output.7 = a4507a6672597e41c6c925c610446f8ed1160f44797ffa6b356e2a02660de3e63a87a182115879efe898108bc651d9a5e35de263190d89113d7eab4c0357c78d
+Entropy.8 = d26fdef705b3f00a0f99c5a209a73e12aa0bb6b3612b63d6a49f2b551b02083085d7d49bf81d2c373590cdb5db6006eb
+PersonalisationString.8 = 1c62b5d07f7ca8c60b69126118341db55e5a2cb2baf359d29719675706b8938bb6398dd091c3f9118133a6396978bdf6
+Output.8 = 10f333ddcdfad0f8205a0c53a78952d10dba341533e9d4b0c3640ecb2f59c01a94c1edf05eb5b2982c0d7602d6aa9cbc166b0f429010d692dfc21583968b841f
+Entropy.9 = 8da9230568f562a44ce652636348cc9feeea46726381ed95557214adf5adac0d94e20083d8d327eefee383a21891b42a
+PersonalisationString.9 = 74363fd19caa5c2e130e5cbaea8fc18a04de2615d9bfca071eaae9c16f26fb9ee8bed98c615dc4fdcc68233b166e8f89
+Output.9 = 3fc859130ca0d9500e7977d129506406a2e14a7733c1490f7e4d93690d4fab904cdb3a847e4d40a25818a808de7f1462121b136c846e57809f4207265a13e237
+Entropy.10 = 85948620a78deb45449c848278677025b596b627d1f061bf449b142b5f8b843c3c049de253b846d33bd0733fc92f3454
+PersonalisationString.10 = a54771c0d1a5c6df3e7f30a6208e35aa4d65c5b654802360cebeb80d2cd0509ca37b7ea849f9439f3ec507154082c428
+Output.10 = 028e0e6a5ab87d4699be8b290b9e458473420069ee618e04c346e0a623158fbc915d36368fea887e2c48202c1beafe8cee27074c732f12344e904f55f581cabc
+Entropy.11 = eaa3aa6a7e872c85cf48f290944c3e2c17f676e6bf5c935cb9317c97ac294e31adfb10bbd244361edce93c173153ccf6
+PersonalisationString.11 = 66ed470572d915d81201c3dfec4d0b7dfeab8f8b7d6358430206bb03cb94d85f27b03eb57de46e759523c44696572076
+Output.11 = 12e8f9a329b0af705c6c43f5c40a823305ed82779d407659782b47416246d9624cfdee72039033c0ad567ad0a82cd1872cd460c68b5cdbaa438615bfd13c9769
+Entropy.12 = a23ea0bf45c9ad04bc956dc6b99cae4943f287e2c0ff9fccb6f8bcf09584e06869746b8b027a027a2bfef975522bc37a
+PersonalisationString.12 = af35594bd49260a3d3eecdef260d1f73266cdf256f11659e7649c37d7fb2d7c6e54cd4b5218f054b63ed2823ab67a180
+Output.12 = aa7f070d7972cd156ec9b3d1dc37e1bd9c2b6d512fa318f22c42d53092fd05365b35e0d03541f948c32fc3107e4f9eaec34fc2f4f9d78a2637b2ecf7e2ec10f2
+Entropy.13 = 396d788fbb828c29643bbf7e4234d4b343bc9977ebd0c08d17296cad99587a8d299039b037bcc51dcfaa145d034c6b51
+PersonalisationString.13 = 90882c2759f610acafc6bce6f908cf31117323c43877a931fde27a25c1a975ffc483c24e00e38e7a20d1da24b940c3b3
+Output.13 = 679d9ae0eb82a40d294b65806f1e2fdf2c5df5c3e20fbc06cd16bbfb6477d149f1e591f892318118dbac4f2d7e5d6354974113b2c25f5280a0862898e2cd02e8
+Entropy.14 = 4e6768b663b1838fbd56c78b002c08c28121662238456ea93c4b286f4a1d6aa2a1f5d2cf8e59d464ed37a6228001f7f8
+PersonalisationString.14 = 47c24038732c32baf7e1e71fb0b74b74ec055adb88f8cf111fc27598ea74872fde608266a8f49105282c2ca7093acea2
+Output.14 = b1ce96d86e77a251c4fffe5de31e9199a19fa242b03b005cf0b6a23ea3a0c5b87edcbc77d0019f24d8c0594a4edba054b32d2c9e5e2f0893c424b11887b0be48
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = b91280bab68e2827d9e151a48e4b6a0812fe297dcb40c5fb91956f326cf998f5e6144886700541b0b6c26ad7a7aaacae
+PersonalisationString.0 = 244041d62b3ae7097190e1e43a40cbbb2d102ba204be6ba352e787b1ef508cd197486b5ea7cb17ecb000bdc976b3e20a
+AdditionalInputA.0 = 015f53d7b4e64156469944566a219579d54b498d5e3fbe42001ddb133e1a9137b84f57dea8b915bc5fe4f66e8e71b13f
+AdditionalInputB.0 = ed1f74c1dbbb5b3094fe5d01f105d412d57e5cd17eebcf5cfc4379720fdd269cd93947ad1ecdc8d88a8d4d3ed387138e
+Output.0 = 54bb9c7df65ed95dfff1178bdf098fca7b5559bfe8fe976c1c83864093583a1a181ef55a0d31711197b8235f8f799c3c1ec4a0194c7259f80ca1500821d2953f
+Entropy.1 = 5a0478e786d9472505196a46d2d8b9144b71ca6c4b9fffe1c1ea5fb7533f720d84c672e6511d53dfd37eee6114ca4172
+PersonalisationString.1 = c37d595b7c286ae50ea538b8ab5f6de9147988103b24ce94615e153014afbf9b5e025cf8ec00f1307dcce00c6ed97d39
+AdditionalInputA.1 = bf19c0ee9a8be1a50f71dc209e327bb882f2c45ef1b7f9afdea950272d11223f3ebfc7716dcf4ca26d9af83338bb9f4e
+AdditionalInputB.1 = 66f668a0ec0788e77277938883d946f871c8fbfdc8255799b734621e92cdac2a205bdc7d9e1800e5da4831e1d92d667e
+Output.1 = 63c914b731706e6c61f86d0b69703f4821e1e4e9f9a978956818fe5f3b49a2a4e8170af0831d6867976c03a7d9a8d8d05f120e0c95a5bda7d505d83949dd1fa1
+Entropy.2 = 7c5d90703b8ac70f2373249ca71541717a31ea32fc280dd75b0901981be2a553d9053297ecbe86fd1c1c714c52299e52
+PersonalisationString.2 = dc072f68fa77032342b0f5a2d9ada1d0ada214b4d08efb39ddc2acfb98df7fce4c755645cd869374906ef69e857efbc3
+AdditionalInputA.2 = 5225c42f03ce2971c50bc34ead8d6f1782e1f3fdfd9b949a1dacd0d43f2be3ab7c3d3e5a68bba474681ac627ffe0c06c
+AdditionalInputB.2 = dc91d7b7b994790f06c4701933257c9601a062b050e6c03a568fc55048c6f449e570162eaef299b42d701816cde024e4
+Output.2 = def8911bf1e1a997d86184e2db833e6045cdc8669328c892bc25aee8b0eded163da5f90fb3720884ac3c3baa5ff97d633ede59370e40122bbc6c96532632d0b8
+Entropy.3 = 442596e38d930780706a05f32c88de80a47410fd360f4d6643de98ccf458724ae772f812912f51bdb4c267c944471a4b
+PersonalisationString.3 = 974c8b9c775c673a21272654a6604855e7775a2a63250e2bbe12c390a99d3c51b25ab522cb3f69a363246e125d8cbfea
+AdditionalInputA.3 = 48e7e47b569269ef82cba9a82c673f0a360db88b09475166952ebd6fe6562b2ef10ec4664d74a9dff4071629c077d2ab
+AdditionalInputB.3 = 0949bc892c06cce1136094fbbc3c5546245667f0dc5bf606cb6c20db6ca3d3d6fba8e0d0996268066acbd9096cc9be49
+Output.3 = 8e0e4df0a19e60e8facbaa8f95bf03c0890bf8f421dc6f0ae87b2e08d4516143e2a6a0a5a6800de78904e957e7c2e9e07d57f0bb1b0c68540ed7d664a71e8b94
+Entropy.4 = 7f851c0c00e76613c67fa46718377ec652f560d38ab5a76293a4178e24452893623ce4c423ef443ce9f8eea9379ee107
+PersonalisationString.4 = f37cd09136c1cf3d2162e384673e546634a9b8dc93288feab97b3a6334c9d3ba256c9fccd910bb4c71286451977b5d0f
+AdditionalInputA.4 = 457a0594c308c43c24963e0296ac71828b37322c1e5ea17ba8c4a39cdbf4921efb12407c907aca9d2bbbb29609c3be6a
+AdditionalInputB.4 = a53c5222192019524865d6522befb04d68afe9f950fda1df9aeee559d72936658bc66e2f61ee3093ea4bb147a07acf39
+Output.4 = 3b1b028c2d854f28d350dceabc3b7dbec4fb52bed94212b9796c4a30857cf765fa469541a9bc2233b3c6fd1432cde65cb57851494dc4f530a685c6860479f7c4
+Entropy.5 = 94bee599329c1416fd2b50c0fe403f0e55ddd744e4e8f5ee5f3eba8e8bcfec31e6f3a254aa673bd6f46bc241850433cc
+PersonalisationString.5 = 3eb20341581cf88a3d77ea847dfa0f04c07bf2bc09755040923ef238e83c6f7f28a75bbd875ec4598d9b2d178b7dfd90
+AdditionalInputA.5 = d66ee577d50d6f46e77c2c5df2864128e51ea4c46accb7a471cef75e88ffb9608d8ce1496ab8f18209791d70eb6c39ac
+AdditionalInputB.5 = d23e7b37401dd32143f1e55b4192ef24df811683a30438e7a342be7b0e014c6bd998bd19fab2bf231f60331c3fe3be09
+Output.5 = 622f4f90770071b0844df89b53cfc74cecb8e895557dbd7f577a9aef51ddba115f7d116aec0e2ea1c975ea8710b5d2688fd7590031a0fe82ab37f8314c0afb12
+Entropy.6 = b7aa7a99ab1d6b2d95d2e3c3e809af25add110270dd328713173aed709ad236c8e5eca477fe5380a1dee6093714df56d
+PersonalisationString.6 = 0ac4dabfeba7d6d78686e085067e35495f83600a9ce3139bac521975e61b042ea4722860228d14b57ecaf2318ea95cc8
+AdditionalInputA.6 = 84ad426fe427335fd69f397bb9b6b057da857319c4fba94038809f95cf1c72095ebf853468dcc24da4ada9a73760a66c
+AdditionalInputB.6 = 4b2e5ad8711437d22413cea1665c66b827bb7be5cc4d3a92c76a29b6d111c3ed7d2207399e5148925f493dfb398f63b0
+Output.6 = 3c5e1a299313c7fa5ce41fd77621e8d4978b08544b0d45bbd59b5cd9c260cf55e08c1c8a96c6a8b303f7f1741d06280584d6671797179e32bdb45d28a6561edf
+Entropy.7 = 3b03ba5b25a68f5b2984dd93d0ba69a90cac541c54e17c5b6d45eb7f19439521e17243bb81b268f94f8c2ed86b023e5c
+PersonalisationString.7 = 0b9299399db9c1bb05051125ee2d1cbbaa447bce705ac14011b755d55bb2a52135c1d63c497f807774bcc1983354bd75
+AdditionalInputA.7 = 4e418c85da70d1b7231bfb527df01eae33bdcea39a280b7293dc899422a5497ac0765bf43234acf5c774ec3664c56c9d
+AdditionalInputB.7 = a418a90dd6985c6e644895899d443445eca35a7e26c7919f36129385a3f15ae21e4da60b2ddbb7e1106f810cf8543cdd
+Output.7 = 3ce6e52a12da138a0964a5ffa3f7434635ea1248fc6823c6e8ec738474bd3202f09fee917dfdcc90c12823388d173bcf04fb5af333ed2c88c74a5409a160910b
+Entropy.8 = f24579cb1bccf3c11c029db281a55337af7cea6ebd606a74573740519f445daf8c6c9f2aceba6fbbe8bbd72073693a87
+PersonalisationString.8 = f3801e0ec844cab0aa38b57cac9f64ad86c1485e2492b8d99636186b261ef47f5ed67a0cffb2e39b2e934f774242ab48
+AdditionalInputA.8 = ecd8f1f97ef742ddca7d35b07fc0b42ec4550879987bdfb300366093cb258d6ede44316695d7c35b71080036cc3a5496
+AdditionalInputB.8 = 9f97e2e5d73c7142bb8528d364d0556b0b9c19bcaa9278403c22f1da5f31fe02fb53bfb6e4f2e925729aefcd1a667c42
+Output.8 = 1819ec2898f42f08e3780afe3aa42ec403f5027298899846558edad2de69006fe8f8c12229c4aff8b06a0fbebcfd2c4b174835c0c3df1c6982db203ae46c5c06
+Entropy.9 = 3c45f9351980daf381e25e59ff23daf54d69a06505bb1eca6c98a742db28fdf462222d22f3c91a59b53116c7d17362db
+PersonalisationString.9 = 8316c244c5074d0950d03320427858aae9e8d9e8ff56469e1beef14a99abad23d8fab550cdee28768f023331d57e77c6
+AdditionalInputA.9 = 19c3dd6033f10957f825723106f2a8947aed22d96ba4c1da2e0a862eab5f6e2f3376bbe25200cc17095f614b264cc87f
+AdditionalInputB.9 = 5aba989d2e8cb28d963487168f31916473315f281b40140f738a55ed4d499d2e3df26195a6139d70f8df918a1ec337c6
+Output.9 = e9620670e971f5c9ec683c2cafc9a551e5e9806e5bd3201f3a1d62c7f2fa95333b026f015bc97559450486ae2c61677fd310d242fd04db51da142fd90fba8f27
+Entropy.10 = 0e314ca8555ec7cb9814a4519bbba958e4d1a7e0e8ee60e6977416f08e98dc05cc96deda283dd6891c9a910f1515532d
+PersonalisationString.10 = 35eef700cdc6468349bb0edd62a3eb8249cc067260261c4d063affebe63945b4a0f1c10e0f178d6ceabbe7f15c5da460
+AdditionalInputA.10 = cd68d31a3dae76bfbca81dc2edd5abbd9976d55161e60ad48ff069379f600c1718ecebf84c169234113d383c7c43e5bb
+AdditionalInputB.10 = ab3c676ed34c8364fac5e4f73c64b78dc87006ca0a15993d9bcef23c7671d7396b04a5b6b6659995f89eaa02b964b980
+Output.10 = 5cf6986383dcd97dbfbb2d0666b4e57b516e773777a73b0fc6aa4f750d8e6221772668d9e58c4d4b6335c0abcab0e6a50291f060108933c3380ca27907fcb232
+Entropy.11 = 7dd7d693a2b66ce25289a7b4ce5f8970c46279fb973c48d011988957901508d7235eca41c580f9aca00ea17eae480c4e
+PersonalisationString.11 = c00af4b371b7eeb396a375b62d5249f6d014fe2b6bddcb6d1006eea1c950a02e7263e3fc5c1f92970204fd152482b064
+AdditionalInputA.11 = f0786d58ce09c335feb0d1f52015c351943d64ad20f3b9e2b50bfc82c3920a9c7e04cd50b3f3b3cf18ea9d9ef55681df
+AdditionalInputB.11 = ea809789bd9e885a2e8ae78fd305b122aa050a1a83ed7c3d82e82f0cd3c7a48c53eb189aabef35de05aa262bcbf85700
+Output.11 = 72b55c04156b459da211e54b1febc7f6dd4139afea3520aa8cac3b279006d090a57721a6a15157070ef3e28cddb6dae9478decabd78a39d9f217d153276b8336
+Entropy.12 = 8236b6fb8817c27f4f18160a2fcbb5136e93d217b0fde5245cc2964d2ef9aa690b706cabaf4217b540fa267fac6b49e7
+PersonalisationString.12 = 9226021957f954fbc839effd0310aba029b0c713988bcb03110f9084207a8a30b25ee0930e381bc2f681157516e79700
+AdditionalInputA.12 = 3430bd3db169cf3b56bc648fe797b134228fa55c554634e15232e32d64f424ef195ecf8c736695c620ce1f978e49083c
+AdditionalInputB.12 = a620c52ded0a3da5c9e717291a39d1261ef38e87c343728c054431a69330927797d350826e93aabae1f3cf2a6114674c
+Output.12 = 4bfbbcf8ce6b0c743d62a08066b325bce9363cf407b2f04422e3ee8f19d5532136532dd596e521259eb09cffadbbdb2cc8927d79b8b5b80303c8f96fb6254b1d
+Entropy.13 = 4da4e46ddb2ebbdfbd19d3323e75d42eb967cbe379f6b00f8693e9cec9b859833c6d1f49d47921adcf1f1b8ff0290c4a
+PersonalisationString.13 = 6fa6f5e1a8afa81558b5092091886aedc27ac84d24d4103f9c086917dc4a73ca4e56a5a7d39aeb2bb45c0b3074544226
+AdditionalInputA.13 = 9de87ff86158f87024d529eafb8606a829ee2dcb4868e4f47e4b6d12294400975049f830ef6126f6f95eeacede031ab2
+AdditionalInputB.13 = 5d1526df0bdd643ee7232963adb34ad4818b1f81b5010129e1597aa90a8e5fc9e2d72a04e767074f6ddeb23fa7f921e3
+Output.13 = 3a73374fc51961b017d511fd0f729cb21d44d4a680ff05c748e388ccef8a4706eb914837d91f23db1cc6c9e850b0c6e6041c8197e0571aced30a88b818c678f0
+Entropy.14 = 220d0d2cd6e424b97a37df3b322d5593100ed94e0a3abb7a3b843621dc2b76452fec131a2d6b4ee51f26d1611c3cb1e5
+PersonalisationString.14 = 43892dd3d8f317208207983039158f9833f1c09705d296fe45e72a9d6afc08b99a866b9542fa3db4d33a9c1e7c3e88ac
+AdditionalInputA.14 = 0e2ec484d8866adc065b4f11d3760b4d276e2cf9c066b226311e7c780689e840fbaf4f67f3da0efbb034d560bb73a1f4
+AdditionalInputB.14 = 9fdfcb7460ce5b9913ffb9889696df7abe28aad40eba3b675d7508cca1c98faaa27dd5f52997dd6f251a68e86f966fb1
+Output.14 = 66d6b1693a3ca1cb6169858390741bae3285e0c28604d064b57f3aa2ef9a569bec22884ccc5cd315d3f3847c680c3481bcae423cb105ea47956f62cf8c2c5d29
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = d2be2dc7520e5ab10975e2eddd0a8dd6dced9e364dfb47bf263d25e75c6f8c9ebf386f02ff0a722676b1cda18aba0cc4
+Output.0 = 2c1db42f45fd2fd6ccaf48d45f544b149b446cdcd0e88fd511f3887a2d1969060b26cc004559bf17e8be81b8d480fd728b3217ce10dd8bf80e622778db76de77
+Entropy.1 = f78f74979541976288032f130746744c3fffe9068ca1592d0fe61e4c946e41bc3ffda0033d01adb5f52ce027a79eeda3
+Output.1 = 137bc875ede8009a7783e97d11d49466010175c138b89457a9a07111417ca3f84910218293efacd6926adff91678e87e6ce12996135eefa58d4fa331e91afa8d
+Entropy.2 = c6be8386ace7405ac513f0aa2bf3a9cc81a1732af4f077692eeb34823e755c669848329f9d983f536b366bf89f6a5791
+Output.2 = 46b23078446a7e7cc542fb8e4d0410270fe8a1e17b825d86e0e60954bce0c24b668451002589c304e152f53350ee19782d97698203dadede78b17795873b0ed5
+Entropy.3 = ee1f42918d6c769ca93d024d360c0f5e648724237bd90de8cb5a3589c24e31073b39c6ff11694170ea7b3d6841666028
+Output.3 = c5c56413c35f5ae010a656469a9f188dec9f1f0b25aafe8b0a77cac9f911c457bf7b9a75178c2d4275ac8fd740b0f8967a72161df787d5333092d710525ec847
+Entropy.4 = d3338a25252716a9189f1799551e6b8efe37720a0373496d3c9d9f57f468567ddf04fce3e67250403f9cd8eae474f239
+Output.4 = bb245ac65040be1a7146fc229a3b08abfabc691bf2df373c492a4ada1d339e5df849a521042d657524403f9a48f5f753c67ee08102b5a1b904837b41e4dbe9b7
+Entropy.5 = 8df9bfb84eb870fc3359e28eeeeae7ac73b055146882ab119bae7e2b901154169ab03c8fa756689c02fbdeea1655d974
+Output.5 = 1426c13dc29afc3cb7299c8192c66e263e6f3668d8db495d4e294abaf049639cbb4734aae079a8a2f381263a37c9a2406362d310f58cca08829a7a4b07bd621f
+Entropy.6 = c9e90d1f40fd6eeeaaab160916eef33eff1288120d165d9ce8984f68421c989474572a61a0a0373d65b006f8370dd926
+Output.6 = b6157bb57c1969e22483df3e8c2c38daadc294e6acd2b51ae63d6ddd589a631742cb3912be32201951e1e3723d3c5a591e796b3ab7d4ec8e37605b0438e15a45
+Entropy.7 = 2514498abfacda89425ebfb4343c5ca8c34c18433005b6ed6038a31466525113fd97750f7eb8c8ba224d77f8b20cf2d9
+Output.7 = f036250e0a601d91c5b8029fc69829479b086d616e8dde2b62cb98f70785101b001ab9e5832508f657d9f52e9f9b3fa5fb3c02cc09f97a1cd4698404a7fd967d
+Entropy.8 = 8bd42f21b2b81f42813dd291e2aabb372d25687d2fa0f30bdfa9632db90c812ae5a25d8f8ad3e033fa5a0c981df2c586
+Output.8 = 9a589e69622c1d6680e3cf38e86400979cd8f68347c6c4b6b9d04d4548da23abec08b6feaa6a7e536b2c8bed28c6136fc5b310017d818affc40771d4b15e2789
+Entropy.9 = 4d3197c99612c5cb621601688692164c239569bdf39ee5e77e08a059e871d9710b725927a3a2c9a2a05bc84df38185da
+Output.9 = e3905d943e160a76abaaef2d234915c0c7ad78f8759f4c9205a8b1230a0cc5f972456ca0d8f47e0663a6c318b22cace253cebb5f0f2a58ed6ab4ed6d9cac25a6
+Entropy.10 = d34608247d7d0361e6ba5f68be39ca77da43d55e35ad5a3488faca6345a0be8b0c19e907a428b3164f45c8ddf9977021
+Output.10 = 44dc77054fbe30e889630f48d7b10e711557c7951571cf1feb7e20238acad4593dca7f7ee71a2bc1e0362b961754ba68a7ca3b83ad36dce20b763e70928a38d8
+Entropy.11 = b598f282adecf9d060aed6cc697ab8d5eedf4004a774d4b6d4365c442e63ff1c4ac7ee99f4b05f349b770b77a21af1b3
+Output.11 = 283c1905a76a7f3c666e6803950cadaf18d5fb5890e77c48cbc6ea135fe7c563fe2684747b55049921a89d34bb8457a46b78f0e8e102211f4c64f4c45007e06b
+Entropy.12 = e2b9ffc6b13c6135d76087bf6ea28460fb9f18c4e712785039443970924ae923f18ee45b87909dcac703c62d5875babb
+Output.12 = 619166b4071198c478427a1ac0c21a0993ed365b7801c02a06b804f4b0be553c0d0487218e5e20612bb4453ab59c8e4b8dbfc3282efb34aa943ba17ba65dfa28
+Entropy.13 = 38b49fe39f04bd4ec31208e951081663c06a93f026e2f0915b36e44c15969f6a9cabca1774a586aa0064a161facf723f
+Output.13 = 47b6dc1f9fc7ba68973e15b489e46b94b4ba58e23d6691a6e8311dd82a6187252e10102865955ea78c6b7953c5d0a7919cedd2011f85eacd298934289083dd58
+Entropy.14 = 80ffeccaddab35221cba00ff374728dab8f91f3e5498622704c050e3e13a2b0bdd2f913672e896a979974c52067e2a05
+Output.14 = 0292bdaf725f469307e76e3ef5bed03470f6bdfc22e4d7f0661bd1b87696c9da201bbbdca6a22344ea88ffc7325370863b4cfb105740165eaed9c6e73b06a4e8
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5eaf1fd9f7d73f8ca3a37449ab605d88763f9d8fce1425cec8e7267b89051ff9ebdded7c2441fa64865ad98e57d6dd8a
+AdditionalInputA.0 = 1b4b262e316446c840211dc3f7fd1071cde179ee9d2783706c0791359c7bf68b07ba880edcf4b761239e6bcf69bf8cfc
+AdditionalInputB.0 = 739fd85804e5b848267da4dbc8f0266de119563ed68cad5777b4f8d07e58bedbcca5f2c9af339328e5cb238a21b16360
+Output.0 = 8e1336b302f12b2101d18159072dd150fbfc8d794ffe5d7e54dd9fb80c09f50501c6d179adff456c15156d16dc386107f246d15bfa2a99c872f984475055a631
+Entropy.1 = 556260f4b1b7ea2a637a3c3dd5f384deb0e83dd2af5c6bc60ffac9dc4b43b59cacfe173d2b041c8f315c075e0e8fddb8
+AdditionalInputA.1 = 32d2c4cafd8271aa938e9b647e5d9b916d9b3ef789e243fa8b8c623ca8d64bcd7c7bc42aa8169a2e6d53fb39763f5969
+AdditionalInputB.1 = 547a3a1141380fe441fe01eceba97193ab566b0c8627bea26cf956ac8cbd789a72d15bb526ceec83532df7a276fb57c0
+Output.1 = 1be1a00c36dfc23cd8fa4bd060bafa306a0332a3beb0331af0819d8f70d771cce6867ff6d2fb45fd99d9e75298ba0437d6e958436864c18eb68821acfe07b208
+Entropy.2 = 147a2701961bac037304eac1df10b1571a600dc9a2266a7cafc18030fcb83ad560325e0a6f4b7672b439d6ca0284851a
+AdditionalInputA.2 = 2ae8220ae230fe6b00c51ddacd3e1f08dd1facab948525825fda86d8bb793a5c85732697d832c08134c20c1261da6d86
+AdditionalInputB.2 = 109fbe0cda90bf6109401daf3e3db8dfbbfe4889e66c7f4a447cfea59a21686eae418b750ead8bbe6729ddf5fff6b076
+Output.2 = 448e0ca28976d2121fc70d7654fe5741e5781db4151717624fbce5ff2977d9440441f48f07f3198f67508569f71c90d56d8e73e61b8180e606164ee88b4020bf
+Entropy.3 = ec415ff04d0d5f110bd1947945334e37b33fdd7e01b8a40ae4fc573ac2a4c9ae9831204b6e97d6066542c39c92265567
+AdditionalInputA.3 = 4b454817e5fb50d057d8d818846168e3af528d5c2130ed65cb5d18773f69edc9649fe16b1c470d5bc85647b2b92dfc03
+AdditionalInputB.3 = 61d91323285a6a7e9142b1de1cec0a5d4f6a015f2ce28c605c5d078c80fe385843e04998464042dabb526864a7b6af24
+Output.3 = 4ec6aecb7c5207e6b682a2d632cb1e95396021e4b594711ced37e84567c110006d51515917b6954c5425ba70e34a2757f35f58ee44fae2164b6b185335300d7c
+Entropy.4 = b48c76be8a6dc14d699f5d6b3bf8330b87827d828367a12c82c873c30e3a0f941dd6f0ac1a696b74256d0b5f28544ba0
+AdditionalInputA.4 = 985343382e8844b1ebacd5724137a414f2f855d08e6a92a6b7b3a8f11ae5c30a6270064419a7f441fffe831e5141a0f4
+AdditionalInputB.4 = 0c5083eb44d4b667e6e0db37af5eb5f93644e1ab269780f1fb535feeeb0e19f1b50f4c763c1e9d16d8a8da08c929456d
+Output.4 = 3efd4375b2294c356d5bc36846c4c44dd21c012b50d8f334664d1c4c3f442209741dba0790b49040b35603d61e29cae4d3e47ae07f726383accdcbd35fcee8f5
+Entropy.5 = a120c2bb5c4ed33a5eaf428479f5586fc74ed47d7db6ae2982b8a3710899b4ac23224faa5b215d9ad58a858475e8f7d8
+AdditionalInputA.5 = a34e7d5234ad3533f1d4269335a4de5d0c17232ecbf5546fab23b28ca2189b4d06f6980ccbbc2cb5906629d8b1b08035
+AdditionalInputB.5 = 25bd3bea3e5a0119e3eb60d5a620195ef8294b83e31f03cea2da93f233cd2529decc86426ee220997a53ccb9b3640ba9
+Output.5 = b4d019a1357cb251793ce72005957576d48c5b7d201ea2581a57dc65c975b08d4f1758bfcfbaea855708c652ba9e9ce28bc42dffdfa946bd67c7e76530ed5758
+Entropy.6 = 885861e619e71a1ccfaca3b5a9202b6317060b60e27cedd5c1c9dabaea7e225779a6daef56bb9cf90e7793bdc53f2ded
+AdditionalInputA.6 = dd891a6a79fda1708091019e1c8987798a0b430b3b8b29114574a6afc87b15820485095926f4114bda7a27b556360949
+AdditionalInputB.6 = 3425eca9caaa52f405d2d578a3bee39705efd13efc10680c423d7edf143165b47be88095c1529f0119b5058136389438
+Output.6 = 49e81f87be2976cbbe62e49bc6c6c042446545b79b19123c3b0d855f0e9cedd7c005fbb13f831252d74d97a29ebcca96d3a4c653cc3d556319bdadc11b48cd1d
+Entropy.7 = ff656c9b044270289eb8bb0cf792360afb51a2c12fa943b6de1f66f9708ef3a269f4b40ca77fce41e551a34e0fa7477f
+AdditionalInputA.7 = dad3510e96439f0239ec53056ee9027f5370cccfc2158ed92b0ba0c26b776905c8ae43ebfb3a828d444dfe6d5107f5f0
+AdditionalInputB.7 = 51c0551861df38afb867f2f44c4fc76f7bd1d775500a0d55931ae0cc00f33c76ae8bfa902219b701d31c5d310a8a5b78
+Output.7 = 92c3863d9fcaa9003d2f8c36ffa1435064c6c7f16e572b1e49ba7235ef87854f7e0ee5dab41bee0e8714e72ffa7f64640bfbb825158fb7000b28b8d385e65a44
+Entropy.8 = f62dcaf82efae3eb037f46ed2d12e2fe925d0440769bad68b857a24be0fe95681e193405fe61d5d8f7e80bfd59faacf4
+AdditionalInputA.8 = 274a3dc4e4e86d8e0652502db2fccabfaa542bfbb7d6101936b769a7e460f54b9a93eba147b411510f4c77926239d71d
+AdditionalInputB.8 = 30f740e902c5d30c9276132672cc194f2bd838ffb1645bc9452ee0e9fa982024bf7bcb82caa1ce83bf6db6a41281bea3
+Output.8 = dfd939d5d553b1f9fa995a70a7b7820b489e30f45944f2136d2d2e2a76f29fe97f9244088ed13a2acf0d5fd2ca5161d215f594b7fabea171b117f59126bbcaab
+Entropy.9 = 517aa77a77e5538fd7a13a4f5c0c9e7ee802eabb65636d2c0140e8a628744e1f71ce4c279c771bd84f352d89ff52d254
+AdditionalInputA.9 = 86d64d0aef2f0bd3e27e18404d3ddd83a61b0e7d4b03b7b4fdda43b0f1047a62e42a71e17051d502ac1d2b664f246241
+AdditionalInputB.9 = 4e98e38dc2b3d8bf035bd36ad455ee6150c98d99f9af5a42cfcb933146d2eec898221e228c97617d6ec48f223b52e949
+Output.9 = cca2d865312c0e5efb869984865b95b7e340e74f905161ea6aa314116aa49447481ce9ddefff1d2c33d91c7fb49f7dad56efcbf24144456be228107aadae801c
+Entropy.10 = fef1e57a770a7feef19fab12c0ff7bd78924cea83e5a5e0d6d0a730c17c392063271f4a86376b812fd31ea9ff43db40b
+AdditionalInputA.10 = d6bfd7ab6edc1f8dd412a7474def9ce534e7c35ecda3bfea57a98aaac7bc251b9d1ae4c1d6fd911efa61130fb84e4c74
+AdditionalInputB.10 = 72ed24f104f5513d2777c7f1b6237363081260a2b23da3db0e01b14e8ac72366f6616b4d92af99b49b5c84c959b982c3
+Output.10 = 879513a1ea3789ed3915dce9697b9e76c675b939eb8093d41d0adc3ed3aeb98b67e24c0c3f6ae8a61f0b772bd40acb6c85633233357af5329fc7a032988758a3
+Entropy.11 = 220fe69b9a5052a52e58a26a79e39e0b486cfca71395a589cd4ad3962c03d278997f35947ad69e37b30a7ef8eb126797
+AdditionalInputA.11 = a52bc9279f5e0a70e473af3f76899bb9e5eee846848fd1812b76a5fca618cb43303bfc93753899ae92585d90d648501f
+AdditionalInputB.11 = 9c375fa75341aab2da8b024075238f1788ef1d2e64678a6474366a298012ae7572e309f38208941d5dac4c61d8f272fd
+Output.11 = 7d067c720bfe15805f3dfde23964e8cef118834284008656f32acbfc20ba52b78188d877486720341dc971fe78619db5f177ba61553d41da2f4ec6df8267afd7
+Entropy.12 = 7c75edd1675f4ac844b9dead1f8f743e8fa6372be57ec6b72e7a01ec6b9371ded2e64d8f4b11d4089acc473b59507602
+AdditionalInputA.12 = c6564c3c43fd2c74b9d48c4f8edecc8fc00af06b34363302f8171ee493cdf143d0db6d61d8aae4f0c65853deea50ee90
+AdditionalInputB.12 = e86266b83f168fe616db77036bc1d01ddab14f132535e9981b77a687d758e845440baa8bf08b91a2d8408b89f6bc5a60
+Output.12 = d4cd790f3064e4b69c59db69fcb7168f1352c2ffc703ecc2233107911f224d79294ce63547a8d9691417ac3a98960eeb6a1df2d9bea66206f5434335e2533ec3
+Entropy.13 = fb166be729fd925d5aa8a03f6356d2b22424f012c599be84c2d6cf9c82d9bcc383dae490484856e0ab53789e15678426
+AdditionalInputA.13 = 5716e559c6acaf474fec9c6ee91524a749668a6fccd2981de44b05402a23217b8d0308bf7385fab4a833fb684519ce75
+AdditionalInputB.13 = 0bd480095bf64d19366da28d9a04fbc6034cba8c9d6ed1bb386b54df5f8368c0759c6446c732530c8dc8ca37ab06250a
+Output.13 = d7896e5a851cff76328ad499fa3ee28c74cedf99840cc9216ae86a0ec3df2f0d9e7ca14c40f94e17aed5a9ea2ba1d17b06cf172401d9e34673b8cb989cd8d855
+Entropy.14 = 937bc52b85331aac7c3e198b6e8f4a5362b2e389662b5ad7d7ce7e6f274d3fbd5d1a3a8347455b019ddbb5753d3f0f29
+AdditionalInputA.14 = 8ca625e0daf65ecb70ccc63bbe88720ece7a415b12542c59db488bd0562374121f256c0d2e55b35ff7ef9e570068f4a3
+AdditionalInputB.14 = e511e77b98df72d3e4c175b58b7182fa729a61649659ff117d9b4c514cf694fea2731b170d0babbf6b6bf8198be6d932
+Output.14 = d9d3ac1480323439e9f8f09a54b3668684890fad51ad314c8e14bf0fdb429738b8955e3d2d928f2403f20caca2065795c0adaa30a5c4683a08d83074633be8f2
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 31d9b26b6eb7fb569c1d3242b50a19e13f7bfcf0b15ea73997acac847b3ab840a72d03ff21f6b52e4f6555fb8a4ca97d
+PersonalisationString.0 = df3622282c7d1ccdd1784e508137c2d0c912b7908ca75e28329455e36d9174530518d28395114d1cc8af71ace5253e03
+Output.0 = bccd3fea43df70afe2d9578f4ac4b4087a0ed372a67487089d9de938699365aefc924b7dc9d83884be2746e196ce89e07ede233d16342d227571f08971609522
+Entropy.1 = d2356c94ec89869e29400726002da72ca825a5f112f0c5fff6bb08a89758dd51d0fc84b810ebede6b62f1b403ed782e0
+PersonalisationString.1 = 12a885af975dacff4c4c7d55561ff549a565f1d7f60607d8fb9dde53e108e92c8b99f588192368cafa629e52b2d42bc0
+Output.1 = 2f8b37e4319e72826bdb3a40e5329074a9015656fcaee5933d017e2f3f3bf5671375be0c89bcabc2037e58772bf5877c4142c0b8d9f0286e12e56a38b7a4f0ff
+Entropy.2 = 48416df6c49b85fc18cde31cab337ac4e614cdedb6b5f7080ad815ade958dd3a121116511ed3362ce356e2861c797f3b
+PersonalisationString.2 = d72850323cc63cba566dcbddde35a70c69097892e61e041ac64739689a225af08a4e466af789b040a09754545c24c709
+Output.2 = 0c4498852f8b8a7546e0a24c18d6a327214f007994fdbfad72bf91f67c2e2ec41c835b47e11aa7663eb2aab423e8fba73bf7b001155616e5800c79dd2779be47
+Entropy.3 = bc2644dfa4eb26abea11b5c8c2b75374c056927809fa357bfed4a14fbe17e8286c6b345eac5b5b6c80c0744f4c48c400
+PersonalisationString.3 = e8f9354d45e36c317dbfaf60fac90353a20b9636aec3ae3dc44a287b3c9e52bf0a1e999fcb2a92ab352006c8ab36bc1e
+Output.3 = fcb16f5c4657cd8355db7a3593d345d036e0ea4edb37781e2bb6e50d0480fb820fcb94449c695d2cf4c9c3112d41beb5cc05808f1c935da6da035736bac883aa
+Entropy.4 = 28af8c2a47a37d7ecd467e4cc23ec0a925b325287febb1036060d3729855c2760d2cfafd423bac1ba168406b0b0ec794
+PersonalisationString.4 = c8c074ae5606abdf4717fa7308c60fa9727d8173b5f22e50c9585a1012225ee0421d478633648d0ec9f61d945bfa42cc
+Output.4 = 0f2875675e054bd6fde2948b72f3a260385fd46b90e30fd564a0bd14e51561b40f1fe1e31c7ae7cce851a61a85f06ab0d9a494da82c0bf68081139402b2be64f
+Entropy.5 = e61cb2c17c1eeb30ff49d14954171fadae3aecf9a2a39b7ece6066cd85e3a08e2aece56b2b821a357ea20c2860dff794
+PersonalisationString.5 = a10b0ace385224346e8d61f4cf2bd58cba38fbf969cc5de3402f6f85a555704c016b5c3d219550c51d96713d5f067f37
+Output.5 = 0c01e9217f5ade5ed2160b7da9dbf7b48608120583fbda0d97c64eadf814d3089a5c83ef6f38fad7ae3c6a120a9d4a6beeff5235aecf610d43e42f332d4a0d77
+Entropy.6 = 17c18910a67e7c61080ce24cee2cf2da92efa703bc136069e0215490731f05d566ac864258cb028d32808abc7f18e0ef
+PersonalisationString.6 = 4e0acc750313c20613525b8c22d0759582bd656484051da461a336cbd85c74056db862b59675b8117a2a178aec415de9
+Output.6 = fd467f8ac5c37a92bd62c0a998ce8b22529a2dced20150acb9fcaab1d492768ef14e9d1710f4c46d45662a439726bd4ec157e336400f821df27c28bda1f25691
+Entropy.7 = e7f705a3875cd6007f28d526f2d9dbfb36fdea2ea6181ea5b737cd778b53ffe15a43d7fa958dd07045ef53be0809ac00
+PersonalisationString.7 = 6a743beac519f6fd67c9b5e578a066221c2046b8314f9877a96e667c354bcab01ed5e6dab1afb11f2ce035878e145867
+Output.7 = 7e3d3c548cad22eb9afe4f798a85346a611b08e930fcb33b46e767020eb896b2c914c0448e1755615ea2fece6c98ca8ed1751777c056f32cb6c11a72b3ff50f3
+Entropy.8 = 8fa50b4f9194306ee6e4d7de3561553d4a98bdce2c17fee346d6c177983eb390a9031bb88d82e105c73fa716ec40fa3a
+PersonalisationString.8 = 1efee8b76643d4fa2d34d0761d29244b4268917b570eef2a958ec68d9efa071ec796b62991343a4303a0b9e830c34839
+Output.8 = 2c8e0dc89b8fa1a04e85310ed0b95df67e65ee037b3a8afc55de180c207f19b7569f2c952d0bfadb7807225038d759ffd9991aed1eef56db14edb881bbb7c033
+Entropy.9 = 3b221d437ca1d9bd915ea869a97cad87541f8021f2d1d03318a11e08c567a9bb9c9dd074ca0873e89c1d6b7d881657f7
+PersonalisationString.9 = 6429f384a753549d2a22b1b030dc8208b0391d629070a85640fd1dc092ba87fde2cb46c69ff2c64dbbb32fea1136336d
+Output.9 = e654d04b43d7bdcc6436347de91a726cd6268b28ccdcb930b665fe9ef1654ee31b83bd3d923000c73ec7c71f8118d203cf131b8b16d205e951807230ab4488e1
+Entropy.10 = aa3505f56a2353c97797f004fbab5560f95033a74ccb5841087d8c2335deed819945f6e26eb2ae1f860d5ea25574b9e0
+PersonalisationString.10 = 952fda2afa9257b6bc0ce08dd17127e85bcfbbf515958e2e1e09a5330ef8dc78fe7c9aad42d5471e84c6cc748b1b37be
+Output.10 = 966503f5f85f50f94e1885ca2a32034ac195a8199c122b71e268b2d304c8cf7af8d1d27ceb2a46bda70a1e5ffac0a65210898b274a5ba536ee07a20863a01152
+Entropy.11 = 15275e31be7f9e270c4e4b26e8ea850f31fdf940359e47e639d98e86860a6a9539016911f19d39208edcb899f455677b
+PersonalisationString.11 = 2c1f62034b314600ef44e0402207aabfd617bc3d08c3b39a90b384775f02181b9b41032e4ab5d32dd2ab28cd14a17368
+Output.11 = 606be9e14264c01afda7aa71e3c234cc068ee69e987a838a2140df028bfe74f8188ae4418f10fd099b8b994a270e239a526f2d03b305996508468c07d44bf54c
+Entropy.12 = 3125c3eace58b349186e70edf825c5158f19d53d556a5737088c723d84edfc627edf2eae602dfce5a9ad35e0b95f4096
+PersonalisationString.12 = be9fe1de0b448147c49b412d8d722fa0d6b6cb998ff77ebbe2398482b0f9e89b10e8e5026fcc8a2f4b9faa338c45f8cd
+Output.12 = 5b6a62c70e98517028b1784978bf1f7642a05fd586684a4fda2c98c0b8b69861b0d65a4f96061061874cdcd5d90dc0e9c74b048641280fd7f689244392f20d0a
+Entropy.13 = 1213f4661f4cd363bbf16f5ba4ce4f3302961797772fc8e412c2610b4b42d4cdeb14ed19b50b6ad968625169b4eb5dec
+PersonalisationString.13 = 98a1c814aec3df5bb4fb17778d58e7884a69dea09a83be2643d169c150d06a9cdd477e20623993c7505ea104b62c8753
+Output.13 = 3c0ff2ad4558585ece974344b5ad7045a0fca9ef1f25e4251dc800d41abc3ed00c3adab5dba141fb1f95c3c21732d4b63c192fb4924c6f7f984baa88e4dc9091
+Entropy.14 = 409bc372b8738c80ac35721bbb8e806ddc93e816c8fab98d1d0f2a053f95960166709380695b0e8a548fe48e4c12dc01
+PersonalisationString.14 = 975da7439df9a5b76f8ae5201da35692fd46d277787f8a73b08201e6547ba72de26ba7725ad44a11f742e6c2b57c0e9f
+Output.14 = 01fe7c18b85ede519740ed4068af24b4baaaa7d727b05241af481ec843c20bfce41e4bb131cf03a504aecd5409d03f6b5b84d22f0e1042b66e5d99d4339742fd
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = ce8aa744796898911ed6774d06dd45298ee7403f084078be9b502f4df8128c71cfb6de3dde92f5419a445f55259d2302
+PersonalisationString.0 = f275e2c6c2a5b90cd5b8ecf02694f8ca77d3bfd62bca6bae33e3b7a035c21ef20947100fa936def4a8608788abf34ecf
+AdditionalInputA.0 = 07a3a781ee4a17d110ba896438d365da364bbbebee04c1892cc93b59fcf31aaa780cb664b9b054e40a20b0dd435a4e3a
+AdditionalInputB.0 = 4e17f0138089dc31e1cdd377f1eb4cb4da4745e79843f36082dbaed6927234c675a061111d5fe91b383a8b4e3ecdb59d
+Output.0 = a0bd4ebc1f2e28e9593982af694aeb45437c20f7887090b947be33fb8d62255b2f3be7d5d67e52f5e82620eb40a3e112af1593aae5fa592a1630966f8ca455a7
+Entropy.1 = c9325a14bb470fff0d6830a7058db8b8ad4be724818dbb25adf66b0027a02ca9eb4ce85c634c5a486949b1ef9c02a5c2
+PersonalisationString.1 = 45ceeb6b0fc3c1e4a97780d4f86dac9a42de899cdc52bf2685bbcc8de9526fbb4bb5839e00b38de864152c32990aff7e
+AdditionalInputA.1 = 2fa1018ccc642b0346b2587a437df1e8b0b2871a469310be29bd1fea8677b3330188538b5ab7b80d22820ce2b1e8a625
+AdditionalInputB.1 = 13ff66a6cdba89dc7fab39063b6e02671f6f3c355715fa6320599f2e6a00132e4330f1229ce242c0fdb90ca2a91cee13
+Output.1 = 7d5a9a204f288eb8c02604668c1e61e2a65191ed98b59707a576d273de11ba4635d6e2b7212436f46b19eaa02bb97384158f7e800742c19adc861b10155b8835
+Entropy.2 = 8faee8607086432df086813427697fd22774dcac0aedb91c7a5a75e3d89d94189d809ff71111735e25bce8c124639c4d
+PersonalisationString.2 = 2b0697b81e98a35a51b34bb4dbcaeeaaed0817bd3d0154312dde12580ba840128b8abfff3b92de96a29be40b08cad481
+AdditionalInputA.2 = 63d841c3c75e7698609b8a0612404fa0f6dcddd393b460e974f40e3b7f033f4eaebc3e90af905f704a810f2dcba32d7a
+AdditionalInputB.2 = fdcb887bed6736aba7bcc3d16d7f894b3e856d96d7b1f58339c1fed9bf3d4fc453feb73d4914a2d90b2a62e0c3b133fb
+Output.2 = 50f44fbbeaa7bf65ffa60f5dbd442567e05bd8763be6f4834bf0e0e61f7f7915b47760931601ddcbe550962c5d5ac243bde59ab1b0ca7f1966b4bd2e8375ad0f
+Entropy.3 = 6bed861a201e459b086fe0fc4084daf62bbecc737dce721dc471ed2afd87378e7a59de2ecdef2154a30df2fabd51d560
+PersonalisationString.3 = 267b4ed1efab86ab5459aded62811071df413c1cbf2bb2a1049538399e13cbfdf8fb870f3b1784cfaf916eb32b46fdc5
+AdditionalInputA.3 = 102d2b70597d63a4425623dbb30ce5f7c7e1140647982a4a178dc71e7fa1fb33e2d61eae0f0e0aa1013b20bd59334759
+AdditionalInputB.3 = 3c8b81bfac1099c579f3067d018bf2dd34e268e2ce578963c01d38b54569e4e7ffd212cf0d7f43601245e6513c034a9a
+Output.3 = 3afbfe4fcdc8f5dbf9be2f23f57f25c6cd061ae592bfdea8a7eab942a40fea75d2a9388606d6062c4144ed8e197e157ed7fa76d3e82453212d1d162f5541e5af
+Entropy.4 = dae4105105326a25bfa8a199502cc879f6689226f269649fc46c36a025b40cfe0f9a0e9cb1cc1848030e9b8bf20718d3
+PersonalisationString.4 = 76e6b9e848b07db7dc3978f456424c21dce6c043fe9ec8dd55e34c178b29dd9739659b37c1e0f44200ceed7ffe731ff9
+AdditionalInputA.4 = ea26cd195c9db0cf8d95c65aea078131bbbb9a83b3b7511e8522c315a877438d0b85e14907afb71b3dd4a9325d28fa78
+AdditionalInputB.4 = ca298856631aa25afd1922cd57aa73f03c6f0a3a07cee6ab0676926105a0681687daa28777142c3806849698863eeaf1
+Output.4 = 678bc86ee8c2c9b57d3a4e27412a0ea8aade7993d787452d6ee79f5196788140f6832e825d8aa3943499470ff14494f502413975c54ffcf650daa3325046883f
+Entropy.5 = bd9aa1fb14f237aec046df3d6320d419227679516debd7cb6a1e2ab8be25b2da03dfd2185b9b4b6fa9ae0bc7efff12d4
+PersonalisationString.5 = 76f9e1911bdffee49af80281ce3cbc40cee76bf5efebd9f0c71fc515d18dbf820430d11836a01b88705dd91a8278c2d3
+AdditionalInputA.5 = 3879cce7b894d8052a8e69fadbc154d0f1c52539e1e074db5575c5b09670c5748ed80e7c7655005d77ecb7c320f677b2
+AdditionalInputB.5 = e999c81a8c1403920ea342f8e0f8a8b6d7c143d745270ba575ef357e26884a6760d1c7d1651523810642531d2d3b8832
+Output.5 = 27cb56285608a8b3d0e23ead3c2e1695bb510e7e53b0f2773dcdbf1cb061dbe2099b37474bb27f01d48c8c1da857e15bb4efcd8ce490b4f33854027d8d76ebf9
+Entropy.6 = e145a1082037134ea2443e00e6e176704ed8b88773d115e04dc4c8461e4d673ae82772ede2a77895c5d5aa949a1f52ea
+PersonalisationString.6 = 06ba16b360bec8a8ba7d48abc307f409bede71713c3839742c518a5f0fd825383e409096a9a71d5e2ae7002cc62f4fa7
+AdditionalInputA.6 = 230ce95139b4bbcdf20a0214ac9569aabde718213a7317a97bc90e9674c1f14e71fb0ad91b13700681e61c5b52a8ce31
+AdditionalInputB.6 = 5abf2654f4eb3e8587819f4851a24112bc711a93d1f36f1a96e0dfd609ec1bfe00d69844d80579dc5517503cfd53ea6a
+Output.6 = c524dd2bcf492f008792807bbb968f2da7e2d79487029619cd4752b03c6cfc68fa90c651b4480b656fbba32a1aa0f210f5d8304b5bc57a272f69781aa6acf392
+Entropy.7 = 1923cd774722c235b85f68c220a0f675acb8fe4a2f3cdf56b729586322784533872b8bc1a657096047f68f52485a92ee
+PersonalisationString.7 = 9806a87d7dc047f02cd88db56ddfc4e68c42b4a915fee1c063aff6a62def1ad70ce2f1bbd068ebe1ba01ecf9ccd2db17
+AdditionalInputA.7 = 483e45d4f3fc9307bba373b70e80b985ed1a93257b0f62164ea4065cb3b2ac627c7a0271d02c370954c1d7956b9f5d40
+AdditionalInputB.7 = c46b57616421a37278c11c3abfa141f17bdcf5e6bb9c6683cc1160d264684a28ab42d939075ed5edd946dd674246d2c1
+Output.7 = 8d876073b93846cab138bda1a677c0ed06b2ff77171a5b71339704a6139c2df470e18693f9aaf1c88331d19ac39fd52c2263364c99a3fc9a41bc936a35b73f1f
+Entropy.8 = f149eb1c85a204ffab73e7728e464c11596ea6e891b143c1a5fb4af5697b8fa3fc85af22b5d8e1bfc379b517f401470e
+PersonalisationString.8 = 6d77a55a691385e55673480e2f302b577495a378158894caaada3d08b724f5667c12184e5be54d1b36ca2b33f8e6cafa
+AdditionalInputA.8 = 13df4cfcb7123aebfda02d39ee95ba5cbc32b18924e87f34575fb1a32cdd33d0492c34146897cda865aed5b1ceba8ac0
+AdditionalInputB.8 = 14cc9901bdd0d1252b19c08894777927d38741d0ebd451ca592c0c75e8fc120625c57d9efefd1903d5ca902c7310fe51
+Output.8 = cf764a67a74cc066fe7049a3055940f1107b918f82c7005584a35d3e3bd6933e3e928ddc8c93f5ac54d00e7ee42edd030c0ea63725388e1ccb99a578058587e6
+Entropy.9 = 4f916b44ea32b50c9efdd16d9e5f28d80f17eed305da498f4ea9aff0ea2ec7c15b594a6f8d80fac7efab9886d6d5bff7
+PersonalisationString.9 = 07593a0f2ec294cb103dcfde660b5b4a501c7b5094240a4dd04f7b8902c01bac754af85034cc1c0e3413511d14b3b7ab
+AdditionalInputA.9 = 51092810d2c7649fb2f1d78e0e06d879c386141f8bf6ee8ce445fcfc469af6b0ce8cf56da037a3f1f51bbd2f88b5e809
+AdditionalInputB.9 = 6a2141d83331e579b16e37d3c1c551e4a68055deabea83fd2382c418d485b6a73efa850c0aa5640c3b3b726479fffe70
+Output.9 = 6404e065558c18dcc39b78ac60d707abb1f64ab6070d3bc3a5da000fdf02491540f7348b98a159571bc136196e17d83da73c39718aff15da2469ee57263f5d69
+Entropy.10 = 05270c7541f560eb0c8fd7088d60856004f3f5603de96d25ab49805e23e238b1cdc6a6aac5f905325b92c1e593d6d27d
+PersonalisationString.10 = 7b34f3e2ebb0779dbf26b62877cb6799f0bdff1be8cd8f98812ae41b06a8a73d202e93d8c7638b028da192882d977158
+AdditionalInputA.10 = c26abc110965ae83d0272966004a938d0c0583f506522a3c32ddc6dbcd8d6458db703d3e2b30cc023ec7652edd747fdd
+AdditionalInputB.10 = f5c38a59cce7e8e29d8767a09cc656d33edff4703f7c984945f66410fb190bbe4382a473f4b36fd10d61d16d304466e6
+Output.10 = 8d0e2e337fbc86325874227e48e9e3d8e782b69547ac4445ce7c19a58a63b5ecb0f3679f0c439ef0479ac9af22d04f4f5777cda1311c6c4637f31df860a632ac
+Entropy.11 = 0be95280226717aee650d2b8498a1074cfb51ebc5c6f8b50d71c356ce37d6716703912758381af210a70670c7088a9c6
+PersonalisationString.11 = 32e68d6f6646229b751ff7a778badcb7e786fc354ac18146025bda696516184878a71143834f0de8ef99a73ae1b512ba
+AdditionalInputA.11 = 721896c44cfb832126a9f4cd76ab3a041eeb140ee170edb8b10de8e2e439ea6612afb06d5183e79e9f3b164f27d36c8f
+AdditionalInputB.11 = dc61fb8c3833014fa82b640e3ba8e86f32c1fe90a599689daba0b9378e757f3d1e039d53f625c95c63960340ad6d4c57
+Output.11 = ebad754dca66fc09c2e7738c144b24575e7185a42950f9a19f7359c339d9e6d083716e0a9b5f3e2eea192add56cc0ce91d5b306085c193c1d4afa7a41480aa0c
+Entropy.12 = 0eb59f8439583ee5a8e7d32d40fb0aceef2faec676ee463e7e7fbab1d5ec8f25cf42fcc2d0f3bbacc6a9bf75d96c7d63
+PersonalisationString.12 = 2fa998946903fcac98cb16dbf3dba90a2de7f8dd9534718819fa1aca9727b3fbd3910e771929531d123c98d21300978b
+AdditionalInputA.12 = baa59e866e03f2a12c36387daea069cc216c7e94714c49a7d50b600ded65a79865dcd29c46b6b620e87cd0a1e7088e7c
+AdditionalInputB.12 = 2035d730dc1820ac4db561ddebe8de4486ad1948ba4c34d90bcf3ad64c603378b594b6399f349098e63b07e938621616
+Output.12 = 56969746dceec41fcc595abe22dc438e739c504f6518580e682c52bd86cda6f6e1fd4662e859f6a9c6809af4fd524de45af6402735f4c43cdc4c4f4a94624ebf
+Entropy.13 = 2d098262dc828b18260ff70f28e5cd0e0081755836d10ffde908a1edf3128b28e27429a649341ef08eb74273c891c040
+PersonalisationString.13 = f8a03cb1ae84b496a82a406d340564400f26118083664802641545b57cf7550709b692e3bca2fcd8ac7233f0f54be8b1
+AdditionalInputA.13 = d3dd724c735e63f5a49a03ba5c3167b0c21d95976a4a91c2c6648cf2ee019d9d08c033b2ed023de54620b2372e3f3b5d
+AdditionalInputB.13 = cfee61aa41dc59e75ce93ed3a92ec506dc6d14c80c567913153aecbe5b9d8ffce89a8d734421dad0d48affab3eac0a2b
+Output.13 = eeba82494688830e5f24418e38dcf55e32a1d4b043066a996a7e8f11b72a38d7fe27c7e5bddfa7c56df1186f1ca57dcb33159608003ae1f2a48d7a84249ca465
+Entropy.14 = 93363e22b38f878950718c729cb3ffb0fdf21536e71933358398aa4199810524a7463f2a414b5abde7c1a6d22b1df25d
+PersonalisationString.14 = 7a0329a3feee3b0a5584ebf92e33675e11ea9847ce52cc0df4ea5c4f2b3662121910864717bee9f0bb6d024eb2abed4e
+AdditionalInputA.14 = b0bf3ae2cfe4d3fae5573781456b3725a59598d52ffdd081b412106481eb0449c6f680717a72554f3abd7ecb00a5b976
+AdditionalInputB.14 = b94a9134257079c16192066b6e3e50d63d58dec6632524114e6bce3415db5abfe0c89108cf2fd6478a97079f5190f1c5
+Output.14 = ac7c1a00228f6a7a0620d00dca7dd38e53c71d31aace470703e4d8911b071b5ae517af60ff9f2aa570b18d35b2dcf8af0ee14ba646f2be35571c7cec44ec88d4
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 5667df8e8147f0d593989c0b28be7497fa9e28f46c00bde12e53aa26dc3d07dc8d7608b55a16e92709762c2c1dee64b3
+Output.0 = 639e5394b539da7be7e365849c695338c296954939e4d605c88f6056cab636838e2a51fbd09963844b044e83b454c87a52d25dad86cd52b9fe8a66e1b01fd4e3
+Entropy.1 = 812b0ad31061e2ee11f68fba7c6ea4cee8ceb4eae50f11eda7b1f38b52d2f49e061acd25cc55819e72160b310945fc8e
+Output.1 = 614821e0841dcf02b4979df0d9079bd6334acbefd09121e512398f6b21178c1e998d199d330af4dd162ee1adb61ecf28eeecde8a895993c2711427a3bbe90932
+Entropy.2 = 87b833c1df6c73d7780b297dcd08bd122f3e4abd4dca6738c55e51d6709e92656a179d16352af0bf13f0ebd283333495
+Output.2 = a3d0e6fd6dc3ec6c7e18ebfc4b4bb38a835b95e01a68da4d4c72d3863c0e39365d4ca460ac0bdbb0bcfadb0c07d1f8d5f17edb043d0ec5a9fea49ff39d4fe1b7
+Entropy.3 = 974a9993cbefeb6145af84227a7f41e0127d2af7f03c8d30d8fc5e2b53322785b55bfc48489bce8cbcd62b0f630a0d26
+Output.3 = b8d3a4166dc1303b12022477bb954cb18f26c15ee321264e2696e19a05dd77c7f66d15fca1a9a39ec68064960b2a81a96729f9fd30dc3c17a4885fa85784fe88
+Entropy.4 = e4bf9edc2a80b82b9cedcfc24aadcc1c8687b283d2c8d7a2e8e6e321d82bca7f39522f16f0ebe05d9f34a679baabdabf
+Output.4 = 034e73c2d087c0c8560be91bce035f210105c3a055573238e5f7d3ff81c434692e731ff924609ab3655b82abc011ceba4fad2d66a152239611cfc580e05fa54c
+Entropy.5 = 5ce9edc12be6c78db3f1b98ae535a3c8958beebda0594f239b6265ff81216c598bbb67382efc0191e86266d7e62aadf1
+Output.5 = 2ebcbb4708f6325fd38d463f451acb2b2d58d7a8566526254b472e3390d590a011c67fac4514126fce0cf9d75060a2fba8c38e0ffa690f8dc7432b94285787d3
+Entropy.6 = a7d0db93e77ff1d1ae04a82b7fb1c1dcf33a1a635bf576bd4aca148efbf99c20000ec4931b4cc3cd33e90fac351eedae
+Output.6 = 0610cf7db60386ba11b4ee0914f4da290413a45a2ec55296328cf4e9cce0135ecc8f4d7915f13fd5b1cf7c933ef4a16ea6727ec78ea42a1e5bb00b493010acfe
+Entropy.7 = b3bba71d87b11115a8373c1c82ef2d035c47d1858f6fea1caee34a9ede78215f27a5d51fbe6a5421be5ba7a348f4115b
+Output.7 = 0e5684cf874f96b262d79884de6ea21862b01d076e47be9969d554791eb8105983b0364976eee03a7af1c37f8dc731e7d37619fe98977f607edb1a18a0c96ddb
+Entropy.8 = 65f04b9f59c01d80b5ba9b17122e9cfe9ba54f708bc7608a0bcb960cd4124165ac886ff0de77064b01ee4d183cddd352
+Output.8 = 237a262958a16c52210bc6fba0a05b795b6f866f9769aafa0cc26d157f28ee0bdb10c2642bdc15dfb251a1f00948ec974205db45c0e551d66ef5a29e06e87201
+Entropy.9 = ea43c291eeb5dce55c76339286260a7ce41c246b7f84ff5c83418f01397e46ade4fc9510c2b8c7d68dcfa1358c3fa129
+Output.9 = 7edd8bdc5e8369e51d9d551103abeb910c73ed10fed41222400396abea1c180344096eb41bd44a59daab19fcb9ff4062969e11f3cfa796091b608814ccc2e713
+Entropy.10 = 57d2b1cb0e137e3be150a9f40c896cba0a58335c0d927059d3c9b63ab9800e81cd9803d1625f3fe553a690c28787c45f
+Output.10 = ef278d11a6d694b30ed5a1081eb2bf3d2ed78725a67ed7e014f79e5be2effe6871af2bdfeffcc6ca999c097c620184fc60713aa39907909d6eb153d2b611673c
+Entropy.11 = f54d75fe5e7fe6d85a6b472288b4633bd54377b8b4e56a4ac047ba7ca20401372ae24c4bd1295af9b99cdcc8d0d837b1
+Output.11 = c8b5cb19fd443422533da74dafb2e3a73bef13b9cf1c1ce61040785571353220caab0b4ed1fa37302a308a31e1c7e44db4669a868da8536e6889be3ec61545fe
+Entropy.12 = 1f2fd979656d5af3cb2bf9a449b2e07835b959e218317418dbd10a016796e21a64453c765130b7d82681a70cfa438975
+Output.12 = 408842f15a3351928964e77928bfecb8dc0c2725a0b470edb74a1391fed91b40010431e4767cf8e86b3f640f4e98a1ef4e54f5a5d3bbf69c4c7a462ad67a6ae5
+Entropy.13 = 7279676cff6761dd738a347b644e691e0fecbcd82c2f0736a261da3a6633259f56bdc44dcf0d0bda35bfe77463265c0a
+Output.13 = dbeb1de34b0e6f1c96cf4afd1e1230e434bcb1a5497f797871e16aa3f60f8dbcb4b3f020bca94f23e35d494062238b458ef3d3d9fcb2b51aa11ca6b83a206c1e
+Entropy.14 = c1fdb2167e6db331a3e796c83c8b10352650c20cdcc41b859f8b0059f2638bdceca6120928c3311b6b8d764a67b47192
+Output.14 = b9ec753ca46bdc1058f5b77a9d1d9d7090d0b70f8b9995658b8d5abcb68462a09c59cf404bc4a625037b52ba10e336c2bbd049a507fdb95e32d09904a2482f97
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 17f59a45480dc74bc35c52c5bacc06dea9ce7e4a6e1f3ad92f92cc12c70185eea5ecb2924342700ce0ff7481ab1a01a2
+AdditionalInputA.0 = 0347d69441ec40543006c0413375fcb10b8123c0864387876921916c7b08aa8f0473a21f91cc5e7c943453030982d104
+AdditionalInputB.0 = 03f62d5fb88bd812d3ee0272adb5393617ce5e7051da2354d3fd7981863b184e8f4a567b2aaa48d2b37a80bf9c090436
+Output.0 = 32bb4243255b23e96e02142a4fa89b2bd853f26a3e6d4cc6ab9b2c1fe9d44beab8b618ee8db17f02668dcaf9f7f208009a9247eb65f78ff7d0b6be1f7aa02f83
+Entropy.1 = 97754e2d564001e353270887bbc2478c92bbd912173a687655ad178883c6c364bb5c96c84090079434b12d65b2cdd7d3
+AdditionalInputA.1 = bf3e3ccef1a794818d7f1001e0e5e60362000aa2193b4f487cc461b8bd0e07ab33993625808f3f705c37bed8563b4a3d
+AdditionalInputB.1 = 2fe2788a5c9cd152732c146cc80a67f10eeec3fd1d45e042d5ea1b0883ee32487a01989ff29669893f0c1f96b031d268
+Output.1 = 3f98bfa8de8c7130bc6cdf5c01e606b95b3daa38eb6d6ff73ad22fa70f5af30d987027aeeaa5958b8e120ec045a8907b3af31c3d38331b5da342c5ee614bb205
+Entropy.2 = 563305516ec202d94e0473252f022fa66a9199d091aef94ecea7c6e5ec235714c5eefb0d1596b5f85352322cabe118e1
+AdditionalInputA.2 = e0a155739ae99bd9158d4a686f6f0c1d58d007f8fdfb4a208d552f7e2d450cc55adf3c1e6513ac2b849227efa082fb66
+AdditionalInputB.2 = 8854fe62dbd236aa13c94f29fed792d60b90240d20f887864ee91b0621f1a15f1b16946087fce5196a03774502596d36
+Output.2 = ce714fa9127a97990cffa41504385137d77cde49086b85d0e30cc2e9b6ff3816c62438764f4cfb3ca41b5ef5cd76572a5b1a4bf413425000084255de7f52935c
+Entropy.3 = 0ff0be15bd5171895053c0b441314a9b5047c9bc3f3f2cdaa24720bf1faf9a00eb4b4e08673aee5bd7b88579c0ccc952
+AdditionalInputA.3 = cb5673b89dd9c57cd97d59c40fddb5bcf531bdfa97e9820e21e21ec4a7f608f48f5fcf66337dc48ca6a8b347190c8f85
+AdditionalInputB.3 = 23ffdaa36acd091f5a7b7923a19909c5283287cc470574ac00344c4bff3c6ae7b7b04dad9e20e91471b4290113d6a056
+Output.3 = 96a0a2f45b0549cbf02936310749b17b3930e4e4ab49a0cb4495344ff84898f4ae300f131afceb1f52664497f931d8aea48c3dec0f48b06ea4b58c3a4012acd1
+Entropy.4 = 94cb0b454e26986fb37ab78ea35214756c1f4016ae3bd6905dbd2a5834c47b7232f80d304357ca0bf3f4aa5dac194f33
+AdditionalInputA.4 = d366dead7d7bf9825a38f452a09fe2828249d442e223e045d2006a2dc6d2b780d2533e0123b1e0b1c45310b60300c6a7
+AdditionalInputB.4 = 1f8fcc4f5f35bcf20be31efa7ff62e728c949a737a728ff8da409f4ef6d316d83f340c108bc9e165b9045487a9f557fd
+Output.4 = fd245ba6fd8575a0a3a9aef7f7e34e0e33add874bee4302fce98698339f6e158fa482a4bd2056278a157b286f8f0c4bb456021c8a3cb4ccf1910d954afa8f357
+Entropy.5 = 351128180939449e8a30cae88f56ef82d3a712614a843a9119a5177c66c987bf65e578791959ec9465a4a300e52cdf39
+AdditionalInputA.5 = 90297a2b8279803fc8bcfcc3e8b6e66d0e4db36b77fa2db7b63559790dfd0a6a783adfbefef6fecf98438a713d77a203
+AdditionalInputB.5 = 35d43171f2143346a4c54b272916cdcc4848a95837e6ea0d048ac2fac3aea5f90cbf033487c864c332be79ca5196ec2b
+Output.5 = 8a86748010fb255d0124dbdfc303232194c7c066e1bd26c865f07f19ae09fddfa53e9c964dcc5527016395a8164c5a5f248df60f41db6dcb50d68502b90017fc
+Entropy.6 = a65674268f03ab248c3a29f889fd625b2b13d1d1cfe9de10c99f3a432adc0dd0955b7c987b700b836523548c42a137c7
+AdditionalInputA.6 = b545b14cd762553de0894295df7cf3a52577082c2459baefa3f61d0580e2bf6c09ef2524596aeb83a2b6f8c5d46342ea
+AdditionalInputB.6 = 980225f5a643b9a0f2aa5f2c1c2aa6089d0706d176cdb318b5be7c4251b3b0225d8315947437ef7f4f551bb66ad59b73
+Output.6 = 280af4b1e2af04ca4cef0632539957ec4fd5fa4d14fd6dd4e3bb6d5d5cf410ec0e978ded487704dbac163fc3f2b778ce67a56f497f72fa69f8122b8eb23db3dd
+Entropy.7 = 36b81002e0ff7ef277178d04201742e844f5ba93ce4bb0e77c00eeff8dbe9d974a5615316b242bb244b1249bbf14356f
+AdditionalInputA.7 = 9bb3d9d60d985c71acd2f04e8c92ae7b7f8980598134140d2a12ea46cc47ba30bb11c8ee554e170b61295463cf0c507f
+AdditionalInputB.7 = 30bb3ddcfa035b7608945898fe05311a57a4fad481184da188e2dd11403c510b6fe8e1e44f6e0739738ef89c7cf8587e
+Output.7 = 6c6ffa1140cd3e5f4495cd5fa23bcfbe06e694364a3a6154b21cea21b8f2e10628ef35969c31b8067ab77fe2631b53d3a44efc94383beedd85567d969cb43011
+Entropy.8 = 03914120485375ee8c469563adfedd274873b11a834dfd416ac762c1eca7222968374e24e4446660d349b0d77fbca926
+AdditionalInputA.8 = 485e2e1f603c5c5890fbbe44fa6f17228e9340c20507b1e2c93d31d86672c0511df5db29ec006063ebfae1a39e95cc95
+AdditionalInputB.8 = ffe69d1ace62de2f9f7468fc7d4be7c09a71925c8c4b757461ac9633784a27588a81f5d6c39a0c78a30f6af9a8a75b6f
+Output.8 = 64d64e7888a67e3aaeeae3cbf13d3d23c70b39f03b885d3295986ab4a2208f86b556c86c66925d880d666cc0dd3273088c2831c96f3a39cee7530bfcdc565b48
+Entropy.9 = fa847ea8044732f654056c36cedf98171bedf9b43db51b9126ded20c3dc1d92400978e6e2c5ff996932d351a3d67331b
+AdditionalInputA.9 = fe927244a9c1dd8144562593a38899141c2dc027d940226a28fabafed6c019b4c94fe7987c418c4dc1484c7c87721952
+AdditionalInputB.9 = 04e16219b5728312f05956fd6a093e74a362bbedc3c9443668cccdff2950145561442f17da93003083c5824f3dc68ec1
+Output.9 = bb24b46a12b482f0cbce278a2b6c012d7cfac2c41590803c565fcaddfca852a5699112b10ce2c0a84d45543a893fbf2c9fbf94502010d7213218a8283304f659
+Entropy.10 = 85e4eb58a34eedecdf5346483c1a793731551146144dec782deaec62ead1f168b2fb4c1cce5ac8aec895d71a30d91fbf
+AdditionalInputA.10 = 81e29a576b770a58fa55950cb26c4be8a0296574538eb9af8068cd15b3adc87e23c104fc607ab57e09aaeaf653f69e03
+AdditionalInputB.10 = 994c976e25948d7c11ad89510ebc80cde441ddaca00ac7fd8adf965b0aed4f57a150c28ad06dc03dfd75443fdea5109d
+Output.10 = 45d8c69c96ee1d3ca73ff89d79524bc118bf49e2ae107356a244cbdef92cb738eced64b99560b03e8e6c6082e54fa379a6ace7ba05da18094d6e46415e46c4d0
+Entropy.11 = 6ff2b3547c02858f94da9a0757877671d68a9d918a580c9ed42599a7b5e97e44e2ca795e944e51e0565c77b957849f7d
+AdditionalInputA.11 = 527e2f268ad3ff9a682ed61e6b2406018970723f2b9f01684bb018127edd5396ef2e0cea5cbd04322cdcb9a199a1a98a
+AdditionalInputB.11 = a843cbd68f92925d314c70cb8605abb34dc8a6e4aea146dd0294dd4de79b467681e521411379ec9d1ac1c668ec065ef6
+Output.11 = a8ab4db757b28143f7358cd37c789fca8da564fdd93267ad557ead34ad71b2c76cad69118b3f5b403df1924e5c46d3b29f9cc854ab91df0f68bcc1c442c90102
+Entropy.12 = de366805146d94302ab6146028d697b292623b1598b3c2d49ed6cbdf788eb8c6cd984f2bb4fcb5d50ef0235505830b85
+AdditionalInputA.12 = f6f9625e716ca217cf9caf8d4855ba4912cff49e17ece99afedc7dcbeb2a6e386a8014b45ae0e3ab26647711461ec806
+AdditionalInputB.12 = dfd6653fd0108c4e46c4dc462fe959b9a4216175091010ce4643a1ed9d232230547de90f73e2427340e12666fe389ed4
+Output.12 = 4a3eb3de5368c18ba3e9585112d7735cf204e81da6287775dc7e56fd814d85d8f4ffe6514fcb47220c958f8f415c778e2e44fea968ecb02aae47f0147b9140ac
+Entropy.13 = e5f617e8778f0076598d526422b095c3df140855f087e36ddd5b7623ed4a635a7e19afdaa2e7e503c30f7179c279f073
+AdditionalInputA.13 = 659bf1fe2fca26005dcdcb2533ca9e101f140e2c080422f9448adc9e7a7a9aa06bdbb034ee66e9c26efb02092431cf5e
+AdditionalInputB.13 = cda0e4ff69b9a2a8d505648a6026da9cb1cbe9d0af9bd422f2e5ef8fe2852dbf0abf7574958d96744947ddd5bd24aa95
+Output.13 = 1989f00f2afbf49bdda19733c294196a415874ca12cb89d7f5aaae66ba6e9d5a8df0ea17ff8c307fb6d13d9e91304a3d89e99badebb44352a617903982197850
+Entropy.14 = 60c247dd6d8a4cab04d6045d2655153e8256a6fbb52faf60517bc9cd86af8f6dd553181422d294bf4d70841119a1c458
+AdditionalInputA.14 = c839973b79c3eea5db7107ca7cae1c012cdd59a50e58b7461ed79211783725e955104e30a0040dcc73d5e2b97b4b8f84
+AdditionalInputB.14 = 3cde5a2f6e19fb4a4493830016cd86afcb7a8db49a2abf6077ebb5314dd12a2d1fe9d3601c125c41c3e9af4603ee8f8b
+Output.14 = e61a4d439b4bb1ccdc810ef7a0019e5e88321ab6687f6564d5f70c0afb1633d50da63d6d1b1919b724b57ee926d63a80ac20f1ff06c4932456c70e8b64db43f8
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = bc878e4fb59bf43cc7f86525a0db68845b88ee484b4b6e59a4e016ac61cbf15429dc50916e5bdb384cc17d19b7b6dfcb
+PersonalisationString.0 = 92c5221d5ccbc39e4ad3a79c9362091857a7ad4569660a786bdace18d574d18dfba4cc10f7a4c82230089be7c0d8657f
+Output.0 = d94615f9b23b17293b9ae8e15f363ec07bfcce20d9183c0ca9bfd25d67a85203645162ad9104552e7cd1fb8713bddd579b705a8074a9af93171972c851221f4d
+Entropy.1 = 303d5896d60526f7decb2b776bd58e5c2c5b8956fc29f68aecbaf848c93abb543159a87d5f73303a82d3a734e31d7c2b
+PersonalisationString.1 = 0a66bbef0225a55a6152d36f3a54e34236799420bc1ce1b6f73228a57c9bca792bb0d30f58b6046bac73ebb5be92d609
+Output.1 = 72cf7c85b9531d6ca50362bb9ba6d6be723a688d8abc8717ab5cf94b1dbef08f4b50ee11af4b803aacc39e4423899292a399384d118fe0c4e954981cffd4ac44
+Entropy.2 = 39bcf4d3135e1d80d087a11d7b9bbe02abf2531012e55fd17101dc2f586134f55398bae39b1bdf873d2c42e34b59d731
+PersonalisationString.2 = 1cc546db683bc3d9a4cf214e90143b7495da36114e223f13149009584a070b2471ae7a7c16f497a04b06fabf69f4878c
+Output.2 = aa7e7c9d691ec52ab03b6024a3bcd74fe828987289bea13309b37bd64a4816cf18392ce49383029a4640d8edd479d04e328ffe33f63daa407b1534a67ab39b15
+Entropy.3 = a94e58434c8ae4a0db42f4c4e827d3ad4dfdc6afa94339a4c81a55ef38af7b20c2343feec4f9edd9fd5b3f9b3dc498d7
+PersonalisationString.3 = 80fe065418942096eb9ba94348fc64fb0340ae8a21504fb5052d1abbff35172bdc95947dc65baa792f58ad8813e5be1a
+Output.3 = 95376899e257d3f81a034f1a2d9bc77355ddbb8e62dfe274501e4da71f5593ad5963b4303f2900d3c8608e9c49e7cb618ca680c6fbe91ef00146c26035d8875c
+Entropy.4 = 37dac4a51c642f083920fd5042f83b4cf3dcdfa9e2cb92544d88a87b4f8eb691d8e53ac0c07a6791a944b02e433af9df
+PersonalisationString.4 = 9e30eb9870fae6709aa4dde63c2bdf578ca0c34cae99436f80f26c31b472eb5401b2eb9ffb013d6559c9819e96de47a3
+Output.4 = b6b32de524ce8a90e9ebe921fa8834501d51ed40d81c288244948bc1bd6e761bb39cc6d0711579c144ca3d5e1d2d2367c5b84204810fb48559077fbb99612d67
+Entropy.5 = 59f25fc1f54495225948a1ee192fb07149ef61fd36886b8d5904f240eb157ebc44f0c71fcfb0d5c63538d057f2936970
+PersonalisationString.5 = e4d97c7130db6cfceadb3134748c921d4b4443cb9769ab9e8c301f6aa0a149d443d7556cf7f3b57a298060a8887befe7
+Output.5 = 44673a86b14322cc02884b0a7ceeb7400325e005bcb1a884c46f4473301ef5ecce2755e50b0057883f7489d7fe3a215986fd8d0962aeebf0ccacc30c46bc291c
+Entropy.6 = 8d0ec874eae008c7eb97893acd3964f9cdaa112f12f7578ae773fd5e822ed518df68cc6591d3ee60a3d740888e83f566
+PersonalisationString.6 = a095e52c8b40e7595879231e1b31975af4987d29c072e49898cd019e6f69eeba100a619fd956c676dfee8e30ec85ff21
+Output.6 = 92e1c3a801efd13bcdbd60d4c4c9f9d6c231999ae0c2737a971d6b2d2bce9afd82a74ab01411d97f2bb59ad66f14de256bdc12465b95306a83cefe95a0ebe1d9
+Entropy.7 = f03aa712ded060c918aec258cd329dd6511b2515902ad4b980f0c3de5c453c196d55de00e5a90283064b02c5a9dac5cc
+PersonalisationString.7 = ad6a88c58af7803e1b3f41568bd00f6999c52d706a45f03450d9fad8c6d54112b72dbdc99246987e823c19926377879d
+Output.7 = 9a624c859e78a54f82f0371cbc095d7f1b9fbb9ff87df9ff7b9499bcf89b6e376ba1ee7769d33c6c59885752ea46a9d02edaf22e3006d5c7822443078ebdb793
+Entropy.8 = b6f371bb2b8b13b85adf5feb0519f40139fd229486fbe57953e3ac541cb1bc853a51ad157abd27af38f62e1ccb271258
+PersonalisationString.8 = 7e56473aacd13cc730ceb598a0e4ae731fc4bba58e1e2ba216aa846c83eb90c214b02a1a08c268b5eae8a47d2878833f
+Output.8 = 6caed16e8a034b14785df2a1ab95cc48fc61f5479d73ac0c9238c9abcc26705eb600164dac29e9c6ba2cb3c4906e76e528f95a512c8fda76fe2d77c55f0259b2
+Entropy.9 = f75015ae8c9ef8ca5f82d9f31477a93b0c259300e4789b1216b79d33e301fadc102012df02f7a7adf51c20f992119459
+PersonalisationString.9 = 2e6a2b627dc6da85214697b8413d01dee91d325f59181fd02bdf1ac2d96e83b35332821e9f4f7c9b6399f20260a5d0a9
+Output.9 = 7e4b059687bc22003cd0aa936d305ce09eade4f3a54ec9523b8bfc6832d2c0105ca2652c749808069c11aba3bf392057616d48365d15b7cc4289fab9f9361ed2
+Entropy.10 = 781471b8d6d66edb778b54742cc90407a9a325d902a596c37080cfbec65752598704c45d9e757eda57e8819c047b36c7
+PersonalisationString.10 = c358a3c4aa3384e053bfa4a3b332dfd1df79f341a3e59f0e5015e8871fe74fcf9b4ac9fd5456f972ea24aa19cf59cede
+Output.10 = bf12dff4e3ab3b094165803da0c1a8de2ace254a1d65e4bb8ff39db9327bf1ebcde324d9512726d519634f8d724ed5a7935db509ba037200347cfb7c00b046d7
+Entropy.11 = e06dd440db6e8c160149c9e30029895f9127201be7dcbe33a845fe1e4c3d84ab26b19cb6466b8945cacea09cd6d699d9
+PersonalisationString.11 = 5b4942fe4263bf21659e85bd1ac4bbb50b941dfced77f4151b8e7b5216e821b54c91a8e83d9fc4758099c8db34d6c0fe
+Output.11 = e6c6ac76f502f025dd26168369f0f7e6f405213aa02f6db3b3823c1813c8b6eed95f71f4a71cb8270ffa8ac3ce5366d71567864565eefba7120e2edcc3b6ec80
+Entropy.12 = 69e7d2b5c03243c752ed07aeb06fdd3c8cbe05b0b42c2059e4ae01241da77d17890f0fa56c7940f6799417380a2288f0
+PersonalisationString.12 = fd7a2d8bae610a2bfbf206c9019601bc027580de8f85f60246b5126bd5e36f30d7f4e90d0c46cd3a63f9d2edcf671932
+Output.12 = 75fc757293351c545b1f730fd4ec82061d85e80f8b77122adb53722b509d7f27aebc8a5b1545b6e6bcef2c9c280fb307dc5af09b63bc8659eb6c905507a20e57
+Entropy.13 = 322a46b103d6d1765c90829ad06c8b80e366b434c29276de3c608dab02ed030c95a6f579ca98c0f3f9771cba099bfe29
+PersonalisationString.13 = 3c86e0ab0c20c6765595ce82cc54f369258074ab2d4b8b5d9fcab7dc38fa8866073af3a733546f685c68ee6815492691
+Output.13 = 6c995463adddec73b6c03eecac07db824256a791a1d0f4d786e949f0d1987ea4aedfd3bd06b1622cc85a2370cd30553ee3543d38d1c87cea731e6872e71f9ddb
+Entropy.14 = 7ce9977cb80634f0503deee2afb8230c57408c83bf5bf41d2d62d4daa4c492fa60be9274f539ef37ad3b83bdacdf702c
+PersonalisationString.14 = d862039cc2c297d63529a33f38a6e5660a06919a044c7e746ff238b65321d2a233a9a9c7b3534c932a8881ad38d31f65
+Output.14 = f17b61f1c3caae331160b714504b9c058ac345f07a5a26034dbfd7fef5013b52cae3e2cd357095b623065ec5cb557001887b17f9b6f9476d5449ac7d81d5abd3
+
+RAND = CTR-DRBG
+Availablein = default
+Cipher = AES-256-CTR
+PredictionResistance = 0
+GenerateBits = 512
+Entropy.0 = 9c2aa30349a0253b3a97ccf924f8bcafe1e1364600b4905a4d9a0d54f7f56ebd00079fcc12f83dfac71aa1f2c847127e
+PersonalisationString.0 = 57164cea958223964e94b3596c1afc06818dfe90841132c327342bbb654b74f20e5f50658324061205a8eea21dddcf48
+AdditionalInputA.0 = 4125bec3174314c603cf052af47bebf6433a17cd8a8fcb186f14cbd5761c09216d48b41d4fb17481afaf4dbc08681ae9
+AdditionalInputB.0 = dabf9135ae5d14280f2e269ea83f44dc2eb4d7613e5964cb1d499f7b5bdce45402546e86a78680bcd8ce1fe9d71ee758
+Output.0 = ec2e92976c00b2364838bd6cae8f4cc6194f39d722d88d990b32e595aa82de661534a0248de6daf4dc3698b7a0eef02dbc9e331c7cf4c029f55ca7abebd062db
+Entropy.1 = a2867dd3bccf77593d05cd04d7877003f6571c6c936e89486db08e81a405998c16aeb43cd2285c76f5d05c6c00d892da
+PersonalisationString.1 = cedb0c88ce2de17c5ade8c4b0522200b248e47deb2190edae3ffe1bfeeb3d5684668bba16a32a1aab9dc46a988b53168
+AdditionalInputA.1 = 175f3373eef6c4e6a3a0fed72b67cdc564c3da9ce542cbff687aa82aeb98d7d1179dded2eb8e339389a6c24c15c726eb
+AdditionalInputB.1 = fdddca755a66c7b6405bf88dbfcc199e98d1fee904b8b3adb1f752a206af3d82d1e27d99b6df80ce24328d02a575932f
+Output.1 = 7557d1033e8269a46486f91ed0622d2fdef5bac08b663d136739262ab14b254a8600fbfea2829e8667af3c790a61b8ae263d6ed0248ce1dd1b33762dde519dc8
+Entropy.2 = e6a0c6b9c546f7f7bd5c7e5deb3e86f6d7278b7999930d5854f9aba556add75dc2a0c801e14ff2bce5c4263543b6420d
+PersonalisationString.2 = 33b7e9005d32835d733dc7666831c3721274482b4d3ac438d0d7ca8e8746199e112fd9d23ea1a74a201e8b0de1c382d4
+AdditionalInputA.2 = 4de29fc6083ba300d7d53e32faaed8ae82ea421f886f3daf54a332df5e51f96587e14bff81930f20d95dde8994e22239
+AdditionalInputB.2 = a2539b0f0750a50ef43607846f1a2c1f888b87dcec072243ce3d74e1ac954c6a12cfe7438e4f392884b6863d68c59176
+Output.2 = 6fde604d9e8b866c7636b4dc401f99f5f74297645df0e61df7311bcfd740e0fbece8c68296aa26ec537c8285822302fccbce05fc808178a39b2ff48bd6b03641
+Entropy.3 = b416d375ccb791c167d8d7f9bb8fdbdcedc001a17551a39f2a4d0aadd13b3dc8cb93770060d6cb3bf23421ff0e345af4
+PersonalisationString.3 = 35b77c863cb87858a8d12a81d69e03bc205bcd9f32db58fb7ba653cafa122068225aedc0ba125125af81f008468a0522
+AdditionalInputA.3 = 520c5f1b3c736b83e9d5fd78ceb4e44ba1d07aea39586314c3ac7dd11813c5798e2ccea8d3b4cf40eaa25466044ab904
+AdditionalInputB.3 = 28e7313d63b9d4666975d5d3c0e710d247e4302d7d01762937a010989ad3e4394421a4a30ca34231af956538d302572b
+Output.3 = 6d8dae548903cf1f8dc2055725c9615161ef7e846fd87824f7ffc172c2aa20ba8cfe4086d4d77d4c6b92516b5976916272176265c775ceb0fc142e6e84dbe760
+Entropy.4 = 1eb89e393b5575e96e14b90c773497bd5761b48983b9f25e77870c04f8e5af2e3b3dc306067344b98eee510ba4251641
+PersonalisationString.4 = 3e541ecc7750d022e547a38b22bd35d3d00882d97cc2886f5162c5ee49a95f9347f805c6b5b81db4c0af0b19f033fd5e
+AdditionalInputA.4 = d6f9da8e38e9622f3e4d9c73e50685811cb7e87f9d71e7b959e3986ca02c74887ff0dcfd496dfe3aab636377e3390910
+AdditionalInputB.4 = b1932ac6c0bb26e36e2aef898db3f63ad72a4ab82f433b6921f6ec0cbb1b20baebd6eb2469ba487deaec51082d06b169
+Output.4 = 470e8f1f67c312dd8e62f186511f9d78f38c6fa62aae074b1ee18b438430f01cab313834e4e4c1c8d5f5d04503a27cbe1b8620d60042492f90d598b12270ef0f
+Entropy.5 = d83a624c5d628de83e80e663100e2c9e462a875ca340a3cc5f5f9ca401780778288f674882a68ebf40a293086fc6a43d
+PersonalisationString.5 = ba8704a54e247679a5bdb70d3b29e58f4420773552cfc99e041a862d12ea929ad44c1609cfa2487494d55af220e95a9a
+AdditionalInputA.5 = fe69355e0e4d9bd85a93fbfc6fce30551e31ffa8d4668126f37547eccab4064a02a5dcc8f5bb07cd4d646cccd834235e
+AdditionalInputB.5 = a6ded7592389684843d5cfff28d2bde913ef686212e0f54d7b7d907363967a55523c3b1527b1157ce912b66312eb4697
+Output.5 = 0bca2598d8b0ce06c36feef8f9a568be89ebad5e1df20e7a023409c8a029c42b6e15b024472445c3eb7a0c8c50f7229b9d76b8609bf4a35659475cb30080b459
+Entropy.6 = 9457d6030de6ae6d3ac1f63bb7094c4ffcb33d7178a4babff57d549a58b6fd4f8b6b1cac51859f171fd62b76e63ebcf4
+PersonalisationString.6 = 6244e033b03f7bfadc50f29373033d873e55f2bb069217de4d51f5089815f14f1e009fec55b72e06f2b2ffa87e10174f
+AdditionalInputA.6 = 92f7bd2be676cf3e3e3a7f9fe207a31ba6ad983d065d68a8ef5e799817649d8d475a2fad2bf90dc2542161a867a71ae0
+AdditionalInputB.6 = 0a6e316a18c56d0fca17298bc5cdc7bab3464a0850b14198a71c4491ab36f507f94cda0f0778f86a87b719c960f9b10a
+Output.6 = 491f2f91815051c7dfc6f8c36d3c9a443d9e5489798879b065859390110e65c05be12bd95e45b210307d514da21d6668ac829680888c2fac127761b7fb5796ad
+Entropy.7 = 6b8a85d0a9e6d90c61fb20bfd0b28abca2e52d34966757ebbcb839ee270dc2b09994166b599aa42b09a19b71721462a0
+PersonalisationString.7 = 407cd257f6684a87571a31b9894c7ce54fe0105161e52b0232d8b23a4beb74a81dace4beb4362bf496e7a6e6776b0f8e
+AdditionalInputA.7 = 8352bcda2ceab1dc836eb451871fcdb14c82e325a734ac54c9741aa78948f631ffe75805b8a4da6cc9aeca8d27d13607
+AdditionalInputB.7 = a9dc73f72991811045af8347078f27cce0297a934323dee6cd9d06b002512aef9ac062e8770e7aa7436a55fcee00b977
+Output.7 = 1510e24cd16948704e3e32500f3e0b706d16a68fb52f3329942806886360a0b37f7a20ea4671cde13f6fc3b7530d2e6f8d0652c5ed8e5a4dd524494a64971a73
+Entropy.8 = 69f5dbe05971dda9236792549c248d6bf6e315d40465aee264ba8edb798875101ff32ce73dae0e47cd506e078b8e99a0
+PersonalisationString.8 = f3427475832ba471e260e2ffc967cbee714a54fc208412474ff203eb92edad9a5e611a99e7153bba525f8a173329aade
+AdditionalInputA.8 = 9d9601c99275cc6980843e20bd4204b23eb5ca7324f4bf908f5bd0eb4a37c2982f7fbdbb7c8591d5414707895ef8652b
+AdditionalInputB.8 = 553e5d188ec41436d0b384cd7773c90452a1865580a52df90f6ae11b1aa13ad5851c6bc6867df5a8d03213e3fd56ade9
+Output.8 = c677780e0cc5eae9c812c192b271635f74bfd252e782e8ba38727c4afc7b47a6d9d5520459e134013ec3144010b5d3d4e4747526f03c614f1863f2983e18685b
+Entropy.9 = 2d52bde0d6972620c4219f05fc95d0bc2530024445d5c9107a0684db3904c597e0d31412d9b88514c9aca745a32b5f65
+PersonalisationString.9 = 45360c8ec1d227f3b2751f1610d1977c146f54c7422ca7a6741a064a5d12d7e17e85033aba2019d9ee7a5dae5d117537
+AdditionalInputA.9 = a7d5a7e8b1c56a91692269f9e957ddfd2e8afae9fb884f2f2bba616c43b0e80128af25e7cc461a941168e506cfb2cd80
+AdditionalInputB.9 = 1ff6126a738e7bc100042c65b1aa0fa5f4d79b58794c3a0870d7df1e15329a35d56a17fff6429921d0fd9da949ae52b8
+Output.9 = e99ccd90cc3c61a9bf92509768236f2ae1ba5c6bd79ed6de13b5805b048579f86fed1b383227ef27e27454ae1c63421144711c3c305d61d078a47249d68a4587
+Entropy.10 = dd3cdd9b28f75ccb5b77e19aa808c8f317058f26ce262ffef99ad0993f7d9e3b710f023e6424a393c7f17875151a8ce2
+PersonalisationString.10 = e952f4ed561dbe37ba3cf52918a7a46205bb22c5d754a4d6059cee71bf5b1c55a041715f9932ca0689e84f433225b2b6
+AdditionalInputA.10 = ad0782de0ddad998c5359627c9fd4e8b41b9aebf01b75e360003e38f239b431412672269d91e516239fc5bb91fbc0136
+AdditionalInputB.10 = e0b004849d31e69be88fc48ab8814b438b695b10ad20f50f8cbbce034f29bb7449948bb2d99f5c86bbbf0b17376dc189
+Output.10 = bf7da7d107c129bf207ff1a11367b3c1661f2604440ede09d3a920854ad27b790501c906606792c596866fd87e688cc6b9eeea455d9edc139fdb3f76b76efe57
+Entropy.11 = d70cc87ccf0e3e511a6c07bb4247ac223bd8e69a83a37acea17bbc05721dcf77bcbfe39f9372021f99e1c76015d130d0
+PersonalisationString.11 = e18c996fadf1395dd0663b1bbf5259f6d56110115f8e065205ede5d41d76875fa1782dbedca705450cb9c21dba9ef983
+AdditionalInputA.11 = 4fe4668dfad3df8175c8c39fede0be23cf0bdaffc8f7f158feb97366e59e84ff25144c6ff99111a2355cfbc1f5c167d6
+AdditionalInputB.11 = 7a56c26206f5ebc3b70c49574ac89b07104674097a6a11946f1b923676c596eb09fd5f9824efba1948359cdf2428cd9f
+Output.11 = 8472e671dbcc41a4ef46e19d46428646e5f5402d46020dbdd0d0783a70da54b3a5a8fa8ab5c1c90fea5e2c6db68967901cf6cf5fc6f54bb6717cb7b3c77640b3
+Entropy.12 = 1e17d4330ebb4d06ab2ca5eeea4cd59781386f073947bf8e04d86c8c10dfca0299f69c0059d4a00e536ee0ec526bfabf
+PersonalisationString.12 = a61f6a699d163d159c1d8741444ff4d6172bf817facb074c1550c35a7d4757eefc3e24bad564b86a49d557397742aedf
+AdditionalInputA.12 = 4682faca35083aa672b8dd1d3ccce9f552fb06e2a8528d796cdc05fd1b56953dab67a51f8b9efa8f1a4f6d767fece84d
+AdditionalInputB.12 = 447e0e0e87cb825863600d25b352ed4efe5a75a2bd39137c190d4232189fe9249004d116f1435613fdaaee221ed448df
+Output.12 = 54d098124dc7df57a6a4c0679f76c01d674c7e5e270af8ae61dcb7d8cbedbdde1b928987b2b8d2410a04705d8dd2128fc6159dfa30ea0f759240610c86d88a5f
+Entropy.13 = fdfe01e515d193dc046981b3ffe34dde3b48f7d9d427431d1b11e1969f6c9b526234d9c95d3a19fcb6a63aefd37eae89
+PersonalisationString.13 = 3ca6ad90593fcaa92b99894a5e7f55b1c23fc47a58c7157ff334ce2a758a571ecbb9f47c3f9f8bf3c4f5f6f45b2ef1be
+AdditionalInputA.13 = e9bb42665bba29961c6fb273fc5965cd94594bc53dc9193ba04d7b1806950421c5a828576345b0d09852f16e705f1ab6
+AdditionalInputB.13 = 944de58bf82bc801f013e5ac2fed93a4dbdcb58b8883769e882948cc5cdd0e4d8f5cc7e80b3a4c260bbc10b5c0094c51
+Output.13 = d745bda32d47bc9fc8d00d69b46e54acdf79b7f928160d0dfee5d33e40387f68103714d37ada08b8d4aa0f5e62befade2c1121daa8d5659db7dbe6e17c16b9e0
+Entropy.14 = 6562bbb398c02c7ddf0bdcbfeacd5afe31c775bda53b4cb2a3896a898149bb195fa3dd69237bfabe3a4c2daebf30dc17
+PersonalisationString.14 = 963e80b84ceb2045f9b5219239b42139aac675ca0b591b2553e839647aba2084993b0765456ae907aa5d6da34487432a
+AdditionalInputA.14 = 59ccb90fb7e9ae3a532f956bc0038ce0ae32fa714d8836c47891983afb682ed2335600639da1d2a9e89a957abc5b3d50
+AdditionalInputB.14 = 91165e46016f2d5619cd4549f5ac2056396bee7316a366ec6051f3bd26770b3fd63c163494fb7e9d326ecad9bfc171a8
+Output.14 = 87ed4aef264f2ac54510b83b98f7585aef7f382947cb49803784a27cfbbc5874562b6d6cb57b7548a1be464abb2028c344074527e8ec56ad6e2b3b8fc56f177c
+
+Title = Hash DRBG No Reseed Tests (from NIST test vectors)
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = 136cf1c174e5a09f66b962d994396525
+Nonce.0 = fff1c6645f19231f
+Output.0 = 0e28130fa5ca11edd3293ca26fdb8ae1810611f78715082ed3841e7486f16677b28e33ffe0b93d98ba57ba358c1343ab2a26b4eb7940f5bc639384641ee80a25140331076268bd1ce702ad534dda0ed8
+Entropy.1 = dfed69b08902fcfb795d5d35dbe23f6b
+Nonce.1 = 37258e820432e392
+Output.1 = adcb8e2cbbc5957d538a20db18b5e7fe350a90a201359fab9e0f154c53aa146bc6af1fcc7ff8f330b8d9f3d7b038488ba627e6fa21d0147377b1340422b22634b412dac69ac82c35b5fb411a4e42a133
+Entropy.2 = f32e36ff8098f932035cae429c0ece72
+Nonce.2 = 5552ceb182324b49
+Output.2 = bac94bc1797b209b8e576709d68d92a94aa8a5f414feee3e87d2f21fcb5939314b1b4711274077e794e8e385a28fabb5b49081ef14cb1396cb12542fd1b48c2ad4df98f74bf08346f0a29ff7088dcbfe
+Entropy.3 = 213e9022898aa05c7a6a01a4b8d343cc
+Nonce.3 = 7b6981d7e16c9880
+Output.3 = a74906340d7514db5b44860170a5e0733c67d3ce7e51bd32b049800d8e3c36c845560084decc79e6f7b4d6f2f127592e645891792d0f562b67bc8a1f63aa149d849de1fe032825f3a5d46fe3705024eb
+Entropy.4 = 091ba785fac466b4851ea2dca8b38bcd
+Nonce.4 = 9012cbb0f9b59cac
+Output.4 = 399ae61fe531448c8206d7ac127b6a4486adaebeff3567b6bcd0f554b82a6aa6337f7311465946912283dc3fb05cf89a74ad0a1851c5a20026ca990f1184a8a9978aad2e0c40b6c4e3571bfa0f144329
+Entropy.5 = ff076a630f39bd94d07e88d0232dd56e
+Nonce.5 = f51a8c5d4cd4131f
+Output.5 = 991d77b515bb73dec2226c2486e634d6531aaa6cef9f646fba5fdd0210834c730b7f2fa110ab061cfbb08a95b3694b62e81d0c6b82cf294ea62fdec094c3ed7834fbf9b876f1a63a583e2ea42a58ff74
+Entropy.6 = 0f679e662f08197e7645763919ba08e8
+Nonce.6 = 187e82eb844b32c2
+Output.6 = ff639c15f873d350f1778f1e9ea0a5614eb260ac453f5c5730bb0be9072a013f1596ae266cc09ff1c8a7fe520ebd4069248d86ea36de43580cd07ccef1ec8b6fe16c2a500424abe65765c41891972dc9
+Entropy.7 = c448624035df3b168af39755b952f0ef
+Nonce.7 = 6c32bd9dd5347f3c
+Output.7 = 3bb725633745c30a3cfe9feb0529532a65368b65d2e7fb990d6ba2f9bbbbb8cd66ec1af530614fe39b7ad55b2a6291791741f7e76116da1ebfed658ec55a862947671682d287c0f6e8ceabd50c4c3759
+Entropy.8 = efd2561148bfad41595be969c3f021fe
+Nonce.8 = 7c7233e9e06fa189
+Output.8 = d9b6b5b0aa26a01de152ced94a83bbb6affdb915e488a04b642211f8e3b88d89f59d92f9f4fcd8998907bf148bc58f30115c8fff85c55713545fe77582d906758db20ae7537f3da6f9a8c994fa2d01b5
+Entropy.9 = a13ed8f604ac0346c2ac270129bb3578
+Nonce.9 = 9ca5f62c4d09de87
+Output.9 = 6cf70e27a9793c14ebae73b653798c15e14e6cb9b854349e42d8801d49364d7788686f89c6ea2db7f038dd42432dd744bbc91e1fcdaf6eee2e76325db729fd3a99b96cd638c4a8923516fa04fd90eac5
+Entropy.10 = dfe6ebca43ec46b8aac35333ddc47d44
+Nonce.10 = 5d03cbacd44db169
+Output.10 = 1c1d756b6d5d475ee39319399200b7f864112454bf03cc61f6856c5d4207b1cd9792c0841ab3b56730ab26d95c360cc02ac4611ef47f80d665ffb8327e103fef246bf93a2a1038b2beda9a8a6d21c415
+Entropy.11 = 48e5fbd1acc601e02d81ce030f100155
+Nonce.11 = a0fc82d8e692e69b
+Output.11 = 9eea525ca572095b4d0b967ca8fcc5dae6ec326a0b9bb63c4a7f08d1dad4a5d21c15cf4b8df9eb8ad26037d9dce9a7848af5ee8e30493dea7be2b1f1ffe8c4171c1311acf9821c06614838ae2b8ab7b2
+Entropy.12 = dc8c369f6f659cf760710b1a69a547cf
+Nonce.12 = 45847cf48b89b3c9
+Output.12 = f84562c15d3a3574a27d3ed8991f17b8e7d3b74a0650d6dc328d947a984257cf22f9f6ef5f5fb2080e59d65f6f2ca996b7b151d7b79bc98cc71e5042a10bc4b933fa5ca2731bfc5cc6b0b7ca25e6416b
+Entropy.13 = 4e8b4b1e2f6a9fe8abb56f716bc894b8
+Nonce.13 = 38565e90cd131e3f
+Output.13 = e046050ed2a14a564dc69b7e4aa89a998a0dc7325a05e4666b0cf611885f6391d98c31d8e2527ea296791d0c8f34522ced84217bae3eac5eb8732cbc4af07169e25f9fb6da4588e019969d79fcccd5f7
+Entropy.14 = 6fe9597b59903b1af4012a15368af7b1
+Nonce.14 = fd3e84b3a96caaff
+Output.14 = 1eee4c786476d488e58d0e065bb025db548787fafbe757f29ee2bd4781cf69216091ba2b68919b54ad3070ac72a2342320eb1e697b9115acbe07e194d060562e4d0fd966ab29e2c5e560574b2dac04ce
+
+RAND = HASH-DRBG
+Digest = SHA-1
+PredictionResistance = 0
+GenerateBits = 640
+Entropy.0 = c3ef82ce241f02e4298b118ca4f16225
+Nonce.0 = 15e32abbae6b7433
+AdditionalInputA.0 = 2b790052f09b364d4a8267a0a7de63b8
+AdditionalInputB.0 = 2ee0819a671d07b5085cc46aa0e61b56
+Output.0 = 5825fa1d1dc33c64cdc8690682eff06039e79508c3af48e880f8227d5f9aaa14b3bc76baee477ebbb5c45547134179223257525e8f3afefb78b59da032f1006d74c9831375a677eab3239c94ebe3f7fa
+Entropy.1 = 4ba70743accd4319e11de0461d9a37aa
+Nonce.1 = 845e4a96462fb16a
+AdditionalInputA.1 = c7deec6cb5049c34c8be42375afec6f0
+AdditionalInputB.1 = 37af8411085b41d88ecf899ff2bb1325
+Output.1 = 7b6dacba0f66f2a12071f9da43f75a61240df75a47dda16f474ed2cf0308f50794bf017cc6e6f018fa9fa1500748f7e0b36e62c62a8dc427f58c1f2c5aed10a4726d886ca12325ef0c566d5bc9a04ecf
+Entropy.2 = ac3cd0ea3d26197cc9379b82bd8289ff
+Nonce.2 = e363ff61741aab5e
+AdditionalInputA.2 = c7c30f2a6e500b0bf946d021932bb124
+AdditionalInputB.2 = bcb40c373a4a9be606790e551737f06c
+Output.2 = 15f49e7914fe0bce039b99060cc372ceb453282946579a47d9bfb61c5aed7a4da0dc77be7e7bc33b63d650f28490d92fb58725d519fad94492f712bd8193d094c865ccbd419625d5d27e249b1cc555cc
+Entropy.3 = eb51fe7bd72474659947b0ed5109be38
+Nonce.3 = 0a2aff93bfcc0722
+AdditionalInputA.3 = 94f6173ed7c36a63c4a95c914d0742b7
+AdditionalInputB.3 = 6b11989148cb860407a3675a33798969
+Output.3 = a679a08a100ecc5250c33b9b1dcd9e20469b30316d0e0e4780ffe15c06c99c0440f7dbf04621215d3d5081201d4a10416a9138782c5692ed9eaedc99c7ccfb09ab0849381150145dc0e55a8fa8898068
+Entropy.4 = 9cdb91a21b4fdcc410f960ceb7ac8ec8
+Nonce.4 = 9d01f73ae168ed6e
+AdditionalInputA.4 = e1eb4bb2d080b1d3e95bc042ace94c68
+AdditionalInputB.4 = 062dc866f414b951e3f61aa7fe6d1ffe
+Output.4 = bfb0077e995f49c403dc38297ee47b41938864d734b2e7b794e9bbf461a2a4a45f364d82a66b3730bc5c9902d7b